Mycroft-core: Mycroft对诅咒字词“ ****”的阻止会干扰搜索和其他功能

创建于 2017-11-11  ·  8评论  ·  资料来源: MycroftAI/mycroft-core

(对于此错误报告, ####将指示我自己的审查制度,因为我不知道该项目的有关诅咒的政策。 ****将指示Mycroft审查字词。)

在测试一项技能时,我意识到在解析输入内容时,它会将检测到的诅咒词变成星号,例如查询“ #### you”被解释为“ **** you”。 这可能是一个合理的默认值,但是我想播放包含显式标题的专辑,并且此功能破坏了该功能。

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

重现步骤:

  1. 在唤醒词之后说一个诅咒词。 例如,“嘿Mycroft, ####您。” (如果您正在搜索歌曲标题,您可能会说类似“嘿,Mycroft,扮演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'] 
Bug - quick hacktoberfest help wanted

最有用的评论

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

所有8条评论

(尽管我是该项目的新手,而且它的性质与众不同,但这实际上是一个真正的错误。)

我也遇到了这个。 将其作为选项而不是默认值会更好。

这是上周要讨论的问题,我认为结论是要进行更改以使此功能可以关闭。 @matheuslima您可以对此发表评论吗?

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

在这个问题上有什么进展吗? 审查真的很烦人。

嘿,我什么时候第一次提出这个问题的,所以不在讨论范围之内,但这实际上是我们用来进行审查的Google STT服务。 需要查看是否存在可以在请求上将其关闭的标志。 如果有人知道,请发出提示。

从这个问题的简短摘要中,我已经能够确定以下内容:

  • Mycroft支持的大多数STT服务(当前默认为Google STT)具有profanity_filter标志,该标志将传递给API。

  • 在Mycroft的STT类中,对于IBMWatson STT类,将其设置为false ,如下所示:这行代码,但是似乎未为GoogleSTT设置此参数。

  • GoogleSTT类中,似乎未设置此参数,我认为这是此Issue的根本原因。 这些是Google STTProfanityFilter

  • 但是,我不认为答案只是在GoogleSTT类中将profanity_filter设置为false 。 我认为我们应该让用户能够按设备设置此功能,就像可以在以下位置按设备设置唤醒单词和STT引擎以及TTS语音一样:https://account.mycroft.ai/设备/

  • 因此,我认为这需要更改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')

    <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

(这时我的麦克风由于某种奇怪的原因而停止与Mycroft一起工作,并且我什么也做不了,无法再次拿起麦克风,因此无法继续测试)

这不起作用- ProfanityFilter仍设置为True ,而***保留。 但是,这可能是其他想要解决此问题的线索。

我测试了Google STT模块,亵渎过滤器默认情况下处于关闭状态,但需要一个人才能使用Google云帐户。

Mycroft后端使用的API(不是Google云语音转换为文本服务,而是Google的另一个较旧的API)始终启用了该API,并且如果我没有记错的话,也不允许将其关闭。

配置设置可能是一个好主意。 我认为默认值应该关闭。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

KathyReid picture KathyReid  ·  8评论

auwsom picture auwsom  ·  13评论

Zacki84 picture Zacki84  ·  10评论

ChanceNCounter picture ChanceNCounter  ·  29评论

tmajibon picture tmajibon  ·  9评论