LINEチャットボット

機械学習（深層学習）が注目されて久しくなりますが、今年はその機械学習を利用したAIが新しいトレンドとして注目されてきているように思います。ゲームでも去年にポケモンコマスターが機械学習のAIの搭載を発表しており、最近ではDeepMindがBlizzardとのコラボによる「スタークラフト2」のAI開発環境の公開や、「Magic: The Gathering Arena」が新カードのメカニズムに対応するために機械学習を取り入れたGame Rules Engineなどが話題になっています。ただ、カードゲームやデバッグでは導入しやすい要素もありつつも、機械学習のAIのゲーム事例はまだ少なく、有効な運用となるとデータ分析にとどまっているように思います。

その一方で、AIのサービスとして確立してきたソリューションもあり、中でもチャットボットやスマートスピーカーなどが急速に普及しつつあります。スマートスピーカーはまだ日本ではハードウェアの普及が遅れていますが、先日LINE Waveがついに登場し、他にも公式発表ではありませんが、Google Homeの日本発売の噂も耳にします。一方、北米ではすでに群雄割拠を迎えており、Amazon EchoやGoogle Home、Apple HomePod、Microsoft INVOKEと名だたるメーカーが鎬を削っています。また、チャットボットの分野では、ヤマト運輸やNAVITIMEなどがLINEチャットボットでサービスの提供を始めています。ゲームの分野においても事例は増えつつあり、最近ではNTTのRepl-AIを利用したゲームが登場してきています。また、カスタマーサポートにも利用が始まっており、先日のGTMFではラクスがチャットボットの事例を紹介したり、TGSで出展していたイー・ガーディアンはG-Botというサービスを提供しています。こうしたサービスの主だった効果は人の手で行っていたものの人口無能による自動化にとどまっており、人工知能として期待されるようなクリエイティブな要素の実現には至っていませんが、AIが実際に利用されるサービスとして定着していることは喜ばしいことだと思います。

また、もう１つ変化として感じているのが、AIや機械学習の分野において、非プログラマ向けの開発環境が整いつつあることです。先月、ソニーが深層学習の開発環境「Neural Network Console」を公開しましたが、「Neural Network Console」はプログラムの知識なしで深層学習がグラフィカルに作成することができます。
https://www.youtube.com/watch?v=1AsLmVniy0k

チャットボットでもこうした環境は用意されており、その１つがIBMのBluemixのサービスの１つであるWatson Conversationです。私個人としてこれまで利用したいたクラウド環境はAWSが中心でしたので、Bluemixの勉強もかねて、今回はWatson Conversationを触ってみました。


#Watson Conversationの開始
まず、手始めにBluemixの登録を行います。登録から３０日は無料でサービスを利用することができます。ここでは登録の説明は割愛しますが、登録自体は非常に簡単にできます。一部のクラウドサービスでは必要となるクレジットカードの登録は不要です。

登録を終えたら、画面右上の「Catalog」のボタンを選び、サービスの一覧を表示します。この一覧の中の「Watson」のカテゴリーの中に、「Conversation」がありますので、この項目を選びます。サービス名などの入力ページが表示されますので必要事項を記載し、下図の画面から「Launch tool」を選びWatson Conversationのページに移動します。
![SnapCrab_NoName_2017-9-9_21-21-33_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/78487/fefdb23f-4e92-0823-231a-d6be4aacb9d9.png)


Watson Conversationでは、まず初めにワークスペースを作成します。このワークスペースで作成するものが1つのチャットボットになります。ワークスペースに含まれる情報はJsonでエクスポート、インポートすることができます。また、ワークスペースは生成後に「Workspace ID」が割り当てられますが、このIDが後でLINEのチャットボットとの連携で必要となります。
![SnapCrab_NoName_2017-9-9_21-22-25_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/78487/ace57869-b36f-5b46-b1ba-43a0a6692ccf.png)


そして、このワークスペースですが、Intent、Entity、Dialogの３つで構成されています。

##Intentsの設定
Intentsは複数の例文を集合体として用意することで、問いかけの分類・トレーニングを行います。下図では挨拶を認識するための例文を登録していますが、方言なども追加していくことで、様々な呼びかけを認識することができます。
![SnapCrab_NoName_2017-9-24_17-55-2_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/78487/68f431b2-55da-03dd-12ae-bc4ebe4dafe0.png)

また、この設定は、対話式のトレーニング（Try it Out!）の中で行うこともできます。例えば、沖縄のこんにちはの方言「ちゅーがなびら」を発言してみても、最初はIrrelevant(不適)と判定され、認識することができません。
![SnapCrab_NoName_2017-9-24_17-17-22_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/78487/781eeb97-c4f7-80e0-9cfb-5264148abf6a.png)

そこで、この会話を最初に用意したIntentsの「#挨拶」を指定することで、再トレーニングが行われ、次に「ちゅーがなびら」を発言すると、正しく挨拶の認識ができ、返事を返すようになります。
![SnapCrab_NoName_2017-9-24_17-18-35_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/78487/f22d4087-a6c7-cc59-85c6-86d423b1a6fa.png)

