TensorFlowのseq2seqでTwitter botの返答を増やそうとしたが上手くいかなかった
(この記事は以前Qiitaに掲載してみたものの転載です。内容がだいぶ古いので、手順が変わっている事も多々あるかと思います。)
先人に習って https://twitter.com/ha_ma の返答の種類を増やそうとしたが、上手くいかなかったので途中経過をメモとして残しておきます。
参考
TensorFlowのseq2seqでチャットボットが作りたい https://qiita.com/Pu-of-Parari/items/62d7226814a6aba98354
実行環境
DockerのJupyter-notebook( https://github.com/jupyter/docker-stacks )で実行してます。
TensorFlowは0.12が使われているので、conda install tensorflow==0.12.1とか入れてインストールしました。
GPUはこの環境では動きません。
実行内容
先述のページにある内容をほぼそのままコピペしてjupyter notebook上で動かしました。in_vocab_sizeとout_vocab_sizeを100000に増やしました。
data_utilsが足りないので、https://github.com/sanshirookazaki/chat/blob/master/data_utils.py をダウンロードしてjupyter notebookの実行ディレクトリにアップロードしました。また、./datas/vocab_{in|out}.txtを事前に作っておく必要があります(jupyterのコンソールでtouch ./datas/vocab_in.txtとか) 。
データはha_maのTimelineに流れたTweetのうちReplyのあるもの9万件です。8万件を訓練データ、約1万件をテストデータに分割しました。
実行結果
単独で実行させた結果、
> こんにちわ
yes
> ただいま
おかえり
> 起きねば
いいなー
> ITジャーナリスト
ん?
> 帰宅
おかえりなさーい
の様に上手く言ったのですが、後述の途中成果物で通常のTweetを入力としたところ、
安楽安楽純血純血純血純血純血純血純血純血純血純血純血純血純血純血純血純血純血純血安楽安楽安楽安楽安楽
とか
尽く禿禿禿禿爆睡爆睡爆睡爆睡爆睡爆睡爆睡爆睡爆睡爆睡爆睡爆睡爆睡爆睡爆睡爆睡爆睡爆睡爆睡爆睡
とか残念な結果になりました。
途中成果物
別途MySQLが必要だったりしてそのままでは動かないと思います。 https://github.com/showyou/hama_seq2seq
Google Colaboratoryでの実行
jupyter notebook上でも動くような代物なのでGoogle Colaboratoryでも動きます。
!pip install tensorflow==0.12.1
と入力して実行すればtensorflowの0.12が動きます。
ファイルのアップロード/ダウンロードは以下のページが参考になります。
【Tips】Google Colaboratory でPythonのファイル入出力演習 https://qiita.com/GandT/items/bd80fad2b8258ed87956
一つハマった点としては、upload関数は時間制限があるので、一定時間後にファイルを選択した場合アップロードされず、再度upload関数を実行しなければなりません。またColaboratory環境は一定時間が経つとノートブック以外全部消されるので途中で結果ファイルをダウンロードしなければなりません。
余談
GPUを使いたい場合、nvidia-dockerからjupyter notebookの環境を作るしかありません。
Nvidia-dockerでGPUコンテナの作成 https://qiita.com/uni-3/items/f5911aaaa538b33f370f
幸い、そのへんをまとめたDockerfileを@lambda_sakuraが作ってるので使うのも手でしょう。
最近使っているDeepLearning用の開発環境 – さくらんぼの技術備忘録 https://light-of-moe.ddo.jp/~sakura/diary/?p=510
2018/08/10現在Ubuntu18.04のCuda9.2のDockerだとTensorFlowが動かないので、Ubuntu16.04をホストに使うのが良いでしょう。
今回使ってるseq2seqは https://github.com/tensorflow/tensorflow/blob/r0.12/tensorflow/models/rnn/translate/seq2seq_model.py にあるのですが、そこで呼ばれている
tf.nn.seq2seq.embedding_attention_seq2seq
が見当たらないような気がします。どこにあるのでしょうか。v1.9だと https://github.com/tensorflow/tensorflow/blob/r1.9/tensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.py がそれっぽいのですが・・
今後の課題としては、一定以上まともな返答だけを自動で返せるような仕組みにできればいいなと考えています。