LINE Business Centerとapi.aiを使ってチャットボットを作る




勉強会に参加したので、その備忘録です。
主にLINE Business Centerやapi.aiを利用したチャットボットの作り方と、
ボットの仕組みについて整理します。
ただところどころメモが追いつかなかったので、抜けている手順もありそうです。


#チャットボットを作る

##事前準備
* LINEアカウントの取得、メールアドレスの登録
* Googleアカウントの取得

##手順
###LINE Business Centerに登録。
LINE Business Centerサイト
<https://business.line.me/ja/>

このときLINEに登録しているメールアドレスを使うので、LINEのメールアドレスの設定を済ませておきます。
登録時には認証メールが届くので、メールが届くような設定にしておく必要があります。


###LINE@のアカウント取得
先ほどのLINE Bussiness Centerの画面から、LINE@のアイコンを選んでください。

今回は一般アカウントを作ります。
「一般アカウントを始める」画面に進みます。

![Line@2.PNG](https://qiita-image-store.s3.amazonaws.com/0/185546/bc02a98a-978f-1378-3071-5a09a4fad108.png)
アカウント名を決めます。
業種も選択します。
けど業種が本人確認されることはないです。


###Messaging APIの登録
LINE Bussiness Centerの画面へいきます。

* Messaging API  
 応答専用で、自分からユーザにプッシュ通知することができません。けど友達無制限とのことです。
* Developer Trail  
 友達上限50人という制限がありますが、プッシュ通知可能とのことです。

今回はMessaging APIへの登録を行うので、Messaging APIのアイコンを選択します。


アカウント名を決め、業種も選択します。

申し込み完了画面となると、
**「LINE@MANAGERへ」**というボタンが出てくるので、そちらのページに移動します。

###LINE@MANAGERの設定
ここはBotの設定画面です。
ます「APIを利用する」ボタンをクリックし、APIの利用を承認してください。

Bot設定画面に行くので、好きなように設定します。
今回はこのように設定しました。
![Bot設定.PNG](https://qiita-image-store.s3.amazonaws.com/0/185546/de5e2a61-c798-e21d-d9db-1cfd6e646a02.png)


###LINE Developersでの設定
上記のBot設定画面の上の方にある、
**「LINE Developersで設定する」**リンクへ移動します。
初回アクセス時は認証があります。

![develop.PNG](https://qiita-image-store.s3.amazonaws.com/0/185546/385878ff-d382-a266-e2c9-d02dde04b575.png)
するとBasic informationの画面が開きます。
この画面からは移動せず、そのままにしておきます。（後で使います）

###api.aiの登録と設定
api.aiサイト
<https://api.ai/>

api.aiサイトから、Googleアカウントの認証をします。
createagentボタンから、
エージェント名前決めます。
これはGoogleプロジェクトですでに同じのが使われていたらはじかれるようなので、なるべる複雑なものの方がよいです。
今回言語は日本語で作成しています。
日本語だと、できることが制限されるとのことだったので、機能を重視したい場合は英語の方がよいかもしれません。

そして左にある**「Integrations」**というメニューを選択し、LINEのアイコンがあるので設定を開きます。
![設定.PNG](https://qiita-image-store.s3.amazonaws.com/0/185546/5bd3add0-a04a-6aed-7517-a0afed8f93a2.png)

そして先ほどのLINE DevelopersのBasic informationの画面にある、
* Channel ID
* Channel Secret
* Channel Access Token
の情報を先ほどのapi.aiのLINE設定画面に貼り付けます。
また、api.aiのWebhookURLをLINE Developersの方に貼り付けます。

LINE DevelopersのVERIFYボタンを押して、Successと出てくれば成功です。
出てこないときは、コピペをやり直してみます。
api.aiの画面にあるSTARTボタンをクリックし、ボットサービスを開始します。

###ボットをスマホで確認する
LINE DevelopersのBasic information画面に、QRコードがあります。
それをスマホで読み取ると、今回作ったボットを友達追加することができます。
初期設定のままなので、何か話しかけると、よく分からなかったような感じの反応が返ってきます。
![bot.PNG](https://qiita-image-store.s3.amazonaws.com/0/185546/7974aaa9-d89a-cf52-9619-1c457dfd2e44.png)


###好きな言葉を返すようにする
api.aiの画面の左の方に**Intents**というメニューがあります。ここで自分で好きなように、返ってくる文字を設定できます。
![api.PNG](https://qiita-image-store.s3.amazonaws.com/0/185546/5ee7062c-c140-774e-2bac-7986aca748e8.png)

* Default Fallback Intent
設定されていない文字が入力されたとき、返す言葉を設定します  

* Default Welcome Intent
**User says**がインプットの内容です。ユーザがどのような言葉を言った場合、というルールを書きます。
**Text response**が、User saysに当てはまる言葉がインプットされたとき、どのようにアウトプットするかを記述しています。複数個入れると、ランダムに返してくれます。  
 
![bot2.PNG](https://qiita-image-store.s3.amazonaws.com/0/185546/4e76f16b-0a70-fffc-43e9-83c945ac1dab.png)


好きな言葉を返してくれるようになりました。
これは**部分一致もOK**です！前は日本語版だと部分一致ができなかったみたいです。  






#チャットボットの仕組み

**ユーザーが「○○」と言ったら　→　「○○」と返答する**

というのがボットの流れですが、
返す方法には以下の2つの種類があるそうです。

* ルールベース
* 機械学習ベース

##ルールベース
if文の連続みたいなものです。
ボットの作成者が、自分の体験や知識を元に、ユーザがどのような言葉を入力するか、予め予測して、ルールとして登録しておきます。
今回上で作ったものは、このルールベースにあたります。
今回作ってみたように、簡単に作ることができるというメリットもありますが、ユーザによる表現の違いを吸収するのが難しそうです。



##機械学習ベース
データを使ってルールを見つけ出してくれます。
機械学習は詳しくないのでよく分かっていないですが、予め大量のデータが必要なので、ボット作成までのハードルは高そうです。

ちなみに、上で作成したapi.aiでも機械学習を行うこともできます。
左にtrainingというメニューがあるので、そこで学習させます。ルールベースでボットを作っていても、少しずつ学習させていくとより精度がよくなります。
また、最初はデータがないのでルールベースでデータを蓄積し、データが溜まったら機械学習ベースに切り替えるという方法も有効とのことです。

#ボットの活用事例
最近はボットを活用している企業も増えてきていると思います。
今回は2つのシステムを教えてもらいました。

##企業のFAQシステム
Q&Aのシステムです。
一覧としてサイトに載せている企業もあると思いますが、ボットを活用しているところもあるみたいです。

「よくある問い合せ」に対応する回答を登録しておきます。
機械学習的には、「ユーザーが何と言ったのか？」の認識率の戦いで、どのように返すかというのはほぼ固定されています。
つまり、インプット側の機械学習が必要となります。

##雑談システム
マイクロソフトの女子高生人工知能「りんな」が有名です。
Twitterでユーザーと会話をしているところを見て、本当に自然に会話が成り立っていて驚いたことがあります。

機械学習的には「ユーザーが何と言ったのか」という認識と、「何と返すか」という言葉の生成が必要です。
インプットとアウトプット、どちらにも機械学習が必要となります。


#感想
「ボット」と「機械学習」という言葉が点と点の知識でしたが、
少し線になってきた･･かなという感じでした。かなり間隔の空いた破線くらいですが。
言われてみると当たり前な気はするけど、同じボットでもいろいろ仕組みがちがうんだなあ・・・
ボットも奥深い・・・というのが感想です。

勉強会の内容とは関係ないけど、外部の勉強会に慣れておらず、名刺をもっていかなかったのが反省点です。  

今は作っているボットは挨拶を返してくれるとかそのくらいなので、
IT系の単語を入れると、その意味を説明してくれるボットとか作ってみたいなあと漠然と考え中です。