##Entityの設定
Entityは目的語にあたります。例えば、喉が渇いたのであれば、「何を」飲みたいかという目的語（Target）が必要になります。そこで、「@日本酒」という名前で、十四代、獺祭、黒龍、八海山などを登録しておけば、獺祭などが「@日本酒」であると認識できるようになります。さらに地域と組み合わせることで、おススメの地酒を提案することもできるでしょう。秋のお寿司のネタであれば、下図のようなイメージになるかと思います。
![SnapCrab_NoName_2017-9-24_18-20-5_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/78487/9cda1a5f-cb8b-ae00-a3bd-c26a80fe2932.png)

##Dialogの設定
最後にDialogですが、これまで設置したIntentsとEntityを利用して、ノードベースで会話を行えるようにしていきます。ノードに記述されている「welcome」、「#挨拶」、「anything_else」が条件の指定になります。「#挨拶」はIntentsで作成したもので、#が先頭につきます。@が前についているものはEntityになります。
![SnapCrab_NoName_2017-9-24_19-3-9_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/78487/705ca7ee-4d62-1ad5-6bba-170ef7eadfd8.png)

また、条件の「welcome」は一番最初に呼び出されるノードです。条件に合致した場合は、responseに記述されたメッセージが使用されます。複数登録することができ、Sequential（順次呼び出し）もしくはRandom（ランダム）が指定できます。なお、条件の「anything_else」は合致する条件がなかった場合に呼び出されます。
![SnapCrab_NoName_2017-9-24_19-4-36_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/78487/24824b04-2d7c-5c0f-509e-280d1146be10.png)

ノードは子ノードを作ることで質問を掘り下げることができます。
![SnapCrab_NoName_2017-9-24_21-1-13_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/78487/74c0d0d4-3cff-aa9d-8283-f7a8553427dc.png)

![SnapCrab_NoName_2017-9-24_20-59-39_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/78487/b6896c6b-c5de-4b3d-31cb-b947668ce4bc.png)


#LINE Message API
LINEでWatson Conversationと連動するためには、LINE Message APIを使用します。LINE Message APIの利用にあたっては無料プランと有料プランがありますが、これらの料金プランがクラウドサービスの中でLINEが特殊と思えるのが定額制という点です。日本企業らしい設定とも言えますが、日本では使用状況に合わせた料金の変動が受け入れられていないと今でも耳にしますので、LINE Message APIもそうした背景があるかもしれません。フリーは「有効友だち数×吹き出し数　1,000通まで」という制限がありますので、ビジネスで運用するなら最低でもベーシック以上になるかと思います。なお、プロは去年の2016年9月時点では21600円でしたので、約1.5倍に値上がりしているようです。
![SnapCrab_NoName_2017-9-24_21-43-48_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/78487/5b3e9454-0a74-eb1c-d0df-ff96e1792a36.png)

LINE Message APIは[LINE BUSINESS CENTER](https://business.line.me/ja/services/bot)から登録を行います。「Developer Trial」であれば、制限付きで無償で利用することができます。なお、APIの利用を開始した後、Webhook URL を有効にする必要があります。

#IBM Bluemix Node-RED
LINE Message APIの準備ができたら、BluemixのNode-REDでLINE Message APIとWatson Conversationの接続を行います。サーバーレスであれば、Node-REDでなくともAWSのLambdaでも代用は可能です。

Node-RED自体はオープンソースソフトウェアでNode.jsの環境があれば動かすことができます。また、グラフィカルなノードベースで作業を行うことができ、条件分岐やループもノードベースで構築していきます。
![SnapCrab_NoName_2017-9-25_1-26-46_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/78487/45c7894e-4458-96c4-d72b-a54c360c9293.png)


なお、Node-REDでDeployしたURLは、LINE Message API の Messaging settings の Webhook URL にURLを指定する必要がありますので、お忘れないようご注意ください。デフォルトでは、Node-RED の ROUTE のURLに Sample がつけられているかと思います。

#LINEチャットボット
Node-RED の Deploy を終え、Watson ConversationとNode-RED、LINE Message APIが連動すれば、チャットボットとして機能できるようになります。
![SnapCrab_NoName_2017-9-24_22-21-5_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/78487/94499a7f-16e6-0241-31b4-bd0de60a8470.png)

#所感
実際に触ってみるとプログラムのスキルが必要ないことに驚きました。最近、データ解析でBIツールも触り始めていますが、こちらも基本的にはプログラムの知識は必要ありません。Node-REDはノードベースとはいえ予備知識がないと厳しいとは思いますが、システム開発という言葉が時代遅れになり、サービスに注力することが機械学習のような新しい分野でも当たり前になってきているのかもしれません。

Watson Conversation自体はビジネスに組み込みやすい実践的なサービスのように感じました。立ち位置としては人工無脳になってくるかとは思いますが、その分コントロールはしやすく、やはりカスタマーサポート業務などはいずれこうしたサービスに置き換わってくることになると思います。