シンチャオ!稲葉貴大です。今回は第5回ChatBot製作日記です。ついにベトナムでの生活最終日になってしまいました。4週間という短い間でしたが、貴重な経験をすることができました。今回は、第4回で説明した天気情報を呼び出すチャットボットを実際に実装する方法について簡単に説明したいと思います。

 

天気情報を呼び出すチャットボット

今まで紹介してきたチャットボットの動作は全て管理画面の右側で行なっていました。そこで、実際のチャットボットのデモ版へと移動する方法を説明します。はじめにDialogflowのIntegrationsをクリックします。

 

すると、次のような画面が表示され、様々なのものと統合することができます。ここでは、デモ版を表示する方法のみを紹介します。

 

この画面が表示されたら、Web DemoをONにします。そして、SETTINGをクリックすると次のような画面が出てきます。

 

この画面の上部に記載されているリンクをクリックすることで、下図のようなデモ版へ移ることができます。

 

 

また、そのリンクの下にあるコードを使用することによって、ホームページなどに簡単に載せることができます。その方法で、このブログにも載せてみました。ぜひ、皆さんもこのデモ版で遊んでみてください。ただし、初期設定が英語になっているため、英語のみの入力になります。「Weather in Tokyo」など、地域を変えてチャットボットに聞いてみてください。

 

 

 

 

本日で、私と中田椋介のインターンシップ期間は終了しますが、この製作日記は今後も続けられたらと思っていますので、これからもどうぞよろしくお願いします。

 

ChatBotについて気になった方、このようなものづくりに携わりたいと思った方!お気軽に下のボタンよりお問い合わせください!

 

シンチャオ!稲葉貴大です。今回は第4回ChatBot製作日記です。ベトナム生活に慣れ、ベトナムに来てから早くも3週間が経とうとしています。1日1日大切にしていきたいと思います。今回は、Fulfillmentを用いた天気情報を呼び出すChatbotを紹介したいと思います。

 

DialoflowのFulfillmentを使って天気情報を呼び出す

DialogflowのFulfillmentを使うと外部からの情報を呼び出すことができます。下図には外部情報を呼び出す上での簡単なイメージ図を示しました。詳しく次に説明したい思います。

初めにHerokuとGithubについて簡単に説明します。Herokuとはサーバーやデータベース、OSなどをインターネットを介して接続してくれるものです。アプリケーションを実行するためのプラットフォームであるPaaSでもあり、無料で使用できることも特徴の一つです。また、Githubというのは、ソフトウェア開発プロジェクトのための共有Webサービスであり、世界中の人々がプログラミングコードなどを公開、保存することが出来ます。そして人のコードを自分のコードに出来ることがメリットの一つです。今回は天気情報を呼び出したいため、Pythonというプログラミング言語を用いたプログラミングコードをGithubから選択肢し、それをHerokuを介してFulfillmentのWebhookに入力しました。

 

実際に天気情報を出力するChatbotの作成手順

最初、Herokuのページに行き、自分のアカウントを作成します。

次に、Githubのページに行き、天気に関するリポジトリを見つけます。

 

 

このページが天気に関するリポジトリです。このページの下に行くと、次のようなHerokuにdeployする場所があります。

 

 

「deploy to Heroku」をクリックすると、Herokuのページに移ります。ここで、App nameを決めてDeployします。すると、「Your app was successfully deployed」という表示がされて、Deployが完了します。これで、天気情報を読み出すプログラミングソースがGithubからHerokuにDeployされました。

 

次に、DialogflowのFullfillmentを開き、WebhookのENABLEをONにし、Webhookの変更を可能にします。次に、FulfillmentのURLに

「https://[App Name].herokuapp.com/webhook」

と入力します。この際、[App Name]には自分で設定した名前を入力します。

 

 

