前回の記事で、LexがAlexaのダイアログモデルと似ているという話をしました。
今回は少し補足的にダイアログモデルと似てるところをもう少し見てみたいと思います。
目次
BookTripサンプルの問題
BookTripサンプルのテストはこんな感じでした。
少し意地悪なテストをしてみましょう。
場所を聞かれた際に自然な感じで回答すると正しく理解できていません。
もう一つ。
日付のところはAlexaと同じようにちゃんと理解していますね。Inspect Responseを見るとちゃんと今日を起点に「来週の火曜日」というのを日付で認識できていることがわかります。
だめなのは年齢のところです。「四十歳」のように「歳」がつくと正しく認識できていません。(漢数字だけならちゃんと認識します)
つまり、個々のスロット収集時のサンプル発話が正しく設定されていないということですね。
スロット収集時のサンプル発話の修正
ではこれを修正します。Slotsの各スロットの設定の右にある歯車アイコンをクリックします。まずは都市名の部分から。
スロットの設定画面が表示されます。ここにCorrresponding uttterancesというのがありますが、これがスロット収集時のサンプル発話になります。デフォルトだと何も入ってないので、{PickUpCity}
だけが入っているのと等価だということですね。
なので、ここにサンプル発話をいくつか追加してあげます。あと、Promptsがスロット収集時のLexの発話になります。正しく収集できない場合はMaximum numbers of retriesにある2回まで聞き直します(Alexaと同じですね)。ユーザが正しい言い方を認識しやすいように、Promptsで説明してあげるのもアリだと思います。設定したら「Save」をクリックします。
同様にして年齢のところも変更してあげましょう。
ではもう一度テストしてみます。テストの前に「Save Intent」して「Build」することをお忘れなく。
うまくいきました!ちなみにスロットだけの発話(前後のキャリアフレーズがなくて、{PickUpCity}
だけが入っているようなケース)は明示しなくてもOKのようです。
インテントにマッチしない場合
最初の例は、スロット収集時のサンプル発話にマッチしない場合でした。ではそもそもインテントにマッチしない場合の設定(AlexaでいうFallbackIntentのようなもの)はどこで行うのでしょうか?Lexでは、左のメニューにある"Error Handling"で設定を行います。
Clarification promptsがどのインテントにもマッチしない場合に、ユーザに再度発話を促すためのLexのプロンプトです。ここにもMaximum number of retriesがありますね。つまり、2回まで再度確認して、それでもマッチしないようであれば、Hang-up phraseで最後のメッセージを発話してセッションが切れる、というような感じになっているようですね。
まとめ
Alexaでダイアログモデルを使ったことがある方なら、とてもスッキリ頭に入ってくるのではないでしょうか。やっぱりとても似ていますね。
もう少しいろいろやってみます。