Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

14対話bot発表資料

1,143 views

Published on

chainerを用いた対話ボットの作り方

Published in: Technology
  • Be the first to comment

14対話bot発表資料

  1. 1. Chainer を用いた対話ボット の作り方
  2. 2. 自己紹介  名前:宮本圭一郎  SIer で ERP 開発( C#,VB )  freelance 深層学習サービスの開発( python ) @miyamotok0105  https://www.facebook.com/keiichirou.miyamoto
  3. 3. 実装例紹介 対話で使われているモデル chainer での実装紹介 データの作り方紹介
  4. 4. 実装例紹介
  5. 5. Conchylicultor/DeepQA https://github.com/Conchylicultor/DeepQA
  6. 6. nicolas-ivanov/tf_seq2seq_chatbot Sequence-to-sequence model with attention multiple buckets multi-layer recurrent neural network as encoder, and an attention-based decoder https://github.com/nicolas-ivanov/tf_seq2seq_chatbot
  7. 7. macournoyer/neuralconvo https://github.com/macournoyer/neuralconvo
  8. 8. データと論文 Corpora ・ AlJohri/OpenSubtitles   Get a lot of raw movie subtitles (~1.2Gb) ・ Cornell Movie-Dialogs Corpus   ~ 40Mb after clearing out the technical data. Papers [1] Sequence to Sequence Learning with Neural Networks [2] A Neural Conversational Model https://github.com/nicolas-ivanov/seq2seq_chatbot_links
  9. 9. 対話で使われているモデル
  10. 10. キーワード word2vec RNN,LSTM A simple Seq2Seq Seq2seq with attention Encoder-decoder 翻訳 DSSM+RNN GRU Hierarchical Neural Network Latent Variable Hierarchical Recurrent Encoder-Decoder Google Neural Machine Translation(GNMT)
  11. 11. 文字をベクトル化する one-hot ベクトル、 bag of words ... 未知語に対応できない。次元が増えすぎる。 文脈ベクトル、 TF-IDF ... 文章全体に占める割合も重みとして考慮 Distributional 表現、 LSI, LDA ...LSI は特異値分解で次元圧縮。 LSI モデルに確率分布を付与 分散表現 (Word Embeddings) 、 word2vec ... 1層のニューラルネットで通常 200 〜 1000 次元程。 単語の定義によってベクトル化 で す ね 、 人 工 知 能 で す ですね =0 、 =1 人工知能 =2 です =3 one-hot
  12. 12. word2vec でベクトル化 king – man + woman = queen Continuous Bag-of-Words ( CBoW …) 前後の単語から対象単語を予測 Skip-gram... 単語からその周辺単語を予測 で す ね 、 人 工 知 能 で す 0 1 2 3 ですね =0.1 、 =0.2 人工知能 =10 です =0.5 単語の定義によってベクトル化
  13. 13. word2vec king – man + woman = queen EmbedID 、、、 one-hot ベクトル入力に効率のよい層。 embed_id 関数のラッパー。 one-hot ベクトルは文字に対しベクトル化すること。
  14. 14. RNN 問題:次に来る文字の予想 https://github.com/takaaki5564/demo_RNN?files=1
  15. 15. LSTM rnn のブロックを lstm に変更する rnn の多層にしたときの勾配消失爆発の問題を解決
  16. 16. LSTM の機能 メモリセル、、、過去の状態を記憶( ct ) 入力判断ゲート (input modulation gate) 、、、メモリセルに加算 される値を調整する。直近のあまり関係ない情報が影響してメ モリセルが持つ重要な情報が消失してしまうのを防ぐ。 忘却判断ゲート (forget gate) 、、、メモリセルの値が次の時刻で どれくらい保持されるかを調整 出力判断ゲート (output gate) 、、、メモリセルの値が次の層にど れだけ影響するかを調整
  17. 17. A simple Seq2Seq 各セルが RNN のセル、一般的には GRU セルや LSTM セル
  18. 18. Attention Seq2Seq 長い文字列に対応。 学習回数も減るらしい。 入力文字に h を保持。 入力と出力の内積をとる。 https://arxiv.org/abs/1409.0473
  19. 19. Hierarchical Neural Network Generative Models 映画対話の為のモデル
  20. 20. Latent Variable Hierarchical Recurrent Encoder- Decoder さらに長い文章に対応
  21. 21. Google Neural Machine Translation(GNMT) ゼロショット学習 ... ポルトガル語→英語、英語→ スペイン語を学習してポルトガル語→スペイン 語の翻訳が可能 Google’s Neural Machine Translation System
  22. 22. chainer での実装紹介
  23. 23. Chainer の主なクラス ・ Variable... 変数の値の変化を記録する。 ・ Function... ネットワークの管理を行う。 ・ Link... ネットワークのパラメータを持つ。 ・ Chain...Link をまとめたもの。 ・ Optimizer... ネットワークを操作する。 ・ Dataset.Iterator... 学習対象を辞書型で指定。 (<1.11.0) ・ Training.Trainer... エポック数などを指定 (<1.11.0) ・ Updater... 最適化手法の指定など。 (<1.11.0) ・ Extension... 途中経過の保存など。 (<1.11.0) モデル定義 変数の変化を記録 AdaGrad 等
  24. 24. 単純な順伝搬での実装の流れ データの事前処理 モデル定義 値予想 学習 モデル保存
  25. 25. データの用意      画像の場合 文字列の場合 010100001...001011.1
  26. 26. モデルの定義 インプットセル アウトプットセル 隠れ層のセル
  27. 27. 値の予想 wx+b=u z=f(u) y= 正解 インプットセル アウトプットセル 隠れ層のセル x= 入 力 z= 出 力 w= 重 み f= 活 性 化 関 数 順伝搬
  28. 28. 学習 偏微分で勾配を求め て重み更新 インプットセル アウトプットセル 隠れ層のセル x= 入 力 z= 出 力 w= 重 み f= 活 性 化 関 数 誤差逆伝搬
  29. 29. 重みの保存 w を保 存 インプットセル アウトプットセル 隠れ層のセル x= 入 力 z= 出 力 w= 重 み f= 活 性 化 関 数
  30. 30. seq2seq の実装について Word2vec 層 LSTM 層 出力層
  31. 31. モデルを定義 embedID ... 分散表現の層 LSTM ... 次の文章予想 LSTM 層 EmbedID 層 EmbedID 層 出力層
  32. 32. 値の予想 原文と目的文を格納
  33. 33. 値の予想 EmbedID 層でベクトル化
  34. 34. 値の予想 LSTM で伝搬させて 次の値を予想
  35. 35. 誤差の計算 誤差関数を使う
  36. 36. 学習 入力値を逆方向に変換して精度をあげている。
  37. 37. データの作り方紹介
  38. 38. データの集め方 git clone https://github.com/miyamotok0105/ai_chatbot.git cd chat_data twiiter developer に登録してアクセスキーを取得 python get_repray.py temp.csv に貼り付け python save_conversation_data.py 対話文が conversation.db に保存される

×