Mycroft-core: O bloqueio de palavrões `****` do Mycroft interfere nas pesquisas e em outras funcionalidades

Criado em 11 nov. 2017  ·  8Comentários  ·  Fonte: MycroftAI/mycroft-core

(Para este relatório de bug #### indicará minha própria censura autosselecionada, já que não conheço as políticas deste projeto em relação ao xingamento. **** indicará palavras de censura do Mycroft.)

Ao testar uma habilidade, percebi que em algum ponto da análise de minha entrada está transformando palavrões detectados em asteriscos, como a consulta " #### you" sendo interpretada como “ **** you”. Esse pode ser um padrão razoável, mas quero reproduzir álbuns que contenham títulos explícitos e esse recurso quebra essa funcionalidade.

Isso parece afetar o núcleo, não apenas uma habilidade de terceiros:

Passos para reproduzir:

  1. Diga um palavrão após a palavra de despertar. Por exemplo, "ei Mycroft, #### você." (Se você estiver procurando o título de uma música, pode estar dizendo algo como, "ei Mycroft, toque #### the police by NWA")

Comportamento observado:
Mycroft relata e interpreta " #### you" como " **** you."

Comportamento esperado:
Mycroft não censura palavrões, pois eles são necessários para reproduzir músicas com títulos explícitos. Opcionalmente, este deve ser um comportamento configurável e documentado.

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

Comentários muito úteis

Eu sou de Jersey e juro muito, isso é um problema para mim também.

Todos 8 comentários

(Este é realmente um bug real, apesar de minha novidade no projeto e de sua natureza incomum.)

Eu também corri para isso. Seria muito melhor tê-lo apenas como uma opção em vez de como padrão.

Isso estava em discussão na semana passada, acho que a conclusão foi fazer alterações para permitir que isso fosse desativado. @matheuslima você pode comentar sobre isso?

Eu sou de Jersey e juro muito, isso é um problema para mim também.

algum progresso nesta questão? a censura é realmente irritante.

Ei, eu não estava por perto quando esse problema foi levantado pela primeira vez, então não fazia parte dessas discussões, mas este é realmente o serviço Google STT que usamos para fazer a censura. Precisaria ver se há um sinalizador que podemos definir nas solicitações para desligá-lo. Se alguém já sabe, por favor, entre em contato.

Em uma breve leitura deste problema, fui capaz de determinar o seguinte:

  • A maioria dos serviços STT suportados pelo Mycroft (com o Google STT sendo atualmente o padrão) tem um sinalizador profanity_filter que é passado para a API.

  • Nas classes STT do Mycroft, isso é definido como false para a classe IBMWatson STT de acordo com: esta linha de código , no entanto, este parâmetro não parece estar definido para GoogleSTT class.

  • Na classe GoogleSTT , esse parâmetro não parece estar definido , e acho que essa é a causa raiz do problema. Estes são os documentos do STT do Google - o parâmetro é denominado ProfanityFilter .

  • No entanto, não acho que a resposta seja apenas definir profanity_filter como false na classe GoogleSTT . Acho que devemos dar aos usuários a capacidade de definir isso por dispositivo, assim como Wake Words e motores STT e vozes TTS podem ser definidos por dispositivo em: https://account.mycroft.ai/ dispositivos/

  • Portanto, acho que isso requer mudanças no backend do Mycroft Home para ter uma implementação ideal.

O que tentei fazer como solução alternativa foi implementar uma nova variável self.config em mycroft.conf :

  // Profanity filter
  "profanity_filter": false,

Isso requer suporte nas classes STT , ou seja, foi o que tentei na classe base STT, mas não funcionou;

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

(Neste ponto, meu microfone parou de funcionar com o Mycroft por algum motivo estranho, e nada que eu fizesse conseguiu fazer com que ele pegasse o microfone novamente, então não pude continuar o teste)

Isso não funcionou - ProfanityFilter ainda está definido como True e *** permanece. Mas, isso pode ser uma pista para outras pessoas que desejam resolver isso.

Eu testei o módulo STT do Google e o filtro de profanação parece estar desativado por padrão, mas requer que alguém tenha uma conta do Google Cloud para usar.

A API usada pelo backend Mycroft (que não é o serviço Google Cloud Speech to Text, mas outra API mais antiga do Google) está sempre habilitada e não permite desligá-la, se bem me lembro.

Uma definição de configuração é provavelmente uma boa ideia. O padrão deve ser desativado na minha opinião.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

AMDphreak picture AMDphreak  ·  10Comentários

fermulator picture fermulator  ·  6Comentários

Ahmed-Benj picture Ahmed-Benj  ·  7Comentários

forslund picture forslund  ·  6Comentários

damorosodaragona picture damorosodaragona  ·  5Comentários