Dialogflowの解剖書(基本)

※本記事は2020/09/28時点の情報になります。

#Dialogflowは何者か
[Dialogflow](https://cloud.google.com/dialogflow/docs/basics?hl=ja)はGoogleが提供する言語解析エンジンになります。
通常であれば自然言語の解釈と処理には、非常に堅牢な言語パーサーが必要ですが
Dialogflowがこれらの処理を一手に引き受けてくれます。
一言で言えば`チャットボットを簡単に実装できるAI`です。
Dialogflow内で完結する内容なら、ほぼノンプログラミングで作成することが可能なので、
学習コストが低いのが特徴です。
またGoogle AssistantやLINEなど20以上のサービスと連携することができます。

![Dialogflow](https://takapon.net/wp-content/uploads/2018/08/chatbot_dialogflow15-1.png)
#Dialogflowの機能
ここからはECサイトにチャットボットを設置するシナリオで機能を紹介していきます。
<dl>
<br>
## <dt>①キーワードの抽出</dt>
<dd>チャット画面でユーザが「〇〇の送料が知りたい」と尋ねたとします。
するとDialogflowは内容を理解し、事前に設定しておいた「送料を聞かれたときのシナリオ」に沿って行動してくれます。<br>質問表現には他にも、「東京都の送料は？」「送るのにいくらかかりますか？」など様々なパターンが想定できますが、いくつかトレーニング用の例文を与えておくことで、AIが学習を行なってくれるため、新しい表現もフォローしてくれます。</dd>

## <dt>②応答</dt>
<dd>送料を聞かれているときのシナリオとして、「一律500円、離島(沖縄・北海道)800円、お買い上げ5000円以上で無料になります」のように定型文で返す設定をしていれば、Dialogflowはその通りに返答します。返答文は複数のものを覚えさせることが可能です。
この①②の繰り返しが、Dialogflowが行なう動作の基本になります。</dd>

## <dt>③データベースと連携</dt>
<dd>ユーザが「黒色のスニーカーが欲しい」と入力したとします。
Dialogflowは①の段階で[黒色][スニーカー]を抽出し、キーワードが足りない場合は
「サイズはどうされますか?」と聞き返すことも出来ます。
ここでDialogflowはECサイトのデータベースと通信。ユーザーが求める[黒色][スニーカー][27.5]
をもとに検索し、結果を受け取ります。
データベースの検索結果に基づいて、②の流れで、「サイズ27.５の黒色のスニーカーが98件見つかりました」といった文章を生成してくれます。
<br>
※ この通信はWebhook
と呼ばれる技術を活用することで可能になります。検索対象のデータベース側でも、Webhookでのリクエスト・レスポンスができるようにしておく必要があります。</dd>

## <dt>④トレーニング</dt>
<dd>ユーザーとのやりとり履歴をもとに、AIをトレーニングすることができます。過去にうまく解釈できなかったフレーズに対して、新たな対応方法を教えたり、「黒の靴」「黒スニーカー」「ブラックな」「真っ黒な」といったように、覚えさせる例文や用語を増やして、AIの学習効率を高めることができます。</dd>
</dl>

#Dialogflowの重要な用語
Dialogflowのエージェントを作成する上で欠かせないキーワードになります。
簡単に概要だけ説明します。詳しい使い方に関しては他の下記の記事等を参考にしてください。
[チャットボットの作り方](https://medium.com/@yonemoto/%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%83%9C%E3%83%83%E3%83%88%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-google-dialogflow%E5%85%A5%E9%96%80-e294a106427b)
[Dialogflow入門](https://qiita.com/kenz_firespeed/items/0979ceb05e4e3299f313)
##Intent
Intentsはユーザーの意図に合わせて応答する**処理群**のことです。
多くのインテントを定義し、どのような入力を受け取って、どのように応答するかを設定し、複数のインテントを結合して会話全体を処理します。
IntentはDialogflowの中心となる要素なので、設定画面に表示される6つの項目を、よく使う順に紹介していきます。
基本的には、この6項目を設定したり、見直したりしていくことでチャットボットの作成をおこないます。

***
####1.Action and Parameters
このIntentで抽出するキーワードの種類を管理します。例えば、「色」「サイズ」「靴の種類」を取ってほしい、とAIに教えることができます。また、「赤い靴をください」と入力された場合に、足りない要素である「サイズ」や「靴の種類」を聞き返す文言の設定もここで可能です。

####2.Training Phrases
ユーザからの入力の例文をAIに学習させます。
「赤くて小さいスポーツシューズはありますか？」のような例文を与え、その中から「赤」「小さい」「スポーツシューズ」といったキーワードを抽出するように教える項目です。

####3.Responses
実際の応答文言を指定します。複数のパターンを用意することが可能で、より豊かな挙動を設定できます。

<h5>4.Fulfillment</h5>
データベースとのやりとりなど、外部連携のオンオフを設定できます。

####5.Contexts
このIntentの前後にあたる文脈を関係づけることができます。「送り先を聞いたあとに支払い方法を質問する」「支払い方法のやりとりのあとには会員登録への誘導をする」といった設定がここで可能です。

####6.Events
通常の会話以外に、このIntentを使う場面を選択できます。「一番最初に呼ばれたとき」「スカイプを使って一番最初に呼ばれたとき」などがあります。

***


##Entities##
Entitiesは、会話から抽出するキーワードを表します。
単純な単語リストの形も可能。また、正規表現を使って分類したり、AIが学習によって自動で項目を増やすことを許可したり、打ち間違いなどをフォローする「あいまい一致」をオンにすることも可能です。また、時間、地名、色といった頻繁に使われるEntityは、Dialogflowに最初から用意されているものを使用することが可能です。

##Fulfillment##
Fulfillmentは会話中にチャットボットが使う情報を、自分のサイトのデータベースなどと連携させる機能です。

#二つのAgentタイプ
Dialogflowには[CX Agent(ベータ版)](https://cloud.google.com/dialogflow/cx/docs/basics?hl=ja)と[ES Agent](https://cloud.google.com/dialogflow/es/docs)があります。
それぞれ以下のようになっています。

| カテゴリ | ES Agent | CX Agent |
|:-----------|:------------|:-------------|
|エンディション       | Dialogflow Trial Edition、Dialogflow Essentials Edition        | Dialogflow CX Edition         |
| エージェントの構成要素     | インテントのフラット構造      | フローとページのグラフ構造       |
| 会話の制御       | ノードとしてのインテントおよびパスを制御するコンテキストを使用した、非線形パスをシミュレートする線形会話パス        | ページをノードとして使用し、ステート ハンドラを使用してパスを制御し、明示的な会話制御を行うステートマシン モデル         |
| コンソールのユーザー エクスペリエンス         | 主にテキスト形式          | 会話パスと構成のテキスト フォームを示すビジュアル グラフ           |
| インテントの再利用性       | インテントがフルフィルメント、イベント、レスポンスに関連付けられていて、会話状態に固有のものであるため、再利用が困難       | このカップリングを取り除くためにが簡略化されているため、再利用性が高い       |
| Webhook エラー処理    | エラーはエージェントによって静かに無視され、存在する場合は API 呼び出し元に渡される     | エージェントに組み込まれた明示的なエラーイベント処理      |
| イベント処理         | 呼び出されたイベントがインテントの照合をトリガーする          | 強力な制御を備えた最高クラスのタイプ           |
| 条件付きレスポンス メッセージ       | Webhook 呼び出しが必要       | 	ルートの条件、または Webhook 呼び出しを使用して、フルフィルメントで静的に構成可能       |
| パラメータ スコープ    | インテント、コンテクスト、イベントにスコープを設定可能     | インテント、フォーム、セッションにスコープを設定可能      |
| プロジェクトあたりのエージェント数         | 1          | 10           |
| 推奨されるエージェント サイズ       | 中規模のエージェント サイズまで	       | 非常に複雑なエージェントまで
       単純なエージェントを設計する場合の学習曲線	    | 簡単     | 普通     |
| 複雑なエージェントを設計する場合の学習曲線	    |高い     | 普通     |
| 料金と割り当て    | きめ細かい     | 簡単      |

ES AgentのDialogflow Trial Editionは無料で使用することが出来ます。
個人の学習やテストに適しています。
またどちらのAgentを選ぶかですが、
小中規模なAgentはES Agent
大規模なAgentはCX Agentになると思います。

#たくさんあるチャットボットツール
他にも主要なチャットボットをいくつか紹介します。

###API
[LINE Bot Designr](https://developers.line.biz/ja/services/bot-designer/)
SNSの大手LINEでは、「LINE Bot Designer」というAPIサービスを提供しています。基本料金は無料で、ダウンロードして利用する形になります。
・直感的にチャットボットのプロトタイプを製作可能
・あらゆるLINE上のメッセージテンプレートに対応
・デモで簡単にチャットボット動作を確認できる
など、便利な機能が多数搭載されているのが特徴です。
LINE上でチャットボットを展開したい場合は、最も有力な選択肢になるでしょう。
<br>
[facebook](https://developers.facebook.com/)
Facebookでは「開発者ツール」を活用することで、チャットボットの作成が可能です。
・キーワードに関係するコンテンツを、自動で送信する
・フローに沿って入力していくと、おすすめの商品やサービスを提示する
といった動作が可能になっています。
<br>

###開発フレームワーク
[Amazon Lex](https://aws.amazon.com/jp/lex/)
AI機能を搭載している開発フレームワーク、「Amazon Lex」を提供しています。
「Amazon Echo」などに搭載されているAIアシスタント、「Alexa」と同じ機械学習（ディープラーニング）機能を利用可能です。そのため少ない時間で、効率よく音声認識機能を組み込んだ高度なチャットボットを作成できます。
また高度な自然言語認識機能を備えているため、自然な言語での対話ボットが構築できます。<br>
[Botkit](https://botkit.ai/)
Microsoftに買収された「XOXCO社」が手がけるチャットボット開発フレームワークです。公式ホームページは英語になっているため操作をするには、ある程度の英語を理解するスキルが必要になってきます。
「Slack」など、さまざまなツールに連携できるチャットボットを作成できます。またカスタマイズ性もあるので、自社オリジナルのチャットボットを作成したいときにもぴったりです。
コード画面を操作することになるので、基本的なプログラミング技術が必要になります。

###チャットボット作成ツール
[Dialogflow](https://dialogflow.com/)
「Google」が提供している、チャットボット作成ツールです。
Googleの豊富なデータを活用可能とともに、チャットボットのテンプレートも用意されているのがメリットです。また「Google Home」といったIoTデバイス向けのシステム開発もできるため、利用の幅が広がります。
他にも
・ユーザーの感情を理解する
・スペルミスを自動で修正する
など、便利な機能が数多く搭載されています。<br>
[Hachidori](https://hachidori.io/)
国産初のAIを搭載したチャットボットです。
7,000以上の開発実績がある提供会社から、チャットボット作成に関して強力なサポートが受けられるのが強みとなっています。また
・LINE
・Facebook
・Wantedly
など、さまざまなサービスへ自社で制作したチャットボットを設置可能です。<br>

[チャットディーラー](https://www.chatdealer.jp/)
「株式会社ラクス」が運営している、チャットボットツールです。サービス内で
・チャットの数
・離脱数
・アンケートの結果
など、チャットボットの精度向上にかかわるデータを確認して分析ができます。またフローチャートを活用した、可視化されたシナリオ作成が可能なのも特徴です。


###機械学習搭載ツール
[Watson Assistant](https://www.ibm.com/watson/jp-ja/developercloud/conversation.html)
IBMが開発したAI「Watson」を活用したチャットボット開発ツールです。「JAL」や「ネスレ」など大手企業も、Watson Assistantを活用したチャットボットを提供しています。
直感的に操作が可能であり、それでいてWatsonの高度な技術もチャットボットに落とし込めるのが特徴です。自然言語を理解した上で取り込み、最適解を出してユーザーへ提供してくれます。<br>

[Wit.ai](https://wit.ai/)
Facebookに属するチャットボット作成ツールです。
・Intent：発言自体の意味を理解させて、会話での応答につなげる
・Entity：事前に言葉を登録して、紐づけられた回答を返す
の2つのモードを使い分けながらチャットボットを作成できます。
Dialogflowと同じく、IoTデバイスなどにも対応したシステムが制作できるので汎用性が高いです。

#おわりに
今回はDialogflowを簡単に紹介しました。
チャットボットの市場は急成長し、2022年には130億円以上になると言われています。
皆さんもどこかでチャットボットの作成に携わることがあるかもしれません。
その時、この記事がお役に立てれば幸いです。



#参考
[Dialogflow ESのドキュメント](https://cloud.google.com/dialogflow/es/docs)
[Dialogflow CXのドキュメント](https://cloud.google.com/dialogflow/cx/docs)
[Dialogflow入門](https://qiita.com/kenz_firespeed/items/0979ceb05e4e3299f313)
[サルにもわかる Dialogflow FAQ](https://qiita.com/miyasita1958/items/dbf74125f68533f19dba)
[チャットボット開発ツール10選](https://qeee.jp/magazine/articles/8484#topic_1.1)
[チャットボットの作り方 Google Dialogflow入門](https://medium.com/@yonemoto/%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%83%9C%E3%83%83%E3%83%88%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-google-dialogflow%E5%85%A5%E9%96%80-e294a106427b)