こんにちは。ななほしです。
最近、仕事柄ChatbotやAIって言葉をめちゃくちゃ聞きます。
Chatbotってなに?という人はQiitaの「Chat Bot(チャットボット)についてまとめてみたよ。」が個人的にわかりやすく纏まっていると思います。
簡単に言うなら、LINEとかで人工知能のような物と会話ができるものです。りんなちゃんとか有名。
そういえば、大学生の頃にTwitterで動く腐女子を模したBotを作ったなぁと思って、似たようなコンセプトで現代の技術で再開発してみました。
Contents
概要
とりあえずLINEで友達登録して遊んでみてください(笑)
会話履歴は、ななちゃんの学習のために保存されていますが、誰が友達になったか迄はわからないので安心して(?)ください。
使っている技術は、Dialogflow + Deeplearning4j + Mecab( mecab-ipadic-NEologd ) です。
GitHubにリポジトリも公開( nanahoshi/7chat )しました。誰か一緒にやりません??
技術構成
Dialogflow
Googleが買収したChatbotの開発プラットフォームです。
Qiitaのご参考:自然言語処理を容易に実装できるDialogflow(旧:API.AI) を使ってみる #dialogflow
Dialogflowで出来る事
ルールベースのチャットボットを開発と、各種フロントの会話サービスと連携出来ます。
ルールベースは、「文脈で○○の会話をしているな」となれば「○○の情報を返してあげる」という物ですね。
DialogflowではこのルールをIntentsというようで、ガシガシと定義できます。
作り方は、この文章が来たら「天気検索」だよってポチポチ設定していくだけ。
そうすると、次第に学習して意図した意味づけになってきてくれます。
その後は、自分でWebAPI(今はWebhookっていうらしいですね)を作って、テキストを返してあげます。
リクエストはこんな感じできます。
{"intent" : "weather.search", "parameters":{ "location" : "大阪", data : "2017/12/03" }
ななちゃんは、コンシェルジュを目指しているので他にもホテル検索や、グルメ検索がそのうち出来るようになるようです。
Mecab( mecab-ipadic-NEologd )
Mecabといえば、大学の研究やデータ分析の必須ツールですよね。日本語の形態素解析が出来ます。
最近LINEの中の人?が公開している辞書を使うと最新のネット用語だったり流行語にも対応出来るようになります。
GitHub : neologd/mecab-ipadic-neologd
自由な会話をするチャットボット(DeepLearningベース)だと必須になるんじゃないかな。投げ銭したいレベル。
Deeplearning4j
Deeplearning4jは、DeepLearningをするためのライブラリ群です。Java向け。
DeepLearningと聞くと、Pythonを使うのが一般的なのかもしれないけれど、ちょっと大きめの開発をしようとするならばPythonとかよりもJavaに軍配が上がるんじゃないかなと思います。
企業のシステムとかってほとんどがJavaで動いてるので、ビジネスで使われるのは今後重宝されるんじゃないかな。
Word2Vectorを使う
雑談機能の開発には、今流行のWord2Vectorを使っています。DeepLearning4Jとかのライブラリを使えば一瞬で使えるよ。
Qiitaのご参考:絵で理解するWord2vecの仕組み
Play framework
チャットボット開発にはWebhookの開発が必須です。使いなれたフレームワークで開発すると良いのでは。
今回はお仕事で使っていて、開発スピードの高さに惚れて使っている、Play frameworkを採用しました。
もっと流行れば良いのに。
処理の全体のフロー
学習モデル作成
データ収集
PythonからTwitterAPIをたたいてひたすらTweetを収集。
今回、若者言葉を教え込ませたかったので以下のアプローチで収集してみました。
若者言葉を使っているTweetを検索→その人のTweetを一括で収集。
若者言葉は以下のサイトを参考にしました。
最近の女子高生達がよくSNSで使う流行りの若者言葉ランキング53選【2017年版】
データ前処理
Pythonで不要な情報(URL, ユーザー名, 改行等々)を削除。
その後、MecabでTweetを原形の形で分かち書きする。
学習
前処理で作られた原形の分かち書きを元に学習済みモデルを構築する。
Core i5-4670 の環境で 1ヶ月集めたTweet150MBで大体2時間くらい。
会話文章生成
ユーザの入力したの文章を分かち書き、その単語からWord2Vectorで近しい言葉を起点にして文章を生成する。
ごめん、こっちはこれだけ。文章の連結にはマルコフ連鎖使っています。
もう少し勉強したらRNNとか使って文章生成出来るようにしたい。
IoT x AI x Chatbot = Smart Glass?
第三次人工知能ブームがやってきて、ライブラリとかも整備されている今、始める事ってとても簡単じゃった。
いつも使っている言語から、人工知能のAPIを叩いて結果を貰うだけなので。
最近人工知能を実装したとか言うニュースを見るけど、それもWatsonとかのAIクラウドからより業務に落ちた物が作られてきているなと思った。
また、Google Home, Amazon Echo, LINE ClovaというようなAIスピーカーも増えてきて音声UIが主流になるんだろうなって思う。
多分その先はSmartGlass x 音声UIという流れだろうか。
音声UIは、音声をテキストに書き起こした後このChatbotの処理に乗るので今後もこの分野の知識は役立ちそうですよね。
今後やりたい事
RNNで会話を構築したい。感情という概念を付け加えたい。
会話の流れでサラッと広告をながすねん。
皆が会話してくれるともっと賢くなります
今はTwitterの文章から勉強しているけど、今後はLINEの会話から文脈に会った回答をするように勉強させて行きます。
なので、暇つぶしにでも遊んでくれるとそれだけで勉強していくんよ。
そう、この会話を集めるのが人工知能で一番大切なのだ。。気長にやります。
ななほしさん初めまして。突然のメール失礼します!T.K.と申します。記事を拝見して感激したのでメールさせて頂きました。
私は今、AIの専門学校に通っています。AIを勉強するうちにチャットボットに興味を持ち始めまして、自然な会話が出来るチャットボットを作りたいのですがなかなかその方法を見つけられずにいます。
ななほしさんの制作されたチャットボットが私の作りたい理想のボットにすごく近いので、是非チャットボット作成のノウハウをご教授頂ければと思いご連絡させて頂きました。
もし宜しければご返信頂けると嬉しいです!お待ちしております。
T.K.さん。こんにちは。若原です。
(※本名だったのでイニシャルに変えて承認しています。)
まだまだ、僕も遊びで始めたばかりで専門家でもありません・・・が回答しますね!
実際作ってみての実感ですが、「自然な会話をするチャットボット」という観点ですと
実は、個人が手を出せるレベルには落ちてきていません。。
文脈によらず、前の入力に対して反射的にであれば可能なレベルです。
自然な会話については理論上は可能ですが膨大なリソース(GPU, CPU, メモリ)が必要になるため
現実的には「反射的レベル」が今到達できるところです。
費用がとても掛かります。費用が掛かるので実はななちゃんボットも今落としてしまっています。。
りんなちゃんも、会話が完全ではないですし、女子高校生というキャラ付けも
文脈が不自然でも「まぁかわいいからいっか!」と許してもらうためだと考えています。
このあたりは、量子コンピュータを個人でも触れるようになると解決できるようになるのかな?
根本のソフトウェア面での技術・知識は変わらないと踏んでいますので学ぶには今が良いと思います。
以上を踏まえて、今個人でも手を出せるレベルまでであれば少しはお力になれると思います。
今回遊んだ内容については、GitHubにアップしているので見てみて動かしてみて下さい。
別途メールしますね。