White scenery @showyou, hatena

If you have any comments, you may also send twitter @shsub or @showyou.

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 がそれっぽいのですが・・

今後の課題としては、一定以上まともな返答だけを自動で返せるような仕組みにできればいいなと考えています。

Ubuntu server 16.04LTSから18.04LTSに上げたら名前解決ができなくなった

Ubuntu server 16.04LTS から18.04LTSに上げたら名前解決ができなくなった。

/etc/resolv.confを見たところ、127.0.0.53と書かれており、なんじゃこりゃとなった。

/etc/resolv.confを直接書き換えたら名前解決できるものの、当然再起動すると127.0.0.53に戻ってしまう。

 

最近のUbuntuだとsystemd-resolveというのが使われていて、これが127.0.0.53を見ている様子。

 

nao-yu-ki-pc.blogspot.com

/etc/systemd/resolved.confの中の、

[Resolve]

DNS=

となっているところに

[Resolve]

DNS=[ルータのIP]

 

と書き換えて再起動したところ、繋がるようになった。

([ルータのIP]は8.8.8.8とかgoogleDNS指定するのもアリ。)

chromeでJupyter notebookのpython3が立ち上がんなくなった問題

最新のchromeに上げたからか、Jupyter notebookでpython3のノートを開くと「Kernel starting, please wait」のままから変わらなくなって、pythonのメソッド(import とかprintとか)が実行できなくなった。

  • safariだと問題なく実行できる
  • chromeでもシークレットウィンドウだと問題なく実行できる

のでchromeのアドオンが何かブロックしてるのかなぁ。adblock plusが怪しかったので無効化したけど変化なし。

あとは・・何だ?

 

念のためchromeのバージョン確認しにヘルプ開いたらchromeのバージョンが上がってたよ(67.ほにゃららから68.ほにゃらら)。上げたら上の現象が起きなくなった。

AtCoder Beginner Contest 103(ABC103)に参加しました

なんかAの問題が普段より難しかった気がする。。

あと今回はCの問題が解けた!でも力押ししてるのでいいのかコレ。。

 

A:なんとなくソートした順でいけばいいんじゃないかと思ったら通った。

Submission #2878158 - AtCoder Beginner Contest 103

B:文字列を順に回していって一致するかどうか見た。Aより頭使ってない。

Submission #2880472 - AtCoder Beginner Contest 103

C:どうも公倍数-1の時最大化すると踏んだので、公倍数を計算して余りを出した。

Submission #2883461 - AtCoder Beginner Contest 103

=>解説見たらわざわざ余り出さなくても-1だけすればよかった。。そりゃそうだよなぁ10^5の1000倍とかCだとオーバーフローするし。

他の人の回答見たら1行のもあった。

Submission #2887526 - AtCoder Beginner Contest 103

ので自分も直してみた。

Submission #2887758 - AtCoder Beginner Contest 103

AtCoder Beginner Contest 102(ABC102)に参加しました

C問題が解けない。。ここを超えないと中級なれないっすね。

A

gist7ab9a8d2223c1bdec7b8954ac0733480

B

gistb5c478c0e2cdf922fcd257d51e8ea035

Cはbの値がわからなくて断念。中間値でよかったとは。。

Submission #2778302 - AtCoder Beginner Contest 102