クマは森で用を足しますか?

アウトプットは重要です。

Alexa でユーザー発話全文を取得する最善の方法は?

(English version of this article is here)

cheerio-the-bear.hatenablog.com

Google Home 用に作成した下記アプリケーションを Amazon Echo に移植するために、Alexa に対するユーザーの発話の全文を取得する方法を幾つか試してみていました。

assistant.google.com

ちなみに、この Google Home 用アプリケーションの説明はこちら。

cheerio-the-bear.hatenablog.com

今回試してみたのは、これらの三種類の方法です。

方法 1. AMAZON.SearchQuery を使う

この記事を書いている時点では、フレーズを対象とするスロットタイプは AMAZON.SearchQuery だけです。きっとこれを使ってユーザーの発話を全て取得できるものと思ったのですが、その利用条件が今回のユースケースに合いませんでした。下のスクリーンショットのエラーメッセージをご覧ください。

f:id:cheerio-the-bear:20190126174411p:plain
AMAZON.SearchQuery with no carrier phrase

ユーザーの発話内容の全文を取得したいので、発話サンプルには "{スロット名}" だけを設定したいのですが、そのような使い方は許容されません。"{スロット名} と言ってください" みたいなケースでは、しっかり仕事をしてくれると思われます。

方法 2. AMAZON.Color を使う

AMAZON.Color に関する話題が書かれている、下記のページを見つけました。予め登録されている「赤」や「緑」といった色の名前だけではなく、ユーザーが自由に発話した内容もそのまま入ってくるようです。使ってみると確かにその通りで、事実、つい先日までこの AMAZON.Color を使う方法を選択していました。

stackoverflow.com

しかし、「ユーザーの発話内容が何らかの色の名前に近い場合に、その色名に寄せて認識されることがあるかもしれない」という疑念が浮かんだため、別の方法に置き換えることにしました。実際にそうなるかどうか試したわけではないので、もしかするとそのままでも良かったのかもしれません。

方法 3. カスタムスロットタイプを使う

あれこれ試しましたが、最終的にはカスタムスロットタイプを作って適用することにしました。このカスタムスロットタイプ 'Utterance' には、特に意味のない発話サンプル 'a' ひとつと、これまた特に意味のない同義語 'a a' ひとつを登録してあります。この同義語 'a a' の真ん中にスペースが入っているのが味噌です。

f:id:cheerio-the-bear:20190126183719p:plain
Custome slot type with sample utterance 'a' and its synonim 'a a'

最初からこの同義語 'a a' が必要だと考えていたわけではありません。例えば、ユーザーの発話が 'book' のように単語ひとつから成るものであれば、そんな同義語がなくても何も問題はありません。このカスタムスロットタイプを適用したスロット 'utterance' に、それがしっかり入ってきます。

f:id:cheerio-the-bear:20190126184844p:plain
User utterance 'book' with no synonim registered

しかし、ユーザーの発話が複数の単語で構成されている場合にはうまくいきません。例えば 'red book' のように二つの単語から成るフレーズを発話すると、カスタムスロットタイプに合致せずに AMAZON.FallbackIntent が発動してしまいます。

f:id:cheerio-the-bear:20190126184933p:plain
User utterance 'red book' with no synonim registered

複数の単語(?)から成るフレーズ 'a a' を同義語として追加することで、この問題が解決されます。これにより、システムは複数の単語で構成されるユーザー発話も対象にして良いと認識するようです。下記のスクリーンショットのように、このカスタムスロットタイプを適用したスロット 'utterance' に、ユーザーが発話した全文が入ってくれます。

f:id:cheerio-the-bear:20190126190413p:plain
User utterance with the strange synonim 'a a'

完全な方法だとは言えませんが、これが現在選択し得る最善の方法なのではないでしょうか。