Dialogflowで開発!Chatbotの未来の可能性とその挑戦~製作日記第3回~

シンチャオ!中田椋介です。今回は第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について気になった方、このようなものづくりに携わりたいと思った方!お気軽に下のボタンよりお問い合わせください!

Dialogflowで開発!Chatbotの未来の可能性とその挑戦~製作日記第2回~

  シンチャオ!稲葉貴大です!残り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の未来の可能性とその挑戦~製作日記第1回~

シンチャオ!中田椋介です。今回は第一回製作日記です。僕は機械工学類で、隣の稲葉貴大くんは電気電子科です。今週の月曜日からインターンシップ生として働き始めました。このブログでは、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について気になった方、このようなものづくりに携わりたいと思った方!お気軽に下のボタンよりお問い合わせください!  

デザイナーを目指したベトナム人が、オフショア開発企業のCTOを目指すまで

    シンチャオ!アサイーです!来月の日本への帰国日が刻一刻と迫っておりますが、ベトナム好きすぎて離れたくないです、、 さてさて今回はインタビュー記事第3弾です!グミのスーパーエンジニア、ダンさんにインタビューをさせていただくことができました! ダンさんがグミのCTOを目指すまでのストーリーや、ダンさんの仕事にかける熱い思いは、必見です!   グミでの仕事を教えてください グミにジョインして5年目になります。プロジェクトによって関わり方は様々ですが、最近は主にプロジェクトのサポートや管理、特に若手エンジニアの指導を行っています。   グミに入る前は何をしていましたか? 大学卒業後はオーストラリア系のフィンテック企業に入社しました。そこではスキルアップの機会もあり、非常に良い経験をさせていただきました。 しかし当時の自分には、「美しいものを作りたい!」という強い思いがありました。 当時の私はウェブデザインの経験やスキルが全くありませんでしたが、ウェブデザイナーになりたいという憧れがありました。 そんな時、グミのデザイナーの求人を見つけ、デザイナーとしてグミにジョインしました。 初めての案件はHPデザインでしたが、やはりこれまでの経験がないため、うまくいきませんでした。 このHPデザインの後、もうデザイナーとしてアサインされることはありませんでしたが、私はグミで働き続けることを選びました。なぜなら、グミのCEO、祥吾さんに強く惹かれたからです。 彼には人を惹きつける魅力があると思います。寛大であるし、メンバーに対してもいつも情熱を持って、かつ明確に、物事を伝えようとします。そんな彼の姿勢に魅力を感じましたね。 また、当時グミはスタートアップ企業だったので、グミの自由で風通しの良い環境に可能性を感じました。   以前グミベトナムCEO、原田祥吾さんにインタビューを行いました! 読んでみたい方はこちらからどうぞ!「ベトナム、そしてASEANへ。」ーグミベトナム代表:原田祥吾さんにインタビューー     一番好きなコンピューター言語は何ですか? 様々な言語を扱うことができますが、もし選ぶとしたら、、Ruby on Rails とJavaScriptですね。この2つはよく似ていて、コードがわかりやすいです。 特にRuby on Railsはコードを美しくクリアに書くことができます。先に言った通り私は美しいものが好きなので、Ruby on Railsは自分にはぴったりの言語ですね。 しかし、グミは多くのクライアント様がいて、プロジェクトによって使う言語は様々です。なので、それぞれの要求に応じて柔軟に対応しています。 様々な言語でプロジェクトを担当してきたため、これまでに多くの経験を積んでくることができました。それぞれの言語の良い点、悪い点には熟知している自信があります。 このナレッジを若手エンジニアにも教育していくことが自分の役目であると感じています。   日本のクライアント様と仕事をする上で大切だと思うことは何ですか? プロダクトを作る上で、クオリティを意識することですね。日本のクオリティに対する意識にこれまで何度も驚かされると同時に、様々なことを学んできました。 まだ経験が浅かった頃、100%の自信を持って提出したプロダクトに日本人テスターからたくさんのバグレポートが上がってきたことがありました。しかしそのバグは、1ピクセルの画像のズレや文字の均一性など、私にとってはほとんどのバグがすごく細かなことでした。 このような経験から日本のクオリティを実現することを常に意識するようになりました。クオリティに関しても同様、若手エンジニアに意識、改善させる指導を行っています。   仕事をしていて、おもしろい!と感じることを教えてください。 私は常に、いかに クライアント様やユーザーの方達にとって役に立つプロダクトを作るかをモットーに情熱を持って仕事をしています。 実際のお客様の感想や生の声を聞き、自分達が作ったプロダクトが役に立っているということを知れると、すごくやりがいを感じますね。モチベーションもぐっと上がります。 また一緒にプロジェクトを行うクライアント様と一緒に協力し、より良いプロダクトを作っていくというプロセスも大切です。 クライアント様からの要望を伺い、私たちエンジニアからもより良いソリューションを提供させていただき、何度もコミュニケーションを取りながら信頼を築き上げていけると、より良いものを作ることができます。   最後に、ダンさんの今後の目標やビジョンを教えてください。 常に自分を成長させようという意識を持つことが大事です。 現在の私のゴールは、CTOになることです。日々の仕事の中で、CTOになるための知識、スキルを身につけるよう意識しています。 もちろん先端のテクノロジーにもついていかなければなりません。私は毎日テクノロジーに関するニュースをチェックしています。まだまだ学ぶことがたくさんですね。   ダンさん、ありがとうございました!...