これでFulfillmentの設定は完了です。次に、Intentsを設定します。下図のようにTraining Phrasesに「[都市]の天気」と入力すると、都市名が自動的に反応して「PARAMETER NAME」「ENTITY」「VALUE」が書き込まれます。そして、「Action」として「yahooWeatherForecast」と入力します。その理由は、Githubで取り出したプログラミングコードを参照すれば分かりますが、「Action=yahooWeatherForecast」となった時に動作するように設定されているからです。

 

 

 

 

そして最後に、Intentsの一番下にあるFulfillmentの呼び込みを許可すれば完成です。

 

 

天気情報を出力するChatbot

以上の方法で作成したChatbotを紹介します。例えば、「東京の天気」と入力すると、次のようになりました。

 

 

「DEFAULT RESPONSE」を見ると、誤りなく天気の情報が読み出されています。また、「INTENT」として「weather」、ACTIONとして「yahooWeatherForecast」が読み出されており、正しく動作したことが確認できました。しかし、「あれ?」と思った方もいると思います。日本語で入力しているのに、英語で出力されているのです。これは、yahooWeatherForecacstが英語にしか対応していないからです。

逆に英語で入力する場合を考えます。英語で入力するには、下図に示した言語の追加のページに行って変える事ができます。

 

英語の言語を追加し、英語を選択すると次のように「en」が青く表示されます。

 

 

ここで、「weather in Kanazawa」と入力してみました。

その結果、日本語で入力した場合と同じように、正しく動作しました。つまり、出力は英語になりますが、入力言語は設定すれば対応できるということが分かりました。

以上が天気情報を呼び出すChatbotについての説明でした。

 

ChatBotについて気になった方、このようなものづくりに携わりたいと思った方!お気軽に下のボタンよりお問い合わせください!

シンチャオ!中田椋介です。今回は第3回ChatBot製作日記です。今週はWomen’s Day や会社のみんなとサッカーをしたり内容の濃い一週間でした。今回はChatBotのトレーニングの項目について学んだことを説明していこうと思います。

 

Trainingで可能なこと、便利になること

Trainingでは、実際にトレーニングをすることが出来ます。少し、前回の復習を交えながら述べていきます。これまでのEntityやIntentsの説明では、ユーザーが言いそうな言葉を推測して、Intentsで登録しておくというものでした。しかし、この作業では、Dialogflowを作る人の負担がかなり大きくなってしまう。なぜなら、ユーザーの発言を全て予測することは厳しいためである。かなりの量のデータを打ち込む必要が出て来てしまう。IntentsやEntityで設定しても上手く反応しないことがあるため難しいのである。そこで、今回はTrainingで作業効率の向上方法について述べていく。下に一つの失敗例を挙げる。「会社の名前」とEntityに登録してあるが、Intentsでは「会社の名前を教えてください」と登録してない場合に、このように失敗してしまうことがある。これは、Intentsで似たような表現をしないとDialogflowが学習できないためである。ここで、DialogflowのTrainingの項目を利用してみる。ここでは、過去に自分が入力した言葉が履歴として残っている。ここで、自分が何を入力したかが分かり、さらに、何回入力されたかや、どのような発言に対して成功できたか、どのような発言に対して失敗したかを見ることが出来る。下にある画像をみると履歴として残っていることが分かる。表示画面は異なるかもしれないが、することは同じなので省略する。先ほど失敗したフレーズを見つけたら、Intentsに追加という項目がある。それを選択することでIntentsに追加できる。つまり、Dialogflowが学習してIntentsに追加されるのである。Intentsで手当たり次第にユーザーが発言しそうな言葉を入力していくのも一つの方法として良いと思うが、一度発言してみてテストをしてから上手く反応できなかった発言に対してだけTrainingで学習していくことが効率が良いと思う。こうすることで、再じ表現や似た表現をしたときに上手く反応できるように改善できるのである。

Entityについて

