【Botブームに乗り遅れた人たち用】Chat Bot（チャットボット）についてまとめてみたよ。

#0. これはなんですか？
Chat Bot界隈に乗り遅れた私のような人達のためのまとめ記事です。
主にLINE Chat BOTに焦点を当てて説明。このページと参考文献のURLだけで、
Botの背景、仕組み、アルゴリズムの全てを把握できるように心がけてます。（足りなかったらサーセン）

#1.はじめに
###そもそもボットって何？
「ロボット」の略称で、人間がコンピュータを操作して行っていた処理を、人間に代わって自動的に実行するプログラムのこと。検索エンジンなどが利用するボットは「検索ロボット」「クローラ」などとも呼ばれる。

###対話型ボット（チャットボット）の始まりについて

初期の対話型ボットで有名なのは「ELIZA（イライザ）」(1966)。 
![GNU_Emacs_ELIZA_example.png](https://qiita-image-store.s3.amazonaws.com/0/49531/7111ab0c-5725-7d7f-283b-455784555c51.png)

「DOCTOR」という来談者診断会話シミュレーションが有名。
Emacsにはじめからdoctorは入っていますので、すぐに試してみることが出来ます！
[Emacsに入ってる人工無脳ELIZAと対話する - minus9d's diary](http://minus9d.hatenablog.com/entry/2016/03/14/224830)
ただし、この時期の人工無脳はいわゆるパターンマッチング（if-then-elseをひたすら連ねたもの）を基本としたルールベース（rule-based）が基本である。そのため、基本的には単語のオウム返しを喰らいます。

*  おまけ  
iPhoneのSiriとELIZAは仲良しなので、Siriに「[面白い話](http://ascii.jp/elem/000/000/879/879894/)」って聞くと、すごい皮肉（？）なお話が聞けたりました。


###チャットボットの仕組み  
ここ見るとよく分かる。
[TensorFlowで会話AIを作ってみた。 - slideshare](https://www.slideshare.net/tak9029/tensorflowai)
1. if-then-else型
昔は、基本的にELIZA同様なパターンマッチングを用いたものが多かった。
概念は基本Twitter Botと同じで、「〇〇」という言葉が入っていたら、「✕✕」という返事を返す。
ワトソン君のdialogのシナリオを使ったパターンマッチング型AI（てか、ただのif文）
2. 会話ログデータベースを使用した方法
言語処理的概念を追加。考え方は検索エンジンの元と同じ。予めデータベース内に返信パターンを用意する。
検索クエリ（Inputの文章）に対して、一番類似度が高い返信文をデータベースから見つけ出し、結果を返す。
データベースに圧倒的な文章量を入れればそれっぽい精度になる。ビジネスではよくこのタイプを見る。
パン田一郎君もこれ。
3.  生成モデル型
先ほどの２つは予めこちらで返信文章をデータベースとかに用意する必要があったが、
生成モデルではそもそもの返信文章を確率的に計算し、Inputの文章に対応する相応しい返信文章を自動生成する。
簡単なアルゴリズムとしてマルコフ連鎖があり、[TehuTehu連鎖](http://vps1.liverty.biz/hbkr/tefu/3663600)がその一例。
ただ、マルコフ連鎖は限界があるので、最近はニューラルネットの一種類である
RNN（リカレント・ニューラル・ネットワーク）を用いるのが主流。りんなちゃんはこのタイプのBot。

#2.LINEボットAPIについて
> BOT API Trial AccountではあなたのサービスとLINEユーザーの 双方向コミュニケーションを可能にするAPI開発をお試しいただけます。（らしい）

##2-1. いろんな公式アカウントやボットに触れてみた

* 公式アカウントとの違いは？
普通の公式アカウントはメッセージの配信時間を決めて、その時間に勝手にユーザー配信される。
ユーザーが返信を送っても、アカウントからは返信がこない。
公式アカウントによっては、ランダムに数十種類のメッセージをランダムにかえしてくれたりもする。  
また、メッセージ受付時間中に返信をすると、番組で使われたりする模様。

![スクリーンショット 2016-05-29 21.41.38.png](https://qiita-image-store.s3.amazonaws.com/0/49531/e4c70a9a-e3d4-f8b3-598e-82de30879f68.png)
こんな感じで、メッセージ受付中に送ると、番組コーナーに使用されるようになる模様。

![スクリーンショット 2016-05-29 21.41.53.png](https://qiita-image-store.s3.amazonaws.com/0/49531/5d962698-cc7b-d38d-8bf1-9f47060a87e6.png)
普段時は、ランダムに返信が返ってくる。益若つばさのLINEアカウントはエロティックでおすすめです。

![スクリーンショット 2016-05-29 21.43.43.png](https://qiita-image-store.s3.amazonaws.com/0/49531/098c0557-15cb-14df-9713-fc8871ff506a.png)
チャングンソクもなかなかイケてる。

* 今どんなLINEボットが作られているのか。
1. [ももクロなどの画像を返す LINE BOT をつくってみた - ninxit-blog](http://www.ninxit.com/blog/2016/04/10/ももクロなどの画像を返す_LINE_BOT_をつくってみた)  
ももクロメンバーの単語をInputすると、そのももクロメンバーの画像が返ってくる。笑
2. 　ディズニーランドのアトラクション待ち時間bot
[LINE BOT「親切なDおじさん」を開発したよ〜 - 算譜王におれはなる!!!!](http://taro.hatenablog.jp/entry/2016/04/13/083050)  
名前のとおり。

まだあまり、ビジネスでしっかり使っている事例はみつからず...。

##2-2. ボットの活用例
LINE Bot APIに限らず書いていく。

* ECサイトでの活用
検索や購入ができる。
[Facebook Messenger Platform example 2 - YouTube](https://www.youtube.com/watch?v=FWcGWHVP7s8)
洋服ECサイトなどでは自分の持っている服を数枚送信すると、それにあったアクセサリをコーディネートして提案したり、位置情報を送信すると近くの自社店舗への案内を送信するボットもある。
こちらも同様のEC使用例
[Facebook Messenger Spring Bots - YouTube](https://www.youtube.com/watch?v=g5NWzgiS1CE)
botが以下の順で問を投げてくるので、選択肢をボタンでユーザーが選択する。性別（女性/男性）。大カテゴリ（服/靴/アクセサリ）とか。価格帯（~75/ 75/ 200/$200~）とかをユーザーに聞く。
複数選択肢を与えて、ユーザーに選ばせるタイプ。

* 顧客ロイヤリティ調査
* [LINE BOT API example LINE Login and NPS® - YouTube](https://www.youtube.com/watch?v=hitYt3ZK2p4)
動画では架空の花屋さんのアンケートをチャットボットを通して調査している一例。

* その日にあった情報をユーザーに送る。
ニュースAPIや天気APIを使って、アラートをユーザーに送る。
[Chat with CNN on Facebook Messenger and LINE - CNN Video](http://edition.cnn.com/videos/tech/2016/05/26/cnn-messaging-on-apps.cnn)
動画はCNNニュースのBotの例

* カスタマーサポートの例
* [KLM booking confirmation on Messenger - YouTube](https://www.youtube.com/watch?v=yZXZyrIY3RU)
航空会社の取り組み。メッセンジャーを使って、飛行機の予約の確認ができたり、遅延情報を取得する。
人手を返さずにすぐに返信ができる点は、顧客にとっても企業にとっても良い例。

* 予約購入系
花屋さんの購入フローの例。シナリオを上手く作りこめば、ユーザーがよりシンプルなオンラインショッピングを実現できる。
[Facebook Messenger 1-800-Flowers Bots - YouTube](https://www.youtube.com/watch?v=Fy_ne5KdGOI)

##2-3. りんなとパン田一郎の仕組み。
上のは基本はシナリオをこちらで用意して、それに沿って会話が進むタイプのBotが多かった。
そこで雑談もできる２つのボットの仕組みをもう少し深掘り。

* パン田一郎  
パン田一郎について、R社が言語処理と機械学習技術を使って開発した画期的なボット。
バイト探しできたり、天気を聞けたりするのは上で上げた例と同じであるが、
大きな違いとして雑談（フリートーク）が出来る点がある。仕組み自体はこんな感じらしい。

![img_lp_06.png](https://qiita-image-store.s3.amazonaws.com/0/49531/e2841f40-5fd1-dee3-5529-0320b70bb5ce.png)

1. まずはじめに、ユーザー入力文章をどのAPI・DBに投げるかを機械学習で振り分ける。ナイーブベイズなどの分類器を使えば実現可能かな？天気APIなら、天気の情報をユーザーに届ける。バイトならバイト管理情報のDB（？）に投げる。

2. 雑談APIに振り分けられた場合。
予めデータベース内に返信パターンをパン田一郎は１万件以上登録してるので、入力文章に一番適した返答を
データベース内から引っ張ってきて返す。どれも相応しい解答がデータベース内になかったら、
「それって何ですか...?分からなくてごめんなさい ...。」
「別のお話でもよかったら、また話しかけてくだ さいね...。( /ェΘ。) .。・゚・」
みたいな十数パターンをランダムに返す。

要するに、API・DBが複数あるので、事前にどのAPI・DBに投げるか？および、雑談DBに投げられた場合はどのように処理するか？の2点が加わっただけである。

また、雑談データベースを実装することによって、ユーザーのロイヤリティが向上したと論文上で述べられている。
[CiNii 論文 -  大規模対話システムの一実装と対話ログ傾向分析 (第5回対話システムシンポジウムおよび一般)](http://ci.nii.ac.jp/naid/40020291394)

* りんな  
基本はネット上のツイッターやインスタとかのリソースを使用している。（らしい）
アルゴリズムはword2vecやsequence to sequence を使用。
アルゴリズムに関しては以前のPFIのインターン成果発表で似たようなことを発表している方がいらっしゃるので、
これ見ればなんとなくはわかる。  
[Ustream.tv: ユーザー preferred: 2015インターンシップ最終発表, Preferred Show. コンピュータ](http://www.ustream.tv/recorded/74391829)（動画25:00〜）

##2-5.  そもそもchatbot APIとかってないの？ 
英語はわりとあるけど、日本語だと有名なのはDocomoの雑談APIとか？
[雑談対話 | docomo Developer support | NTTドコモ](https://dev.smt.docomo.ne.jp/?p=docs.api.page&api_name=dialogue&p_name=api_usage_scenario)
赤ちゃん風や女子校風もあるので、これとLINE Bot APIでりんなっぽいのはつくれます。
参考: [LINE BOTでりんな風の自分専用女子高生BOTを作ってみた (Python & Heroku) - Qiita](http://qiita.com/shiraco/items/58a33b878fa5f1180d75)

ユーザーローカルもリリースしてます。
[人工知能チャットボット(chatbot) : ユーザーローカルのチャットBotサービス](http://ai.userlocal.jp/)
雑談APIに加えて、ネコっぽいキャラクター、犬っぽいキャラクターなどキャラクターっぽい会話APIもある。

#3. 感想

Webサービスでの活用に関しては、ユーザー目線で上手くシナリオを作れるかで、ボットが成功するか分かれそう。
フリートークに関しては、データを持っている企業が強いので、Botに個性を持たせて差別化する必要がありそう。
これから各業界でBotが乱立するから、どんなBotが生き残るのかは楽しみですです。

#4. 参考文献
ーーーー対話の仕組みーーーー
[パン田一郎の対話ロジック | Advanced Technology Lab](http://atl.recruit-tech.co.jp/blog/2205/)
[LINEビジネスコネクトを活用し自然言語処理技術による会話を実現したLINE公式アカウント「パン田一郎」をリリース](http://atl.recruit-tech.co.jp/news/linepanda/)
[CiNii 論文 -  大規模対話システムの一実装と対話ログ傾向分析 (第5回対話システムシンポジウムおよび一般)](http://ci.nii.ac.jp/naid/40020291394)
テックレポート：会話ログを利用したチャットボット生成の試み
https://www.cyberagent.co.jp/techinfo/techreport/report/id=10651 (リンク切れ)
[TensorFlowで会話AIを作ってみた。 - slideshare](https://www.slideshare.net/tak9029/tensorflowai)
[de:code 2016：ついに明かされる「りんな」の“脳内”　マイクロソフト、「女子高生AI」の自然言語処理アルゴリズムを公開 - ITmedia NEWS](http://www.itmedia.co.jp/news/articles/1605/27/news110.html)

ーーーー活用例ーーーー
[Bot APIでチャットボットのビジネス活用のデモを作ってみた - 記事詳細 | ソーシャルとトレンドを読み解く buzzoo.jp](http://buzzoo.jp/social/article/4555)
[2016年のチャットBot入門・Botの最新事例編 | チャットボットのニュースメディア　BotEggニュース](http://news.botandegg.com/archives/335)
[地域活動でのLINE BOTの活用方法を考えてみた - AREApp](http://areapp.hateblo.jp/entry/linebot)
[Facebook F8で発表されたbots on Messengerの事例を見てみる（米EC『SPRING』） - Qiita](http://qiita.com/Yamotty/items/e15c6cffc036c2aab360)
[チャットBotで激変？企業のマーケティングはどう変わるのか〈事例あり〉 | BACKYARD](https://backyard.imjp.co.jp/articles/sakata_bot_201604)
[【第3回】Botの時代は、新たな戦いの幕開け – Business Produce Journal](http://www.dreamincubator.co.jp/bpj/2016/05/23/column_20160523/)
[LineBotの事例を22個まとめてご紹介 - MinatoのBlog](http://blog.minato.jp.net/entry/linebot)