Mycroft-core: El bloqueo de Mycroft de malas palabras `****` interfiere con las búsquedas y otras funciones

Creado en 11 nov. 2017  ·  8Comentarios  ·  Fuente: MycroftAI/mycroft-core

(Para este informe de error, #### indicará mi propia censura autoseleccionada, ya que no conozco las políticas de este proyecto con respecto a las maldiciones. **** indicará palabras de censura de Mycroft).

Mientras probaba una habilidad, me di cuenta de que en algún lugar del análisis de mi entrada está convirtiendo las palabrotas detectadas en asteriscos, como la consulta " #### you" interpretada como " **** you". Este puede ser un valor predeterminado razonable, pero quiero reproducir álbumes que contienen títulos explícitos y esta característica rompe esa funcionalidad.

Esto parece afectar el núcleo, no solo una habilidad de terceros:

Pasos para reproducir:

  1. Di una maldición después de la palabra de activación. Por ejemplo, "hola Mycroft, #### tú". (Si estaba buscando el título de una canción, podría estar diciendo algo como "Hey Mycroft, pon #### the police de NWA")

Comportamiento observado:
Mycroft informa e interpreta " #### usted" como " **** usted".

Comportamiento esperado:
Mycroft no censura las malas palabras, ya que son necesarias para reproducir canciones con títulos explícitos. Opcionalmente, este debe ser un comportamiento configurable y 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

Comentario más útil

Soy de Jersey y juro mucho, esto también es un problema para mí.

Todos 8 comentarios

(Esto es en realidad un error real a pesar de mi novedad en el proyecto y su naturaleza inusual).

Me encontré con esto también. Sería mucho mejor tenerlo solo como una opción en lugar de como predeterminado.

Esto se debatió la semana pasada, creo que la conclusión fue hacer cambios para permitir que esto se apague. @matheuslima ¿puedes comentar sobre esto?

Soy de Jersey y juro mucho, esto también es un problema para mí.

¿Algún progreso en este tema? la censura es realmente molesta.

Oye, yo no estaba presente cuando se planteó este problema por primera vez, así que no formaba parte de esas discusiones, pero este es en realidad el servicio Google STT que usamos para censurar. Necesitaría ver si hay una bandera que podamos establecer en las solicitudes para desactivarlo. Si alguien ya lo sabe, por favor intervenga.

A partir de un breve resumen de este problema, he podido determinar lo siguiente:

  • La mayoría de los servicios STT que admite Mycroft (siendo Google STT actualmente el predeterminado) tienen un indicador profanity_filter que se pasa a la API.

  • En las clases STT de Mycroft, esto se establece en false para la clase IBMWatson STT según: esta línea de código , sin embargo, este parámetro no parece estar configurado para GoogleSTT clase.

  • En la clase GoogleSTT , este parámetro no parece estar configurado y creo que esta es la causa principal de este problema. Estos son los documentos para STT de Google : el parámetro se llama ProfanityFilter .

  • Sin embargo, no creo que la respuesta sea simplemente establecer profanity_filter para que sea false en la clase GoogleSTT . Creo que deberíamos darles a los usuarios la posibilidad de configurar esto por dispositivo, al igual que Wake Words, motores STT y voces TTS se pueden configurar por dispositivo en: https://account.mycroft.ai/ dispositivos/

  • Por lo tanto, creo que esto requiere cambios en el backend de Mycroft Home para tener una implementación ideal.

Lo que intenté hacer como solución fue implementar una nueva variable self.config en mycroft.conf :

  // Profanity filter
  "profanity_filter": false,

Esto requiere soporte en las clases STT , es decir, esto es lo que probé en la clase base STT, pero no funcionó;

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

(En este punto, mi micrófono dejó de funcionar con Mycroft por alguna extraña razón, y nada de lo que hice pudo hacer que tomara el micrófono nuevamente, así que no pude continuar probando)

Esto no funcionó: el ProfanityFilter todavía está configurado en True , y el *** permanece. Pero, esto podría ser una pista para otros que quieran abordar esto.

Probé el módulo Google STT y el filtro de blasfemias parece estar desactivado de forma predeterminada, pero requiere que uno mismo tenga una cuenta de Google Cloud para usar.

La API utilizada por el backend de Mycroft (que no es el servicio de Google Cloud Speech to Text, sino otra de las API más antiguas de Google) siempre la tiene habilitada y no permite apagarla si no recuerdo mal.

Sin embargo, una configuración de configuración es probablemente una buena idea. En mi opinión, el valor predeterminado debería estar desactivado.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

el-tocino picture el-tocino  ·  4Comentarios

krisgesling picture krisgesling  ·  5Comentarios

tiagochiavericosta picture tiagochiavericosta  ·  6Comentarios

ChanceNCounter picture ChanceNCounter  ·  8Comentarios

KathyReid picture KathyReid  ·  8Comentarios