Mycroft-core: Блокировка Майкрофтом ругательств `****` мешает поиску и другим функциям

Созданный на 11 нояб. 2017  ·  8Комментарии  ·  Источник: MycroftAI/mycroft-core

(В этом отчете об ошибке #### будет указывать на мою собственную выбранную цензуру, поскольку я не знаю политики этого проекта в отношении ругательств. **** будет указывать на слова цензуры Майкрофта.)

Во время тестирования навыка я понял, что где-то в процессе синтаксического анализа моих входных данных он превращает обнаруженные ругательства в звездочки, например, запрос « #### you» интерпретируется как « **** you». Это может быть разумным значением по умолчанию, но я хочу воспроизводить альбомы, содержащие явные названия, и эта функция нарушает эту функциональность.

Похоже, это влияет на ядро, а не только на сторонний навык:

Действия по воспроизведению:

  1. Произнесите проклятие после слова для пробуждения. Например, «Эй, Майкрофт, #### ты». (Если вы искали название песни, вы могли бы сказать что-то вроде: «Эй, Майкрофт, сыграй #### в полицию от NWA»)

Наблюдаемое поведение:
Майкрофт сообщает и интерпретирует « #### you» как « **** you».

Ожидаемое поведение:
Майкрофт не подвергает цензуре ругательные слова, поскольку они необходимы для воспроизведения песен с явными названиями. Необязательно, это должно быть настраиваемое и документированное поведение.

16:50:56.682 - mycroft.client.speech.listener:transcribe:144 - DEBUG - STT: f*** you                               
16:50:56.682 - __main__:handle_utterance:55 - INFO - Utterance: [u'f*** you'] 
Bug - quick hacktoberfest help wanted

Самый полезный комментарий

Я из Джерси и много ругаюсь, это тоже проблема для меня.

Все 8 Комментарий

(На самом деле это настоящая ошибка, несмотря на то, что я новичок в проекте и его необычный характер.)

Я тоже столкнулся с этим. Было бы гораздо лучше иметь его как вариант, а не по умолчанию.

Это обсуждалось на прошлой неделе, я думаю, что мы решили внести изменения, чтобы это можно было отключить. @matheuslima можешь это прокомментировать?

Я из Джерси и много ругаюсь, это тоже проблема для меня.

какой прогресс по этому вопросу? цензура действительно раздражает.

Привет, меня не было рядом, когда этот вопрос впервые был поднят, поэтому я не участвовал в этих обсуждениях, но на самом деле это служба Google STT, которую мы используем для цензуры. Нужно будет посмотреть, есть ли флаг, который мы можем установить для запросов, чтобы отключить его. Если кто-то уже знает, пожалуйста, присоединяйтесь.

Из очень краткого обзора этой проблемы я смог определить следующее:

  • Большинство сервисов STT, поддерживаемых Mycroft (в настоящее время по умолчанию используется Google STT), имеют флаг profanity_filter который передается в API.

  • В классах Mycroft STT для этого параметра установлено значение false для класса IBMWatson STT в соответствии с: этой строкой кода , однако этот параметр, похоже, не установлен для GoogleSTT класс.

  • В классе GoogleSTT этот параметр не задан , и я думаю, что это основная причина этой проблемы. Это документы для Google STT - параметр называется ProfanityFilter .

  • Однако я не думаю, что ответ состоит в том, чтобы просто установить profanity_filter равным false в классе GoogleSTT . Я думаю, что мы должны дать пользователям возможность устанавливать это для каждого устройства, точно так же, как Wake Words и STT-движки и голоса TTS могут быть установлены для каждого устройства по адресу: https://account.mycroft.ai/ устройства /

  • Поэтому я думаю, что для идеальной реализации необходимо внести изменения в бэкэнд Mycroft Home.

В качестве обходного пути я попытался реализовать новую переменную self.config в mycroft.conf :

  // Profanity filter
  "profanity_filter": false,

Затем для этого потребуется поддержка в классах STT , т.е. это то, что я пробовал в базовом классе STT, но это не сработало;

class STT(metaclass=ABCMeta):
    """ STT Base class, all  STT backends derives from this one. """
    def __init__(self):
        config_core = Configuration.get()
        self.lang = str(self.init_language(config_core))
        config_stt = config_core.get("stt", {})
        self.config = config_stt.get(config_stt.get("module"), {})
        self.credential = self.config.get("credential", {})
        self.recognizer = Recognizer()
        self.can_stream = False
        # set profanity filter
        self.profanity_filter = self.config.get('profanity_filter')

    <strong i="36">@staticmethod</strong>
    def init_language(config_core):
        lang = config_core.get("lang", "en-US")
        langs = lang.split("-")
        if len(langs) == 2:
            return langs[0].lower() + "-" + langs[1].upper()
        return lang

    <strong i="37">@abstractmethod</strong>
    def execute(self, audio, language=None, ProfanityFilter=self.profanity_filter):
        pass

(В этот момент мой микрофон перестал работать с Майкрофтом по какой-то странной причине, и я ничего не сделал, чтобы заставить его снова поднять микрофон, поэтому я не мог продолжить тестирование)

Это не сработало - ProfanityFilter по-прежнему установлено на True , а *** осталось. Но это может быть ключом к разгадке для других, кто хочет решить эту проблему.

Я тестировал модуль Google STT, и фильтр ненормативной лексики, по-видимому, отключен по умолчанию, но для использования облачной учетной записи Google требуется, чтобы у одного человека была учетная запись Google Cloud.

API-интерфейс, используемый серверной частью Mycroft (который не является облачной службой преобразования речи Google в текст, а является еще одним из старых API-интерфейсов Google), всегда включает его и не позволяет выключить, если я правильно помню.

Хотя настройка конфигурации, вероятно, является хорошей идеей. На мой взгляд, значение по умолчанию должно быть отключено.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги