(このバグレポートでは、呪いに関するこのプロジェクトのポリシーがわからないため、 ####
は自分で選択した検閲を示します。 ****
はマイクロフトの検閲の言葉を示します。)
スキルをテストしているときに、入力の解析のどこかで、検出された冒とく的な単語がアスタリスクに変わっていることに気付きました。たとえば、クエリ「 ####
you」は「 ****
you」として解釈されます。 これは妥当なデフォルトかもしれませんが、明示的なタイトルを含むアルバムを再生したいので、この機能はその機能を壊します。
これは、サードパーティのスキルだけでなく、コアにも影響を与えるようです。
再現する手順:
####
あなた」 (曲のタイトルを検索している場合は、「マイクロフトさん、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']
(これは、プロジェクトの新しさとその異常な性質にもかかわらず、実際には本当のバグです。)
私もこれに出くわしました。 デフォルトとしてではなく、オプションとしてそれを持っている方がはるかに良いでしょう。
これは先週議論の余地がありました。結論は、これをオフにできるように変更を加えることだったと思います。 @matheuslimaこれについてコメントできますか?
私はジャージー出身で、多くのことを誓います。これは私にとっても問題です。
この問題に関する進展はありますか? 打ち切りは本当に迷惑です。
この問題が最初に提起されたとき、私は周りにいなかったので、それらの議論の一部ではありませんでしたが、これは実際には、打ち切りを行うために使用するGoogleSTTサービスです。 オフにするリクエストに設定できるフラグがあるかどうかを確認する必要があります。 誰かがすでに知っているなら、チャイムを入れてください。
この問題の非常に簡単な概要から、私は次のことを判断することができました。
MycroftがサポートするほとんどのSTTサービス(現在Google STTがデフォルト)には、APIに渡されるprofanity_filter
フラグがあります。
MycroftのSTTクラスでは、これはIBMWatson
STTクラスのfalse
に設定されています。このコード行ですが、このパラメーターはGoogleSTT
設定されていないようです。
GoogleSTT
クラスでは、このパラメータが設定されていないようです。これがこの問題の根本的な原因だと思います。 これらはGoogleのSTTのドキュメントです-パラメータはProfanityFilter
と呼ばれます。
ただし、 GoogleSTT
クラスでprofanity_filter
をfalse
に設定するだけでは答えはないと思います。 https://account.mycroft.ai/でWakeWordsとSTTエンジンおよびTTS音声をデバイスごとに設定できるのと同じように、ユーザーがデバイスごとにこれを設定できるようにする必要があると思います。デバイス/
したがって、理想的な実装を行うには、MycroftHomeバックエンドを変更する必要があると思います。
回避策として私がやろうとしたのは、 mycroft.conf
新しいself.config
変数を実装することmycroft.conf
。
// 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
に設定されており、 ***
は残ります。 しかし、これはこれに取り組みたい他の人にとっての手がかりかもしれません。
私はグーグルSTTモジュールをテストしました、そして冒涜フィルターはデフォルトでオフになっているようです、しかし使用するためにグーグルクラウドアカウントを持っている1人の自己を必要とします。
Mycroftバックエンドで使用されるAPI(GoogleCloudのSpeechto Textサービスではありませんが、Googleの古いAPIの1つです)では常に有効になっており、正しく思い出せばオフにできません。
ただし、構成設定はおそらく良い考えです。 私の意見では、デフォルトはオフになっているはずです。
最も参考になるコメント
私はジャージー出身で、多くのことを誓います。これは私にとっても問題です。