mycroft-core Mycroft阻止脏话****干扰搜索和其他功能

ccrfmcuu  于 4个月前  发布在  其他
关注(0)|答案(9)|浏览(52)

(对于这个bug报告,#### 表示我自己选择的审查制度,因为我不知道该项目关于脏话的政策。**** 表示我的赫伯特审查词汇。)

在测试技能时,我意识到在解析输入的过程中,它将检测到的脏话转换成了星号,例如查询 "#### 你" 被解释为 "**** 你"。这可能是一个合理的默认设置,但我想播放包含明确标题的专辑,而这个功能破坏了这一功能。

这似乎影响到了核心功能,而不仅仅是第三方技能:

重现步骤:

  1. 在唤醒词后说一个脏话。例如,“嘿,Mycroft,#### 你。”(如果你正在搜索歌曲标题,你可以说类似的话:“嘿,Mycroft,播放 #### the police by NWA”)
    观察到的行为:
    Mycroft 将报告并解释为“#### 你”的“**** 你”。
    预期行为:
    Mycroft 不审查脏话,因为它们对于播放具有明确标题的歌曲是必要的。此外,这应该是一个可配置和记录的行为。
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']
vu8f3i0k

vu8f3i0k1#

(尽管我对该项目和其非常规性质的陌生,但这实际上是一个真正的错误。)

5q4ezhmt

5q4ezhmt2#

我也遇到过这个问题。将其作为可选选项而不是默认设置会更好。

n8ghc7c1

n8ghc7c13#

上周对此进行了讨论,我认为结论是进行更改以允许关闭此功能。@matheuslima,您对此有何评论?

j8yoct9x

j8yoct9x4#

我来自泽西岛,而且经常发誓,这对我来说也是一个问题。

u0njafvf

u0njafvf5#

关于这个问题有什么进展吗?审查制度真的很烦人。

jqjz2hbq

jqjz2hbq6#

嘿,我当时不在现场,所以没有参与那些讨论,但实际上我们使用的是谷歌的STT服务来进行审查。我们需要看看是否可以设置一个标志来关闭它。如果有人知道,请留言。

dgiusagp

dgiusagp7#

从对这个问题的简要了解中,我得出以下结论:

  • Mycroft支持的大多数STT服务(目前默认为Google STT)都有一个profanity_filter标志,该标志传递给API。
  • 在Mycroft的STT类中,对于IBMWatson STT类,这行代码被设置为false,但对于GoogleSTT类,这个参数似乎没有被设置。
  • GoogleSTT类中,这个参数似乎没有被设置,我认为这是这个问题的根本原因。这些是docs for Google's STT - 这个参数被称为ProfanityFilter
  • 然而,我认为答案不仅仅是在GoogleSTT类中将profanity_filter设置为false。我认为我们应该让用户能够在每个设备的基础上设置这个参数,就像唤醒词、STT引擎和TTS声音可以在每个设备的基础上设置一样:https://account.mycroft.ai/devices/
  • 因此,我认为这需要对Mycroft Home后端进行更改以实现理想的实现。

作为一个解决方法,我尝试在mycroft.conf中实现一个新的self.config变量:

// 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')

    @staticmethod
    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

    @abstractmethod
    def execute(self, audio, language=None, ProfanityFilter=self.profanity_filter):
        pass

(此时我的麦克风在使用Mycroft时出于某种奇怪的原因停止工作,无论我做什么都无法再次拾起麦克风,所以我无法继续测试)
这不起作用 - ProfanityFilter仍然设置为True,而***仍然存在。但是,这可能是其他想要解决这个问题的人的一个线索。

xqnpmsa8

xqnpmsa88#

我测试了谷歌的STT模块,而脏话过滤器似乎默认是关闭的,但需要一个谷歌云账户才能使用。
Mycroft后端使用的API(这不是谷歌云语音识别服务,而是谷歌较早的另一个API)总是启用它,如果我没记错的话,不允许关闭它。
不过,设置一个配置项可能是个好主意。在我看来,默认应该是关闭的。

5anewei6

5anewei69#

这个问题可能应该移动到selene仓库,因为那里是STT发生的地方。
这个设置不受语音识别软件包的支持,但如果你直接使用API,可以启用/禁用它。
要禁用脏话过滤器,请参见https://github.com/OpenVoiceOS/ovos-stt-plugin-chromium,这是我们在ovos本地后端中使用的(不需要mycroft插件)。

相关问题