DialogflowでLINEチャットボットを作成第2弾ということで、Intents(インテント)の中の機能であるContexts(コンテキスト)を使ってみたいと思います。これはインテントにタグを付加する機能と考えてもらうとわかりやすいです。
そして付加したタグと同じタグが付いているインテントしかマッチングしないようになります。
それによって、直前の発話内容を把握してAIらしい会話をするようなことができちゃいます。
例えば以下のような感じです。
直前の会話内容を把握して成立させるAIらしい会話
上の例は、最初、「好きな曲は何?」という質問に対してジョンレノンの「イマジン」と答えています。
その次また「好きな曲は何?」と聞いたときは、さだまさしの「関白宣言」を答えています。これは直前に「好きなアーティストは誰ですか」という質問に対し、「さだまさしです」と答えているため、そのあとの「好きな曲は何?」という質問に対しては、さだまさしの曲の中で好きなものを答えています。
これは、Contexts(コンテキスト)で実現しています。
だからなんだと思うかもしれませんが、このように直前の話題を引き継いで会話を成り立たせるというのは、AIらしくないですか?
ちなみに、このコンテキストがないと、どういうことが起こるか、一つ困ってしまう例を挙げてみます。
Contextsがないと困ってしまう例
いくつかのインテントを用意し、それぞれ商品に対する質問を学習させます。
- Macbook Proの重さは?
- Macbook Proの価格は?
- Macbook Airの重さは?
- Macbook Airの価格は?
よしこれで、Macbook ProとMacbook Airのサイズと価格に関する質問に応えられるようになったぞ!
しかし!
実際にユーザーさんとのやりとりで困ったことになりました。
ユーザー:Macbook Proの重さは?
チャットボット:1.37kgです。
ユーザー:価格は?
チャットボット:申し訳ございません。分かりません。
最初は、「Macbook Proの重さは」という質問に対して難なく答えることができたのですが、次にユーザーはMacbook Proについて話していることを前提として「価格は?」と聞いています。この場合、何の価格についてか認識することができません。
そこで、Contexts(コンテキスト)で各質問にタグをつけるわけです。
ちなみに、もう一つの解決方法は、製品が少ない場合のみ可能な方法ですが、「価格は」という質問に対しては、「<Macbook Pro><Macbook Air>どちらの商品の価格についてですか?」というように聞き返しをしてしまうという方法もありますね。それぞれの商品を選択肢にして選ばせるという方法もあります。
それでは、コンテキストの設定方法です。
Contextsの設定方法
Intents(インテント)を3つ用意します。
- Favorite musician:好きなアーティストは誰かを聞く
- Favorite song:好きな曲は何か聞く
- Favorite song all:好きな曲は何か聞く
Contextを発行するインテント
まずは、好きなアーティストは誰かを聞くインテント「Favorite musician」のEDIT画面です。このインテントでは、コンテキストを発行します。
設定は簡単。一番上部のContextsのところにある<Add output context>に「sadamasashi」というワードを記入します。
これで、このインテントがヒットした際に、「sadamasashi」というコンテキストが発行され保持されます。
次は発行されたタグを受け取ります。
Contextを受け取るインテント
上記のように、<Contexts>の<Add input context>のほうに、「sadamasashi」というタグを登録します。
これで、直前の発話で発行された「sadamasashi」というタグがマッチした時(受け取った時)のみ、このFavorite songというインテントにヒットするようになります。
次は何もContextsに設定しないインテントです。
Contextを登録しないインテント
学習フレーズには、「好きな曲は何?」と先ほど設定したさだまさしさんの曲を答えるインテントのフレーズと同じものを登録します。
これで直前に、さだまさしに関する対話をしていない場合は、全てこちらにヒットします。
LINEチャットボットで実際にどうなるか見てみましょう。
うまくいきました。
このようにコードを一切書かずに、直前の対話内容を把握しながら会話をするというAIっぽい動作をさせることがサクッとできちゃいます。
次回は、ユーザーに質問をして回答の内容からユーザーの感情や嗜好性を汲み取り、その時のユーザーにオススメの曲を選定するというのをやってみたいと思います。
それを実現するには、対話のシナリオを作って行くのですが、実は、今回のコンテキストが活用されます。
コメント