Chatbot と beam search

seq2seq で decoder から出力するときに beam search の方が出現確率が高いモノを選べるので結果が良くなるはず。beam search の詳細は karino2氏の解説。beam search 自体はシンプルで理解しやすいアルゴリズムなのだけど、Tensorflow のグラフでこれを書くのは非常に難易度が高い。使っている seq2seq library には loop_function という引数があってこれで一つ前の input を横取りしてあれこれできる。ということでずっとコードリーディングしてたんだがそれでも難しい。ということで試行錯誤しているうちに他の人が実装しているのを見つけてようやく動いた。 beam search のほうが結果が良いのかいまいち分からない。

>おはよう
normal:おはようございます
beam
0 おはよう ござい ます
1 お は あり
2 お は あり です 〜 ♪

>こんにちは
normal:はい(˘ω˘)
beam
0 はい ( ˘ ω ˘ )
1 はい ( ˘ ω ˘ ) スヤァ
2 はい ( ˙ㅿ˙ 。 .
3 はい ♡
4 はい ( ´ ω 。
5 はい 、 さ www
6 はい ( 笑

>ばいばいー
わろきちってんじゃんwww
normal:beam
0 がち やし ま ー ん
1 いや ま ー !
2 わろ ぶ や !
3 ほら
4 ネタ やし ぶ
5 ど ま ー
6 がち やし ま ーー
7 いつの間に ま ー
8 す
9 いつの間に ぶ
10 いつの間に やし ぶ うち
11 やらかし た ❤
12 現実 やし
13 ほんま やし ぶ ()
14 や ま ー

>(月曜日から)逃げちゃ駄目だ……!
normal;えぇこれは、、、
beam
0 なんで 進捗 は これ じゃ ねぇ ・ ・ ω !
1 え ぇ これ は 光 は 、 !
2 え ぇ これ は 嫌 )
3 なんで 進捗 おっ け ( ω !
4 なんで 進捗 は これ じゃ ぞ 〜

> 子供たちにつられて苦手なミニオンズ…(´・ω・`)w
normal:気をしてねー(˘ω˘)
beam
0 気 を し て ( ˘ つ ω -(´∀`; )
1 気 を すん な ( ˙ ˘ )
2 仕事 を すん や ( ˙ ω -(´∀`; )
3 気 を し て ねー 。 ( ^ ー ` ・ )
4 気 を し てる やろ ( ˙ ˘ ω ˘ ・) !
5 気 を し てる やろ ( ˙ ˘ ω ˘ ω ・ )
6 気 を し てる の だ よ )

> 中華そば醤油をいただきました💕お、おいしい〜😍大盛いけたかも?
normal: 追加ですよねwww
beam
0 追加 し まし た ☺
1 追加 です よ ☺ 
2 追加 です よ ね www

Style Transfer

Style Transfer を Stanford機械学習クラスの CS 20SI の課題で実装してみた。Style Transfer とは絵画の写真から作風を特徴として、別の画像にその作風を適用するもの。Style Loss と Content Loss の和を最小化する方向で画像を生成するのが面白い。しかしながら一方でレイヤーの構造とかもろもろ職人芸的で自分で一から構築できる自信がない。課題のコードはこの辺

その1




その2



Chatbot tweet listener と reply worker を分離した

prediction の際に時々落ちる。そのたびに落ちないように修正しているが、まだまだ未知のものがありそう。落ちてしまうと reply できないままに情報が失われてしまう。これを改善するためにプロセスを分けて

  • listener: user stream を listen して tweet を serialize して sqlite に保存
  • reply worker: sqlite から1つずつ処理して predict & reply

とするようにした。

「1手詰ハンドブック」完了

詰将棋を始めて続けることが今年の目標の一つ。1日3問ずつ解いてようやく1手詰ハンドブック終わった。当初の目的である脳内ワーキングメモリの増量効果はまだ感じていない。
次は 3手詰ハンドブック〈2〉 やる。

seq2seq の chatbot を日本語で動かしてみた

最近ずっと NN/CNN/RNN/LSTM などで遊んでいたのだけど Seq2Seq の encoder/decoder と word embeddings を理解したかったので Seq2Seq の chatbot を動かしてみた。Keras でフルスクラッチで書いていたのだけど上手く動かず。論文読んでもわからないところがあったので https://github.com/1228337123/tensorflow-seq2seq-chatbot を自分なりに読み解いてプロセスが別れてわかりやすいように書き換えた。同時に日本語に対応させて Twitter Bot として動くようにした。

会話例



seq2seq

Google 翻訳などでも利用されている seq2seq というタイプの Neural Networks を利用しています。入力も出力も時系列データ。例えば会話とか翻訳とかに使えます。入力側に Encoder、出力側に Decoder という 2個のネットワークがあるのが特徴です。


Layer Size=256, Num Layers=3, Max Vocabulary=50000 で training しました。twittertweet/reply のペアをおよそ 17 万個が training data です。

試してみたい人

https://twitter.com/higepon_bot に話しかけてみてください。Macbook Pro で動いているボットが返事をするかもしれません。(多分数日後にはオフラインになります)

動かしてみたい人

https://github.com/higepon/tensorflow_seq2seq_chatbot にあります。
Python3 や Tensorflow を入れて README.md のとおりにスクリプトを実行して下さい。Twitter の会話データ(=訓練データ)は自分で取得する必要があります。詳しくは README.mdを見てください。

Fluent Python を読んだ

Jupyter 上でよく Keras + Python を書くようになってきたので読んだ。omo さんが読んでいたから真似したともいう。Python に関する知識は「インデントの言語」、「numpy すごい」程度。見よう見まねでコードを書いていた状態だった。

読んで一番良かったのは Python というか Guido の思想がよく分かったこと。__ からはじまる一連の method をクラスに実装することですんなりと Python らしい動きのクラスになるさまはとても美しいと思った。


またタイミングよく Keras でメモリにのらないデータを Train するメソッドを使おうとしているときに、generator の章を読んでいて理解が深まった。


正直適当に読み進めた章もある。Coroutine、async IO、annotation、meta programming のあたりはだいたいこんな感じねでスキップした。必要になれば読み返せるし、他の言語でやったしね。

Fluent Python
Fluent Python
posted with amazlet at 17.04.15
Luciano Ramalho
Oreilly & Associates Inc
売り上げランキング: 14,522