Twitterのみんなのやり取りをAIに学習させて自動リプライさせてみる
twitterのツイートとリプライ。この組み合わせは1つの会話として捉えることができます。 じゃあ、この会話データを大量にAIに学習させれば、AIはいい感じに返事できるようになるんじゃない? そんな軽い思いつきでちょっくら試してみます。
実装しようと調べたらあった
今回はGoogleが提供しているtensorflowを利用します。
TensorFlow™は、高性能数値計算用のオープンソースソフトウェアライブラリです。 柔軟なアーキテクチャにより、さまざまなプラットフォーム(CPU、GPU、TPU)、デスクトップからサーバークラスタ、モバイルデバイス、エッジデバイスに至るまで、計算を簡単に展開できます。 もともとGoogleのAI組織内のGoogle Brainチームの研究者やエンジニアによって開発されたもので、機械学習や深い学習を強力にサポートしており、柔軟な数値計算コアは他の多くの科学分野で使用されています。
環境構築のやり方はこちらをご覧ください。
どうやって作ろうか調べていたら、有志が既に開発されていました。ここはありがたく利用させてもらいます。
それでは必要なソースコードを取得します。
// 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
正常に処理が始まると取得状況が表示されます。
エンドレスに取得し続けるので止めたいときは「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日ほど放置した状態です。 値が収束しているので、ここで処理を止めます。
いきなりTwitterと連携する前にCLIでちょっと試してみましょう。
$ python predict.py
「>」が表示されたら「こんにちは」と入力してみます。
うん・・・。まあ、こんなもんでしょう。 とりあえずできたということにしてTwitterAPIと繋いでみます。
TwitterAPIの設定
まず必要なID、キーを取得するためにアプリを登録します。登録方法は下記をご覧ください。
取得した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アカウントにメンションもしくはリプライすると自動で返信してくれます!!
返信精度はともかくうまくいってますね。 今回は集めてきたデータをそのまま学習させてるんで、クリーニングして良いデータだけで学習させるともっといい結果になるはずです。 どんな学習データでもそうですが、現状クリーニングにめちゃくちゃ時間かかるので解決策が出ると今後もっと発展しそうです。
興味ある方はこちらのアカウントで試してみてください。
まだ何の役にも立たないプロダクトですが、確実に技術の進歩は感じますね。ではまた。