今回はTrainingを紹介しました。それは作業効率を挙げるためと述べました。では、ここで、一つ質問ですが「21日にホテルを予約して」と言われた時に「21日」と言う言葉に反応するためには、「21日」というEntityが必要ですよね。では、あなたは、これも全て手で入力しますか?それはさすがに少し非効率的ですよね。なので今回は、前回気付かなかったEntityのことについても紹介しようと思います。今言ったように、幅が広すぎるEntityがあります。このようなEntityに対して、どのような操作ができるのかというと、まずIntentsを開きます。「フレーズを入力」するところがあるのでそこに適当に入力してください。今回は私は、「カンパニーネーム」と会社の名前に似たフレーズを打ちました。しかし、Entityに追加もされていないためエンターキーを押しても無反応です。そこでカンパニーネームの所を選択します。

 

すると、何かの一覧が出てきます。これがEntityの一覧です。ここの@company_nameは私が自分で設定したEntityですが、残りは元々Dialogflowに設定されているEntityです。つまり、Entityを作る前にこれらのEntityがどのような条件で発動するのか考えていくことで圧倒的に作業効率が向上します。また、今回の場合だと、自分が元々作ってある@company_nameのEntityの中に「カンパニーネーム」という言葉が追加されていなかったため反応しなかった。ここで、1番上の@company_nameを選択すると、Entityにこのキーワードも追加されるのである。ここでEntityを把握したり、Entityの追加を行いながらIntents作成が出来ることは作業がはかどるポイントになってくると思います。

 

今回は、TrainingとEntityの新たな発見について述べました。

 

 

 

ChatBotについて気になった方、このようなものづくりに携わりたいと思った方!お気軽に下のボタンよりお問い合わせください!

 

シンチャオ!稲葉貴大です!残り3週間弱ですが、社員の方とサッカーをしたりとベトナム生活を楽しんでいます。仕事は充実しており、貴重な体験をさせてもらっています。

さてさて今回はChatbot製作日記第2回目です!Intentsの中のFollowup-IntentとContextsについて紹介したいと思います。

 

Followup-Intent

Followup-Intentは決まったIntentが行われた後に発行されるIntentのことです。

私たちは飛行機を予約するというIntentを作成し、として予約をキャンセルする場合を考えました。初めに、Intentsのページにいき、airplane-reservedのIntentを作成した後、隠しメニューのAdd follow-up intentをクリックしました。そして、次に示したように飛行機の予約をキャンセルするFollowup-Intentを作りました。

 

 

飛行機の予約をキャンセルするFollowup-Intentの中には最初から次のようにキーワードが入っています。そのため、自分で入力する必要がないことが分かりました。

 

 

 

次に、実際に実行した様子を紹介します。

例として「名古屋までの飛行機を予約して」と聞かれた際にキーワードを読み取り、レスポンスするようにしました。

 

 

 

そして、「キャンセルして」といわれると、次のようにairplane-reserved-cancelが動作していることが確認できました。ここで、airplane-reservedのIntentが呼び出される前にこの作業を行うと、うまく返答出来ないことがわかりました。つまり、親のIntentが呼び出された後にのみFollowup-Intentが動作することが理解できました。

 

Contexts

ContextはFollowup-Intentよりも柔軟な対話を作る方法として使われます。ここでは、飛行機の予約を行なった後にホテルを予約する場合を例にして紹介したいと思います。

最初にこのように、airplane-reservedのIntentのoutput contextにreservedと記入しました。そして、次に示したようにhotel-reservedのIntentのinput contextとoutput contextにも同様にreservedと記入しました。こうすることによって、二つのIntentを繋げることを可能にしました。

 

 

実際に試してみた結果を次に示しました。

飛行機の予約をした後、「ホテルの予約をして」と聞かれた場合を想定すると次のようになりました。下図を参照すると、hotel-reservedのIntentが呼び出されたことが確認できます。一方で、飛行機の予約をする前に同様のことを行うと、Intentが呼び出されないことが分かりました。

 

Followup-IntentとContextの違い

