こんにちは、荒井(@yutakarai)です。
今回は、Dialogflowを効率的に学ぶためにまず知っておくべきコンセプトについて紹介します。
化学元素チャットボットを作ってみた
例として、化学元素チャットボットを作ってみました。
このチャットボットは以下のような質問に答えてくれます。
「水素の原子番号は?」
「ヨウ素の化学記号は何ですか?」
画面イメージは以下のような感じです。
このチャットボットを例に、Dialogflowの基本的なポイントについて紹介します。
Dialogflowの基本コンセプト
Dialogflowを活用するために、知っておくべき基本コンセプトがあります。
・Intents
・Entities
・Contexts
・Webhook
この基本コンセプトは、パレートの法則「80/20ルール」のようなものです。
基本コンセプトを徹底的に学ぶことで、Dialogflowについて知っておくべきものの約80%をカバーし、残りのコンセプトをより簡単に学ぶことができます。
Intents
Intents(インテント)とは、ユーザーのメッセージ全体を指すものです。
例の化学元素チャットボットでいうと、
「水素の原子番号は?」
「ヨウ素の化学記号は何ですか?」
というユーザーからのメッセージにあたります。
Intentsにユーザーからのメッセージを設定することで、Dialogflowはそのメッセージ内容をもとに学習を進めます。
例えば、
「ヨウ素の化学記号は何ですか?」
とIntentsに設定しておいたとします。
そして実際のユーザーからのメッセージが
「ヨウ素の化学記号」
というだけでも、正しい返答を返してくれるようになります。
Entities
Entities(エンティティ)とは、ユーザーのメッセージから抽出したいキーワードのことになります。
例の化学元素チャットボットでいうと
水素やヨウ素といった「化学元素名」
原子番号や化学記号といった「ユーザが知りたい情報」
などがEntityにあたります。
化学元素について興味深いのは、種類が100以上あることです。
100種類それぞれにIntentsを設定していては時間がいくらあっても足りません。
そこでEntityの出番です。
Entityを宣言しておくことで、多くの労力をかけることなく、適切なユーザーへの返答を設定することができます。
Contexts
Contexts(コンテキスト)とは、「背景、文脈」というような意味があります。
会話のキャッチボールを成り立たせるための大切なコンセプトがContextsです。
また、例の化学元素チャットボットで解説してみます。
例えば、特定の要素について質問をしたら、その後の会話で同じ要素についてのフォローアップの質問をすることができます。
質問1「水素の原子番号は?」
ボット「水素の原子番号は、1です」
質問2「その化学記号は何ですか?」
ボット「水素の化学記号は、Hです」
質問2では、「水素」という単語が入っていないにもかかわらず、質問1のフォローアップの質問と判断して、水素の化学記号を返しています。
こういった会話の文脈を理解して、キャッチボールを成り立たせるために必要なのがContextsです。
Webhook
Webhookという仕組みを利用して、Dialogflowが外部のプログラムから情報を取得して返す仕組みを作ることができます。
この場合、外部のプログラムを開発する必要があります。
例の化学元素チャットボットの場合であれば、化学元素にもとづく情報を検索して返すシンプルな処理が必要になります。
Webhookのイメージは以下のような感じです。
まとめ
今回は、Dialogflowの基本的なコンセプトについて紹介しました。
Dialogflowの画面を見るとわかるのですが、Dialogflowができることはまだまだたくさんあります。
Dialogflowのオフィシャルドキュメントがありますが、できる範囲が広いため「Get Start Now」を終えた後、いったいどこに進んだら良いかわからなくなってしまいます。
一般的に、ドキュメントには何ができるかが書いてあるだけです。
そういった意味でも、今後このブログではDialogflowの実際の活用方法などの情報も共有していきたいと思っています。