Dialogflow とは?
コード不要で、簡単にチャットボットを作るためのサービスです。
2016年9月にDialogflowのチームをGoogleが買収しました。
日本語に対応しています。
※名称が api.ai→Dialogflowになっております。
目標
今回のゴールはこちらです。
「ニューヨークの天気は?」 と聞くと
「ニューヨークの天気は晴れです」 と答えてくれる
チャットボットを作ります。
目次
- Dialogflowに登録する
- 会話する要素を入れる
- 同義語を追加する
- ためしてみる
- 修正する
0.準備
Dialogflowはgoogleアカウントを使用してログインします。
まずは googleアカウントを準備しましょう。
「googleアカウントの作成」から作成します。
アカウントが作成でき、ログインした状態から始めます。
1. Dialogflowのサイトに登録する
無料でサイトに登録できます。
Dialogflowにアクセスし、「Get Started for Free」でgoogleアカウントを使って、ログインします。
ログインができたら、中央右にある「CREATE AGENT」をクリックします。
以下の内容をセットします。
―――――――――――――――――――
・Agent name:会話ロボットの名前
・DESCRIPTION:「会話ロボット」の補足内容を書く(書かなくてもOK)
・LANGUAGE:日本語
・DEFAULT TIME ZONE:(GMT+9:00)Japan
―――――――――――――――――――
ここでは、
―――――――――――――――――――
・Agent name:otenki_bot
・DESCRIPTION:天気を呼び出すボットです。
・LANGUAGE:日本語
・DEFAULT TIME ZONE:(GMT+9:00)Japan
―――――――――――――――――――
としました。
終わったら必ず「SAVE」をしてください。
!!注意!!
今後「SAVE」の指示が多発します。
これを忘れると、せっかく頑張った作業が水の泡に……なんてことがあり得るので、
ポケモン・ドラクエばりの、あるいはイラレフォトショばりの **こまめな「SAVE」**を心がけてください。
2. 会話させる要素を入れる
今回は国名を入力すると、天気の情報を返してくれるチャットを作ります。
左のタブから「Intents」を選び、右上の「CREATE INTENT」をクリックします。
―――――――――――――――――――
・Intent name:会話のタイトル(わかりやすいもの)
・User says:ユーザーが入力する会話文
・Response:会話文に対するBOTの返答
―――――――――――――――――――
ここでは、
―――――――――――――――――――
・Intent name:天気
・User says:ニューヨークの天気は?
・Response:$sys.geo-cityの天気は晴れです。
―――――――――――――――――――
「SAVE」を忘れずにどうぞ。
右下に「Agent training complete OK」と出たら、トレーニングが開始できます。
!!注意!!
「Agent training complete OK」が出るまでに、すこし時間がかかるので、気長に待ってください。
疲れてきた方、目のストレッチをするタイミングはこの待ち時間ですよ〜!
右の枠でトレーニングができるので「Try it now」に会話を打ち込んでみましょう。
―――――――――――――――――――
Try it now:ニューヨークの天気は?
―――――――――――――――――――
「DEFAULT RESPONSE」に、先ほど入力したレスポンスが出てくれば成功です。
さっそく、目標クリア!!!!
API.AIのスゴイとこ紹介(クリック)
API.AIには、**デフォルトで都市名($sys.geo-city)や日付($sys.date)の情報が入っています。** サンフランシスコ/シカゴ/ロンドン/ニューヨーク 今日/昨日/明日/来週の月曜日 などなど… 「$---」をレスポンスに入れることで、入力に応じた回答(VALUE)を引っ張って来ることができます。 なーんてらくちん!――――――――余談――――――――――
さて、疲れてきましたか?
疲れてきましたね〜〜〜
一気に見栄えを良くしましょうか?
する!
見栄え良くしたいひとは、こちらを先にやってしまってもオーケーです。 ・[API.AIをSlackに連携させる](http://qiita.com/ume1126/private/1fa38c430fc0e6248be8) Slackというアプリに連携させて、外部サービスでも確認することができます。わーい!3. 同義語を追加する
さて、各単語の表現にも様々なものがあります。
左のタブから「Entities」を選び、右上の「CREATE ENTITY」をクリックします。
―――――――――――――――――――
・Entity name:ラベルの名前(半角英数字)
・Enter reference value:単語の総称、意味するもの
・Enter synonym:同義語
―――――――――――――――――――
枠の左側に、単語名を、右側に同義語を定義していきます。
enterキー、tabキー、; で次へ進めます。
今回は、天気の定義を幅広く設定しました。
―――――――――――――――――――
・Entity name:weather(半角英数字)
・Enter reference value:天気
・Enter synonym:天気/天候/気象/空模様……
―――――――――――――――――――
日本語の場合、漢字とひらがななど、様々なバリエーションで書いておくと、より認識度が上がります。
終わったら、必ず「SAVE」をします。
4. ためしてみる
もう一度「Intent」→「天気」に戻り、先ほどの天気の会話文を開きます。
既に入力してあるUser saysの「天気」の部分をドラッグすると、@のリストが開かれます。
「Entities」で登録した@weatherをクリックして設定します。
↓
色が変わってこのようになれば成功です。
「User says」を複数登録することで、より返答率が上がるので以下のように入力してみます。
―――――――――――――――――――
User says:
パリの気温は?
ロンドンの空模様は?
ニューヨークの天気は?
―――――――――――――――――――
自動で色分けされましたか?
「Entities」に登録しなかった 気温 は色がつかなかった人もいるでしょう。
「気温」をドラッグして、@weatherを設定してみてください。
ばっちりですね!
ついでにページ下部の「Response」もこのように変えておきましょう。
―――――――――――――――――――
Text Response:$geo-city
の$weather
は晴れです。
―――――――――――――――――――
「Try it now」で確認してみましょう。
2パターンやってみます。
―――――――――――――――――――
①
Try it now:ロンドンの空模様は?
―――――――――――――――――――
①を入力すると、このような結果になります。
入力した「空模様」が、回答では「天気」に変わっていますね。成功です!
「Entities」で同義語を定義したので、定義したワードは全て「天気」に置き換わります。
―――――――――――――――――――
②
Try it now:パリの気温は?
―――――――――――――――――――
こちらは先ほどドラッグして色を変えた部分…
同義語定義ではないので天気にはならず、入力された「気温」がそのままボットの回答で利用されます。
うまく使い分けてみてください。
(「パリの気温が晴れ」というのはオカシイですね…Entitiesに登録するか、レスポンスを変えたほうがよかったかもしれません…)
5. 修正する
では、「User says」に無いことを入れてみるとどうでしょう。
―――――――――――――――――――
Try it now:ニューヨークの空模様は?
―――――――――――――――――――
左のメニューから「Training」を選択、
ダイアログ "ニューヨークの天気は?” を選択すると、今までの失敗した会話が一覧で見れます。
先ほど失敗した「ニューヨークの空模様は?」という会話の下にある
「Click to assign」から、レスポンスの正解である「天気」を指定します。
↓
「APPROVE」で実行させ、「Try it now」でもう一度ためしてみましょう。
―――――――――――――――――――
Try it now:ニューヨークの空模様は?
―――――――――――――――――――
おわりに
こんな感じでチャットボットはできています。
「User says」をたくさん入れて、学ばせる要素を増やし、
「Training」で反省を繰り返すことで学習をくりかえします。
より精度の高いチャットボットを目指しましょう〜!