Mycroft-core: Mycrofts Blockierung von Schimpfwörtern "****" beeinträchtigt die Suche und andere Funktionen

Erstellt am 11. Nov. 2017  ·  8Kommentare  ·  Quelle: MycroftAI/mycroft-core

(Für diesen Fehlerbericht gibt #### meine selbst gewählte Zensur an, da ich die Richtlinien dieses Projekts zum Fluchen nicht kenne. **** zeigt Mycroft-Zensurwörter an.)

Beim Testen einer Fertigkeit wurde mir klar, dass irgendwo beim Parsen meiner Eingabe erkannte Schimpfwörter in Sternchen umgewandelt werden, z. B. die Abfrage " #### you", die als " **** you" interpretiert wird. Dies mag eine vernünftige Standardeinstellung sein, aber ich möchte Alben abspielen, die explizite Titel enthalten, und diese Funktion unterbricht diese Funktionalität.

Dies scheint den Kern zu beeinflussen, nicht nur eine Fähigkeit eines Drittanbieters:

Schritte zum Reproduzieren:

  1. Sagen Sie ein Schimpfwort nach dem Weckwort. ZB "Hey Mycroft, #### du." (Wenn Sie nach einem Songtitel suchen, könnten Sie etwas sagen wie: "Hey Mycroft, spielen Sie #### die Polizei von NWA")

Beobachtetes Verhalten:
Mycroft meldet und interpretiert " #### you" als " **** you".

Erwartetes Verhalten:
Mycroft zensiert keine Schimpfwörter, da sie zum Abspielen von Songs mit expliziten Titeln erforderlich sind. Optional sollte dies ein konfigurierbares und dokumentiertes Verhalten sein.

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

Hilfreichster Kommentar

Ich komme aus Jersey und schwöre viel, das ist auch für mich ein Problem.

Alle 8 Kommentare

(Dies ist tatsächlich ein echter Fehler, trotz meiner Neuheit im Projekt und seiner ungewöhnlichen Natur.)

Ich bin auch darauf gestoßen. Es wäre viel besser, es nur als Option anstatt als Standard zu haben.

Dies stand letzte Woche zur Diskussion. Ich denke, die Schlussfolgerung war, Änderungen vorzunehmen, damit dies ausgeschaltet werden kann. @matheuslima kannst du das kommentieren?

Ich komme aus Jersey und schwöre viel, das ist auch für mich ein Problem.

Fortschritte in diesem Bereich? Die Zensur ist wirklich nervig.

Hey, ich war nicht da, als dieses Problem zum ersten Mal angesprochen wurde, war also nicht Teil dieser Diskussionen, aber dies ist tatsächlich der Google STT-Dienst, den wir für die Zensur verwenden. Müsste sehen, ob es ein Flag gibt, das wir für die Anforderungen zum Deaktivieren setzen können. Wenn jemand es bereits weiß, melden Sie sich bitte.

Aus einem sehr kurzen Blick auf dieses Problem konnte ich Folgendes feststellen:

  • Die meisten von Mycroft unterstützten STT-Dienste (wobei Google STT derzeit die Standardeinstellung ist) verfügen über ein profanity_filter -Flag, das an die API übergeben wird.

  • In den STT-Klassen von Mycroft ist dies für die IBMWatson STT-Klasse gemäß dieser Codezeile auf false Dieser Parameter scheint jedoch nicht für die GoogleSTT class.

  • In der Klasse GoogleSTT scheint dieser Parameter Dokumente für Googles STT - der Parameter heißt ProfanityFilter .

  • Ich glaube jedoch nicht, dass die Antwort darin besteht, profanity_filter auf false in der Klasse GoogleSTT . Ich denke, wir sollten den Benutzern die Möglichkeit geben, dies auf Gerätebasis festzulegen, ebenso wie Wake Words- und STT-Engines sowie TTS-Stimmen auf Gerätebasis unter folgender Adresse festgelegt werden können: https://account.mycroft.ai/ Geräte /

  • Daher denke ich, dass dies Änderungen am Mycroft Home-Backend erfordert, um eine ideale Implementierung zu erzielen.

Als Problemumgehung habe ich versucht, eine neue Variable self.config in mycroft.conf implementieren:

  // Profanity filter
  "profanity_filter": false,

Dies erfordert dann Unterstützung in den Klassen STT , dh das habe ich in der STT-Basisklasse versucht, aber es hat nicht funktioniert.

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

(Zu diesem Zeitpunkt funktionierte mein Mikrofon aus irgendeinem seltsamen Grund nicht mehr mit Mycroft, und nichts, was ich tat, konnte es dazu bringen, das Mikrofon wieder aufzunehmen, sodass ich nicht weiter testen konnte.)

Dies hat nicht funktioniert - die ProfanityFilter sind immer noch auf True , und die *** bleiben erhalten. Dies könnte jedoch ein Hinweis für andere sein, die dies angehen möchten.

Ich habe das Google STT-Modul getestet und der Profanitätsfilter scheint standardmäßig deaktiviert zu sein, erfordert jedoch, dass ein Benutzer über ein Google Cloud-Konto verfügt.

Die vom Mycroft-Backend verwendete API (bei der es sich nicht um den Google Cloud Speech to Text-Dienst handelt, sondern um eine andere ältere API von Google) ist immer aktiviert und kann nicht deaktiviert werden, wenn ich mich richtig erinnere.

Eine Konfigurationseinstellung ist jedoch wahrscheinlich eine gute Idee. Die Standardeinstellung sollte meiner Meinung nach deaktiviert sein.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen