4月

  • 4/4 chatbot training 中
    • 4/5 あまり収束しないので調べている
    • 4/5 load してみて結果を見る-> だめ
    • 4/5 chatbot プロジェクトのパラメータ。loss function 等見比べる
    • 4/6 simple rnn じゃないやつも同時に動かしてみる
    • 4/7 ↑動かしてる
    • 4/8他の課題も平行してやらないと時間の無駄
    • 4/8prediction を書き換える。Y の一個目を X に持っていく感じする。
    • 4/8 9 の chatbot のときのほうが良かったような。
  • English chatbot
    • 4/9 attention 使ったががまだ converge してない
    • 4/9 word2vec の window は tweetsのかたまりについて =15 でやったらぜんぜんだめだ。wikipedia とかにするべき。学習やり直す
      • 4/9でも待てよ。line ごとにやるなら OK だね。
      • 4/9window size は by a sequence だから大丈夫。LineSequence
    • 4/9 上が勘違いだったから不要word2vec を別から用意するならば unk/eos はどこにいるべきなのか?
    • 4/9 上が勘違いだったから不要 wikipedia 対応
    • 学習やり直し
  • Japanese chatbot
    • 4/9 勘違いだった word2vec の window をどうにかしないといけない。
  • 4/10 Japanese 整理すべき
  • 4/11 cached file は ~/tmp にすべき
  • 4/11 認証
  • 4/17 環境整備
    • 4/17 it's 設定変更確認
    • 4/17 myworld 設定
    • 4/17 動作確認
  • Chatbot
    • 4/12 英語版の元ネタのパラメータを再度確認 (vocab size や layer など optimizer も)
      • 4/13 xvocab_size, yvocab_size = 8002, emb_size=1024, seq_len = 20 for both x and y, num_layers=3
      • 4/14 emb_size=1024, seq_len = 20, hidden_dim=100 num_layers = 3 and mse/cross_category, adam. cross_category はそもそも output がちがう
      • 4/14 2000 samples を many epoch で学習して converge するかどうかが重要だらしい
      • 4/15 4000 data file は converge した
      • 4/16 8000 は converge した
      • 4/17 16000 と 32000 converge したが入力に対して同じものを返すようになってしまった
    • 4/14 自分のと照らし合わせる
  • TensorFlow
  • https://github.com/1228337123/tensorflow-seq2seq-chatbot
    • 4/18 clone する
    • 4/18 train
    • 4/18 test
    • 4/18 test データフォーマットを調べる
      • vocaburary file 一行に一つの単語(文書ファイルを読んで tokenize して頻度が小さい順に並べる。そのときPAD, GO, EOS, UNK を先頭にする。そして一行に人単語。数字は0 で置き換える場合もある)
higepon-mbp% head ../working_dir/vocab20000.dec
_PAD
_GO
_EOS
_UNK
.
'
,
I
you
    • 4/18 enc/dec の違い
      • train.enc は質問文。train.dec は答えが1行ごとに書いてある、
    • 4/18 id2000 ファイル
      • word を vocab の index にする
    • 4/18 分解してコードを見ていく

日本語で動かす

  • 4/19 tweet crawl 再開
  • 4/19 enc dec に分けるスクリプトを書く
  • 4/19 現在の data/ dir を rename
  • 4/20 working dir を空に。
  • 4/20 tokenizer だけ書き直す
  • 4/21 train
  • めちゃめちゃうまくいった

notebook で動かす

bucket まとめる
_buckets = [(5, 10), (10, 15), (20, 25), (40, 50)]

bucket は [I, O] で

  • I は max input length
  • O は max output lengt

もし Input/Output がどちらかのより長かったら次の bucket に push される。
長さが余る部分は padding されるとのこと。PAD_ID がそれ

read_data では bucket が n 個あったら。n個のリスト data_set を返す。
data_set[n] は list of (source, input) で n 番目の bucket で処理されるべきデータ。

batch 処理では一つの bucket がまとめて処理される。理由は後で調べる。

4/25 現在 training 中
4/25 tweet bot の準備をすすめる

batch まとめる

encoder_inputs, decoder_inputs, target_weights = model.get_batch(train_set, bucket_id)
特定の bucket を選んで。その中から batch_size のデータを選ぶ。
そして長さを合わせるために input は input + pad * 足りない長さ。output は GO + output + pad * 足りない長さにする

batch_encoder_inputs は batch_size * encode_size の配列で1行が一つの文の id の列。
btch_decoder_inputs も同様。
batch_weights は batch_size * decoder_size 。各値はその文字列中の次の文字。もし次の文字が pad なら 0 にする。

decode まとめる
  • input を sentence ids に
  • 1行の getbach
  • output を [] にして step して forward で output を得る
次の一手
  • fluent になる、その過程としてアウトプットする(code & blog)。どちらも理解が深まる。
  • 抽象化はあとでまずは動くものをつくる

具体的な step は

  • github repository
  • 謝辞 to original
  • コメントたくさん
  • data_process.py
  • train.py
  • decode.py
  • few abstraction to config
  • make it tweet bot

できれば tweet bot にする

  • todo
  • beam search
  • prediction check
  • get Japanese data

future milestones

images