人生なんて暇つぶし

Webエンジニアの雑記ブログ。技術の話題はDApps開発、NEMアプリ開発がメイン。

移転しました。

約3秒後に自動的にリダイレクトします。

Twitterのみんなのやり取りをAIに学習させて自動リプライさせてみる

f:id:maroemon58:20180519193354p:plain twitterのツイートとリプライ。この組み合わせは1つの会話として捉えることができます。 じゃあ、この会話データを大量にAIに学習させれば、AIはいい感じに返事できるようになるんじゃない? そんな軽い思いつきでちょっくら試してみます。

実装しようと調べたらあった

今回はGoogleが提供しているtensorflowを利用します。

www.tensorflow.org

TensorFlow™は、高性能数値計算用のオープンソースソフトウェアライブラリです。 柔軟なアーキテクチャにより、さまざまなプラットフォーム(CPU、GPU、TPU)、デスクトップからサーバークラスタ、モバイルデバイス、エッジデバイスに至るまで、計算を簡単に展開できます。 もともとGoogleのAI組織内のGoogle Brainチームの研究者やエンジニアによって開発されたもので、機械学習や深い学習を強力にサポートしており、柔軟な数値計算コアは他の多くの科学分野で使用されています。

環境構築のやり方はこちらをご覧ください。

qiita.com

どうやって作ろうか調べていたら、有志が既に開発されていました。ここはありがたく利用させてもらいます。

github.com

それでは必要なソースコードを取得します。

// tensorflow-seq2seq
$ git clone https://github.com/higepon/tensorflow_seq2seq_chatbot.git

// twitter
$ git clone https://github.com/marsan-ma/twitter_scraper.git

ツイートとリプライのデータを取得

Twitterからツイートとリプライのセットを取得します。必要なライブラリは適宜インストールしてください。

$ cd twitter_scraper
$ python tweet.py --lang ja

正常に処理が始まると取得状況が表示されます。

Twitter取得状況
Twitter取得状況

エンドレスに取得し続けるので止めたいときは「Ctrl + C」で強制的に終了します。
データは多いほうがいいので、今回は行数にして13万行を取得しました。(めちゃくちゃ時間かかります)

何回かにわけて取得したので、分割されたファイルを結合します。

$ cat corpus/* > tweets.txt

TensorFlowの設定

Twitterから取得したデータを所定に位置に配置します。

$ mv twitter_scraper/tweets.txt tensorflow_seq2seq_chatbot/data/

config.pyの設定値(ディレクトリのパス)を環境に合わせて変更します。

$ vim config.py

// GENERATED_DIR、LOGS_DIRを変更

学習スタート

ようやく準備が完了したので学習を始めてみましょう。

$ python train.py

問題なければ進捗状況が表示されます。

学習状況
学習状況

GPU環境でも時間がかかるので気長に待ちましょう。

3日ほど放置した状態です。

学習状況2
学習状況2
値が収束しているので、ここで処理を止めます。

いきなりTwitterと連携する前にCLIでちょっと試してみましょう。

$ python predict.py

「>」が表示されたら「こんにちは」と入力してみます。

リプライテスト
リプライテスト

うん・・・。まあ、こんなもんでしょう。 とりあえずできたということにしてTwitterAPIと繋いでみます。

TwitterAPIの設定

まず必要なID、キーを取得するためにアプリを登録します。登録方法は下記をご覧ください。

www.maroemon.com

取得したID、キーを設定します。下記2ファイルに変数がベタ書きで書いてあるので編集します。

$ vim tweet_listener.py
$ vim tweet_replyer.py

// consumer_key、consumer_secret、access_token、access_token_secretを編集

試してみる

プログラムを2ファイル同時に実行します。

$ python tweet_lister.py
$ python tweet_repley.py

※2つ続けては実行できないので2つウィンドウを開くかscreenコマンドで対応しましょう。

準備が完了したのでやってみます。
Botアカウントにメンションもしくはリプライすると自動で返信してくれます!!

メンション通知
メンション通知
リプライ通知
リプライ通知

返信精度はともかくうまくいってますね。 今回は集めてきたデータをそのまま学習させてるんで、クリーニングして良いデータだけで学習させるともっといい結果になるはずです。 どんな学習データでもそうですが、現状クリーニングにめちゃくちゃ時間かかるので解決策が出ると今後もっと発展しそうです。

興味ある方はこちらのアカウントで試してみてください。

twitter.com

まだ何の役にも立たないプロダクトですが、確実に技術の進歩は感じますね。ではまた。

twitter.com