Snipsを使った音声認識でハマったポイント

“Hey, Snips !”が無視される「デッドタイム」がある

「ヘイ、スニップス!りんごジュースを3つおくれ!」

などと話しかけ、Snipsが一通りの返答をくれた後、続けざまにもう一度「ヘイ、スニップス!」と話しかけても

Snips「・・・」

となることがある。5,6秒経たないと次の「ヘイ、スニップス」が聞き入れられない。

ちょっと調べてみると、Snipsが何らかの返答をした後に「この会話のセッションは終了だお」ということをSnipsに教えてあげる必要があるらしい。

どういうことかというと、SnipsのActionに登録するPythonコードは、ただ普通に書くとコードを実行し終わった時点ですぐに終了してくれず、次の何かを待っているらしい。それを、「待たずにとっとと終わっていいんだよ」と教えてあげる必要があるのだ。

Snipsは、1往復の対話だけでなく、2往復以上の対話もサポートしており、5,6秒のデッドタイムはこの2往復目以降の何らかの対話をタイムアウトするまで待った結果できたものだ。

詳しいことはここここ、そして2往復以上する対話についてのドキュメントを参照してみて欲しい。

SnipsのWeb上の開発環境(コンソール)では、他の人がつくったAppで公開しているものはそのActionのつくりまで覗くことができる。

それらのPythonコードの末尾によく書かれているこの記述:

あまり意識しないで見ていたけど、実はこれ、「この会話のセッションはここで終了」をSnipsにお知らせしてあげるコードだった。

これを受け取ったSnipsは、メッセージを読み上げた後にすぐに現在のセッションを終了し、次の「ヘイ、スニップス!」の受け入れ体制に切り替わってくれる。

何も読み上げなくていいから今すぐに「ヘイ、スニップス!」を聞いて欲しい場合は、上記のコードのmessageに空の文字列 ”” を入れてやればよい。

コメントする