[日本語Alexa] 発話の揺れをカスタムスロットで吸収する〜より自然に会話できるスキル作成のために〜

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

1 はじめに

Alexaでは、ユーザーの発話から、特定のインテントを検出してサービスを提供します。そして、このインテントへの導入は、サンプル発話を設定することで行います。

Alexaの優秀な自然言語処置により、サンプル発話は、一字一句完全に一致していなくても導入が可能ですが、予想される多くのサンプル発話を可能なかぎり沢山定義したほうが、インテントへの導入は確実になります。

しかし、沢山書くと言っても、書けば書くほど作業は増え、また複雑化してメンテナンスも大変になるでしょう。

今回は、インテントに多数のサンプル発話を指定する要領について考察してみました。

2 インタラクションモデルの設計

まず、スキルを使う場面の設定ですが・・・とりあえず空港です。(今、ブログを書いている・・・w) 例えば、空港の案内にEchoが設置されていたとしましょう。ユーザーは、この案内に設置されたEchoに対して、チェックインカウンターへの行き方を尋ねるのです。

ANAのチェックインカウンターは、何処ですか?

そして、これを処理するために、GuideIntentを作成したとしましょう。 ユーザーの発話をGuideIntentへ導入するためには、サンプル発話には、「ANAのチェックインカウンターは何処ですか」を追加しなければなりません。

航空会社がANAにしか対応していないのは、ちょっと片手落ちなので、航空会社名をスロットにして各種の航空会社に対応できるようにしましょう。

スロットとなった航空会社の種類は、カスタムスロットで定義します。ANAを全日空など別の言い方でも対応できるようにするには、シノニムに追加しておけばいいでしょう。

スロット名として指定したAirlinesのTypeを、定義したカスタムとし、必須(required)にチェックを入れておけは、ダイアログモデルでAlexaがスロットを埋めてくれるので完璧です。

ここまでの設定で、このチェックインカウンターの場所を訪ねるスキルは、一応動作するでしょう。ユーザーが、正確に「***のチェックインカウンターは何処ですか?」とEchoに話しかけてくれる前提です。

でも・・・果たして、ユーザーは、このように開発者の意図したとおりEchoに話しかけてくれるでしょうか・・・

3 カスタムスロットの応用

ANAのチェックインカウンターは、何処ですか?
ANAのカウンターは、何処ですか?
ANAのチェックインは、何処ですか?

ユーザーは、チェックインカウンター事を、「カウンター」とか、「チェックイン」と言ってしまうことが、充分に考えらます。そして、これらに対応するには、これをサンプル発話に追加しなければなりません。

いやいや「搭乗手続き」って言うかも知れない。「手続き」「自動チェクイン機」「チェクイン機」・・・って考えれば幾つも出てきます。そして、より自然なユーザーの発話に対応するためには、全部、サンプル発話に設定することが望ましいでしょう。

しかし、どんどんサンプル発話を追加していくと、当然、複雑となり、メンテナンス性も下がってしまいます。そこでの、この単語の揺れをカスタムスロットで受けてみます。

まずは、揺れる単語を列挙したカスタムスロットの作成です。

そして、このカスタムスロットをタイプとして、スロットCheckinCounterを追加します。

これでサンプル発話は、たったの1行になりました。CheckinCounterスロットは、スキルで使用する予定は無いので、「Require(必須)」のチェックは必要ないでしょう。結果的に無視されるわけです。

たった1行になったサンプル発話ですが、結構、いろいろな表現に対応できています。新たに揺れる単語が思いつた時は、カスタムスロットの値を増やすだけです。

4 言い回しの吸収

ここまでの設定で、次のような発話をGuideIntentに落とし込むことができるようになりました。

ANAのチェックインカウンターは、何処ですか?
ANAの搭乗手続きは、何処ですか?
JALのカウンターは、何処ですか?
JALの手続きは、何処ですか?
スカイマークのチェックイン機は、何処ですか?

ここで、「・・・は、何処ですか?」という発話に揺れはないでしょうか・・・・たとえば、

ANAのチェックインは、どっちですか
ANAのチェックインは、どの方向ですか
ANAのチェックインは、どうやって行けばいいですか
ANAのチェックインは、どこでっか

のような感じです。もし、スキルの中にこのインテントに似たものが無ければ、優秀なAlexaの自然言語理解でそのまま入ってしまったりします。

でも、よく似たインテントが別に追加されたりすると、なかなか上手くいかないようです。

そこで、言い回しも、カスタムスロットで吸収することにします。

まずは、考えられる言い回しを列挙してスロットを作成します。

そして、それを使用してサンプル発話を定義する感じです。

これで、うまく目的のインテントに誘導できるようになったみたいです。

5 助詞のサポート

次の状況を見てください。

「・・・を探しています」

はダメみたいです。

やっぱり定義が必要なので、下記のようにサンプル発話を追加します。「探しています」の言い回しに揺れがあるようなら、これも、後でカスタムスロットにしてしまえばいいでしょう。

ここで、助詞の「は」と「を」に対応したわけですが、この他にも「て」「に」に続く言い回しを定義すれば、より確実にインテントに誘導できるのではないでしょうか。

6 最後に

今回は、より自然に会話できるスキルのためにサンプル発話の定義について考察して見ました。ドキュメントに明確な記述があるわけでは無いので、あくまで、やって見た上での結果でしかありません。 でも、自然な発話に対応できるインテントを定義する方法としては、一考の余地はあるのでは?と考えています。