ここで、Followup_IntentとContextって同じ?と思う方もいると思います。実際、Followup-Intentを作る場合、自動的にContextが作成されています。自分で自由にIntentやContextを決めたい時は、手動でContextを作成すれば柔軟な構造で実現できます。また、Fulfillmentを用いてサーバーを設定し、Contextを状況によって変えることも可能です。Fulfillmentについては、また詳しく説明したいと思います。

 

Chatbotについて気になった方、このようなもの作りに携わりたいと思った方!お気軽に下のボタンよりお問い合わせください。

 

シンチャオ!中田椋介です。今回は第一回製作日記です。僕は機械工学類で、隣の稲葉貴大くんは電気電子科です。今週の月曜日からインターンシップ生として働き始めました。このブログでは、Dialogflowを用いたChatBotの作成過程についてブログに残していこうと思います。

 

ChatBotとは?Dialogflowとは?

今回はChatBotに関する初めてのブログなので、ChatBotの大まかな説明も交えながらブログを書いていこうと思います。ChatBotとは名前からも分かる通り、チャットのできるボットということです。Twitterのように定期的に投稿をするボットとは異なり、ユーザーが言った言葉に対して何らかの決められた反応をするというものです。ChatBotを使用することで、文字による会話だけでなく、音声を用いた会話や、スケジュールの追加などができるようになります。1番身近な例として、iPhoneのSiri等が挙げられます。次にDialogflowについて説明をしていきます。Dialogflowとは言語を解析するエンジンです。ChatBotの脳みそに相当するイメージだと分かりやすいと思います。今回はこのDialogflowを作成して言語解析を行い、ChatBotの実装を試みようと思います。

ChatBotを用いて出来たこと、出来なかったこと

今回はグミベトナムの会社について聞かれたときに答えられるようなDialogflowを作成しました。Dialogflowにはintentsという項目やEntityという項目、他にも多くの項目があります。今回はIntentsとEntityの二つの項目のみを使ったときの出来ること、出来なかったことについて気付いたことを記していきます。Entityでキーワードを設定して、それをIntentsの中でレスポンス方法や、ユーザーの言葉にどのように反応するかを決めることが出来ます。下にDialogflowの成功例を挙げます。

 

 

 

今回のユーザーの発言に対して、すべて上手く答えることが出来ました。Intentsの中で答え方を数種類用意しておくことで「会社名は何ですか」等の質問にも様々なバリエーションで返すことが出来ます。

 

では、Entityでキーワードを設定していないフレーズを発言するとどうなるのか。それは、下の画像のようになります。予測されていない発言に対しては「失礼ですが、もう一度お願いします。」や「何とおっしゃったか分かりません」のような出力が出てきます。この理解できないことによる聞き返しを防ぐためにどうすれば良いのか。

 

 

それは、Intentsでトレーニングさせるときに、Entityに含まれていない言葉を話したときにどのような返しをするか決めておけば良いのです。こうすることで、ユーザーに何と返すか指定していくことが出来ます。

 

これらをふまえて僕たちが気付いたこと2つを述べていきます。1つ目にIntentsとEntityの二つを組み合わせることで、キーワードに対応して言葉を返せることです。2つ目に、Entityで大量のキーワードを設定、Intentsで大量の返し方を用意することで、ChatBotの人物像を数種類も用意できることです。

次に出来なかったことを述べます。予測していないことに関しては、右のように「はじめに自己紹介をしたいから名前を入力して」とIntentsで指定することは出来るが、予測していないことに対して学習出来ない点です。会話をさせるには、何と言われてもそれに対応した答えを返したいですよね。しかし、何回ユーザーが「あなたの年齢はいくつですか」と聞いてもIntentsで決めた返ししか出来ません。つまり、いつまでたっても学習できず、IntentsやEntityで設定を追加しない限りは「OO歳です」と答えられるようにならないのです。

今回はIntentsとEntityの2つの項目のみで出来ることについて述べていきました。次回は、学習の仕方について述べていけたら良いかと思います。

 

 

ChatBotについて気になった方、このようなものづくりに携わりたいと思った方!お気軽に下のボタンよりお問い合わせください!