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
Chatbot ときどき自発的に tweet するように
今日の Chatbot 変更。時々自発的に tweet するように。あとエラーハンドリングをまじめに。
「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 しました。twitter の tweet/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 のあたりはだいたいこんな感じねでスキップした。必要になれば読み返せるし、他の言語でやったしね。
Oreilly & Associates Inc
売り上げランキング: 14,522