NN論文を肴に酒を飲む会#4
A Deep Reinforcement Learning
Chatbot
arXiv:1709.02349
自己紹介
• 名前
• 吉永 尊洸(よしなが たかひろ)
• @tekenuko
• 仕事
• データ分析コンサルタント
• マーケティング、製造系、教育研修講師とか
• 自然言語処理は1年くらい前にWord2Vecを使ったくらい
勉強する良い機会だと思ったので申し込んでみた
• 元素粒子論(博士)
• 趣味
• リアル脱出ゲーム
今回の論文:MILABOT
• Amazonのソーシャルボットのコンペ出場チームの報告
会話モデル
22個
応答の候補を
生成
会話の履歴
ASR信頼度
優先応答か
応答を返す
応答の候補の
最適化
応答を返す
※ASR(Automatic Speech Recognition system)信頼度:音声認識システムの信頼度
強化学習で応答の
候補を選択
百科事典的な論文です
会話モデル
22個
応答の候補を
生成
会話の履歴
ASR信頼度
優先応答か
応答を返す
応答の候補の
最適化
応答を返す
強化学習で応答の
候補を選択
※ASR(Automatic Speech Recognition system)信頼度:音声認識システムの信頼度
テンプレート型から
seq2seqまで様々な
モデルを活用
複数の強化学習アル
ゴリズムを試して
応答を最適化
Contents
• Amazon Alexa Prize
• MILABOTの大まかな仕組み
• 実験結果
• まとめ
Amazon Alexa
• クラウドベースの音声認識サービス
Alexa. Let’s chat! ※
音声→テキスト
テキスト→処理
音声
開発者が色々
実装可能
※コンペ期間中に会話ができるようになっている
Amazon Alexa Prize
• ソーシャルボットの開発コンペ
• 対象:大学の研究者チーム
• 賞金:トータル250万$
• 優勝:50万$(20分間わかりやすく人間と対話できたら+100万$)
• 優勝チームのボットはAlexaに実装されるかも
• スポンサードチーム(約10チーム):開発予算として10万$支給
• 審査方法
• 一般的なトピック(政治/スポーツ/芸能など)に関しての対話の性能を競う
• 要は雑談できるか
• スケジュール
• 2016.09 コンペ開始 20か国100チーム以上
• 2017.04 Amazon Echoで実験 12チーム(支援)+6チーム(自腹)
• 2017.08 ファイナリスト決定 3チーム
• 2017.11 優勝者決定
Contents
• Amazon Alexa Prize
• MILABOTの大まかな仕組み
• 実験結果
• まとめ
①入力
会話モデル
22個
応答の候補を
生成
会話の履歴
ASR信頼度
優先応答か
応答を返す
応答の候補の
最適化
応答を返す
※ASR(Automatic Speech Recognition system)信頼度:音声認識システムの信頼度
強化学習で応答の
候補を選択
①入力(想定)
What is your name?※
テキスト
・会話の履歴
「What is your name」
・音声認識の信頼度
閾値以下の場合、言ったことを
もう一度言ってもらう設定
※論文の言語処理の前提は英語だと思われるので、英語の会話
②応答の候補を生成
会話モデル
22個
応答の候補を
生成
会話の履歴
ASR信頼度
優先応答か
応答を返す
応答の候補の
最適化
応答を返す
※ASR(Automatic Speech Recognition system)信頼度:音声認識システムの信頼度
強化学習で応答の
候補を選択
②応答の候補を生成
• 22種類のモデルのアンサンブル
• 用途別:映画/政治/検索/...
• 手法別:テンプレート/LSTM/機械学習
応答モデル例
• テンプレート型
• 辞書に登録されたテンプレートに応じて会話(いわゆる人工無脳)
• 代表例
• Alicebot
• Artificial Intelligence Markup Language(AIML) テンプレートに応じて会話
• ほぼデフォルトだが、少し調整したり、優先応答を人力でいくつか定義
• 名前を聞かれたら”I am an Alexa Prize Socialbot”と答える、など
• Elizabot(イライザ)
• 初期の対話型bot
• 人称はうまく変換するらしい(質問でI→応答でyouを使う)
• Siriと仲良し
応答モデル例
• テンプレート型
• 辞書に登録されたテンプレートに応じて会話(いわゆる人工無脳)
• 他の使用例
• Initiatorbot
• 会話を始めたり質問する際に使用(調子はどう?、など)
• Storybot
• テンプレートにある童話について会話する
• Evibot
• 質問への解答に若干特化
• BoWMovies
• 映画の会話に若干特化
• 辞書(or 検索)
応答モデル例
• 検索ベース(NN or 機械学習)
• 検索結果をもとに応答を決定
• 論文での使用例
• VHRED models [Serban et al. 2017]
• Latent variable hierarchical recurrent encoder decoder
• データセットはRedditのジャンルごといろいろ
• 政治/ニュース/スポーツ/映画 and サブタイトル/ワシントンポスト
• SkipThought Vector Models [Kiros et al. 2015]
• SkipThought
• 辞書はBookCorpus dataset
• Dual Encoder Models [Lowe et al. 2015]
• Dual Encoder
• データセットはRedditの政治/ニュース
応答モデル例
• 検索ベース(NN or 機械学習)
• 検索結果をもとに応答を決定
• 論文での使用例
• Bag-of-words Retrieval Models
• ドナルド・トランプのtwiiterを使って応答
• 検索エンジン利用(コンペ時は実装されていない)
• 検索エンジンの結果を利用
• Bi-directonal LSTM
• 学習はMicrosoft Marco Dataset
• BowEscapePlan
• 会話キープしたいけど、他のモデルで良い応答がないときに利用
• 「もう一度お願い」, 「わかりません」
応答モデル例
• 会話生成
• GRUQuestionGenerator
• GRUを利用
• データセットはRedditの政治/ニュースの疑問文
• 質問のテンプレートを作成
③応答の候補の最適化
会話モデル
22個
応答の候補を
生成
会話の履歴
ASR信頼度
優先応答か
応答を返す
応答の候補の
最適化
応答を返す
※ASR(Automatic Speech Recognition system)信頼度:音声認識システムの信頼度
強化学習で応答の
候補を選択
強化学習
• 与えられた「環境」における価値 or 収益を最大化するように
「エージェント」を学習
• エージェント
– ゲーム:プレイヤー
– 工場:ロボット
• 環境とアクセス
– 直接
– インターフェース越し
• 環境
– ゲーム:残りHPや時間などの状況
– ロボット:位置、速度など
行動(応答)
観測・報酬
chatbot 会話の履歴
強化学習
• 記法
• 時間(1往復ごとに1ずつ増加)
• 𝑡 = 1, … , 𝑇
• 環境
• 状態:会話履歴:ℎ 𝑡
• 行動
• モデルによる応答(候補K個):𝑎 𝑡
1
, … , 𝑎 𝑡
𝐾
• 方策
• ある状態のときにある行動する条件付き確率𝜋 𝜃 𝑎 𝑡
𝑘
|ℎ 𝑡
• 報酬
• 𝑟𝑡
• 強化学習のゴール:累積報酬(収益)を最大化する行動を見つける
• 𝑅 = 𝑡=1
𝑇
𝛾 𝑡 𝑟𝑡 , 𝛾 ∈ (0, 1]
強化学習の種類
• 価値反復
• 行動価値関数𝑄 𝜃 ℎ 𝑡, 𝑎 𝑡
𝑘
(収益の期待値)を更新して最適方策を探す
• 方策勾配
• 𝜋 𝜃 𝑎 𝑡
𝑘
|ℎ 𝑡 を直接更新して最適方策を探す*
• 𝜋 𝜃 𝑎 𝑡
𝑘
|ℎ 𝑡 =
𝑒
𝜆−1 𝑓 𝜃 ℎ 𝑡,𝑎 𝑡
𝑘
𝑎 𝑡
′ 𝑒 𝜆−1 𝑓 𝜃 ℎ 𝑡,𝑎 𝑡
′ , 𝑘 = 1, … , 𝐾
• 𝑓𝜃 ℎ 𝑡, 𝑎 𝑡
𝑘
:スコア関数(DNN)
最適化後の行動選択
• 𝜋 𝜃 ℎ 𝑡 = argm𝑎𝑥
𝑘
𝑄 𝜃 ℎ 𝑡, 𝑎 𝑡
𝑘
or argm𝑎𝑥
𝑘
𝑓𝜃 ℎ 𝑡, 𝑎 𝑡
𝑘
*期待収益と呼ばれる関数の最小化問題
価値関数とスコア関数の構造
Input
Layer
Hidden
Layer
Hidden
Layer
AMT
Classification
Layer
Score
Output
Layer
会話の
履歴ℎ 𝑡
応答の
候補𝑎 𝑡
𝑘
1458次元
500次元
20次元 5次元 1次元
ReLU SoftmaxLinear Linear
特徴量例:
・応答のWord embedding(W2V)の平均
・会話の履歴のラストX会話のWord embedding
・履歴と応答の類似度
・応答の種類/ポジネガ
・…
・ 𝑓𝜃 ℎ 𝑡, 𝑎 𝑡
𝑘
・ 𝑄 𝜃 ℎ 𝑡, 𝑎 𝑡
𝑘
学習データ
• 前VerでAlexaユーザから収集した4340会話データ+5段階評価
• クラウドソーシング(AMT)による応答評価20万個
3会話 候補(汚い言葉は***などで前処理済み)
人手で評価
架空のAMTの画面
学習約14万、検証約2万、テスト約2万
スコアは5段階評価:
1:Very Poor, 2:Poor, 3:Acceptable,
4:Good, 5:Excellent
学習データ
• 前VerでAlexaユーザから収集した4340会話データ+5段階評価
• クラウドソーシング(AMT)による応答評価20万個
3会話 候補(汚い言葉は***などで前処理済み)
人手で評価
架空のAMTの画面
学習約14万、検証約2万、テスト約2万
スコアは5段階評価:
1:Very Poor, 2:Poor, 3:Acceptable,
4:Good, 5:Excellent
Supervised AMT
• クラウドソーシングによるデータから教師あり学習
• 各応答に対してスコア𝑓𝜃 ℎ 𝑡, 𝑎 𝑡
𝑘
が予測可能になる
Input
Layer
Hidden
Layer
Hidden
Layer
AMT
Classification
Layer
Score
Output
Layer
会話の
履歴ℎ 𝑡
応答の
候補𝑎 𝑡
𝑘
1458次元
500次元
20次元 5次元 1次元
ReLU SoftmaxLinear Linear
目的変数
重み固定
[1, 2, 3, 4, 5]
テスト
• ランダムに候補を選択 or 伝統的なbotのみの場合と比べて評価
の低い応答の選択が減り、評価の高い応答の選択が増えた
学習データ
• 前VerでAlexaユーザから収集した4340会話データ+5段階評価
• クラウドソーシング(AMT)による応答評価20万個
3会話 候補(汚い言葉は***などで前処理済み)
人手で評価
架空のAMTの画面
学習約14万、検証約2万、テスト約2万
スコアは5段階評価:
1:Very Poor, 2:Poor, 3:Acceptable,
4:Good, 5:Excellent
報酬設定
• 方策勾配:2パターン
• Off-policy REINFORCE:会話終了時の評価𝑅 𝑑を利用
• Off-policy REINFORCE Learned Reward:報酬関数 𝑔 𝜙 ℎ 𝑡
𝑑
, 𝑎 𝑡
𝑑
を利用*
• 価値反復
• Supervised AMTや方策勾配の結果をもとに環境モデルを生成(省略)
𝑟𝑡 =
0
𝑅 𝑑
𝑇 𝑑
or 𝑔 𝜙 ℎ 𝑡
𝑑
, 𝑎 𝑡
𝑑
(次時点でのユーザの反応にネガティブな言葉がある場合)
(それ以外)
*別途、回帰モデルを構築:Supervised Learned Reward
𝑟𝑡 = 𝑃 𝜃 𝑦|ℎ 𝑡, 𝑎 𝑦
𝑇
[−2.0, −1.0, 0.0, 1.0, 2.0]
Supervised AMTのNN
を用いて確率を出力
方策勾配
• 会話データを用いて強化学習
• 初期値はSupervised AMTのものを利用
• 前Verのときの会話履歴+応答を評価することでスコアを改善
Input
Layer
Hidden
Layer
Hidden
Layer
AMT
Classification
Layer
Score
Output
Layer
会話の
履歴ℎ 𝑡
応答の
候補𝑎 𝑡
𝑘
1458次元
500次元
20次元 5次元 1次元
ReLU SoftmaxLinear Linear
過学習防止のため
ここだけ学習
価値反復
• 会話データを用いて強化学習
• 初期値はSupervised AMTのものを利用
• 前Verのときの会話履歴+応答を評価することでスコアを改善
Input
Layer
Hidden
Layer
Hidden
Layer
AMT
Classification
Layer
Score
Output
Layer
会話の
履歴ℎ 𝑡
応答の
候補𝑎 𝑡
𝑘
1458次元
500次元
20次元 5次元 1次元
ReLU SoftmaxLinear Linear
過学習防止のため
ここだけ学習
事前結果
• Supervised AMTと比較して
• Q-learningは大きく性能変わらない
• Off-policy REINFORCEは性能が高い
対話ごとの平均
1:Very Poor, 2:Poor, 3:Acceptable,
4:Good, 5:Excellent
応答モデルの選択頻度
AliceBot以外も
そこそこ選択されうる
→多様な応答
Contents
• Amazon Alexa Prize
• MILABOTの大まかな仕組み
• 実験結果
• まとめ
A/Bテスト
• Alexaユーザとの対話で、ランダムに方策を割り当てて実験
• コンペ期間に2回実施
• 第一回:2017/07/29~2017/08/06
• 第一回:2017/08/06~2017/08/13
A/Bテスト結果
• 第一回
• Q-learningが平均スコアが高かった
• 第二回
• 方策勾配の方がQ-learningより結果が良かった
1:Very Poor, 2:Poor, 3:Acceptable,
4:Good, 5:Excellent
Discussion
• 全体では、Q-learningが最も平均スコアが高かった
• スコア3.15:平均的にAcceptableより上
• ファイナリストたちとそう変わらないスコア
• MILABOTはファイナリストにはならなかったけど
• 第一回と第二回で方策勾配とQ-learningの順序が変わっている
• 第二回はコンペの終盤 and 新学期開始
• Alexaユーザは他のchatbotにも触れていることで、見る目が厳しくなった
• 子供と比較して間違いに関して許容度が低い成人ユーザの割合が多い
ユーザの質が変わったことが原因?
Contents
• Amazon Alexa Prize
• MILABOTの大まかな仕組み
• 実験結果
• まとめ
Summary
• MILABOT
• Amazon Alexa Prizeのコンペのセミファイナルのチームのchatbot
• MILABOTの特徴
• 22の応答生成モデルによる応答候補生成
• 強化学習による応答候補の最適化
• MILABOTの性能
• 平均的に”Acceptable”より上の応答をする
• ファイナリストのチームと匹敵
モデルのアンサンブル+強化学習はインタラクティブな対話に対して有効な方法
Backup
Sequence to Sequence
• 可変長の入力に対して可変長の出力を返すNN
• encoder(入力)→隠れ層→decoder(出力)
• ユニットはLSTMやGRUが利用される
botでは、前の会話から次の応答が生成されると期待
入力の際は順序を逆にする
VHRED
• Latent variable hierarchical recurrent encoder decoder
• 可変長の文章生成モデル
• 潜在変数が存在
• Variational Autoencoderで学習
botでは、現在の会話履歴と会話履歴の類似度によって
データセットから候補の応答を5つ検索、20の応答の
log-likelihoodをVHREDで計算し、最も高いものを返す
※Word embeddingはGloVe
SkipThought
• 教師なし学習で文のベクトル化を行う
• 入力:i番目の文(ベクトル化は別途行う)
• 出力:i-1番目とi+1番目の文
1. encoderに入力となる文を最後まで入力
2. encoderの学習により獲得した隠れ層の値を入力文のベクトルとして使用
3. decoderに入力文の引数と、生成する文の一つ前の単語を入力(最初の単語の場合はeos 記号を入力)
4. decoderのこの時の隠れ層の値と、出力される単語に対応する語彙ベクトルの内積を求め、この値をその時点での該当単語の
出力される確率として扱う
5. 出力文の最後まで 3−4 の操作を繰り返し、単語生成確率の和を求め、この値が最大化されるようにencoderとdecoderのパラ
メータを学習する
ユニットはGRU
botでは、あらかじめトリガーフレーズを定義して
おき、会話履歴の最後が一致したら優先応答を返す
(たぶん)
GRU
• LSTMを簡略化したようなユニット
• 忘却ゲートと入力ゲートを「更新ゲート」にまとめる
強化学習の流れ
流れ
1. 応答スコア(応答の良さ)を求める:DNN
• 3.では、1.と同じ構造のDNNを使用(初期重みは1.の結果)
2. 報酬モデル
• 予測スコアといくつかの特徴量で応答スコアを改善
3. 強化学習
• スコア関数
• 実際のラベル or 報酬モデルの出力を報酬として方策勾配
• 行動価値関数
• 状態遷移モデルを構築したうえで価値関数の更新を行う
報酬モデル
• 予測スコアや会話に関する特徴用を入力として、スコアを改善
• 𝜙 = argm𝑎𝑥
𝜙
𝑑 𝑡 𝑔 𝜙 ℎ 𝑡
𝑑
, 𝑎 𝑡
𝑑
− 𝑅 𝑑 2
• 𝑑:会話のラベル
• 𝑔 𝜙 ℎ 𝑡
𝑑
, 𝑎 𝑡
𝑑
:線形回帰モデル
• 特徴量:23個
• 応答スコアモデルの予測値
• 応答が一般的か
• 疑問詞があるか
• …
• データセット:約4340会話
• 学習:3255, テスト:1085
• 𝑅 𝑑
:Alexaを利用してるユーザが会話終了時につけたスコア
クラウドソーシングでのタグ付けと
実世界のユーザのスコアの違いを補正

A Deep Reinforcement Learning Chatbot

Editor's Notes

  • #4 会話に対して、22個の応答モデルで応答の候補を生成 優先的に応答(内部で数値化されている)するものがあればそれを返す 優先応答がなければ、強化学習で学習したポリシーで選択 Amazonのコンペのファイナリストたちに近い性能が出せた(ほかのチームの性能は不明だけど)
  • #6 チャットボット:https://qiita.com/kanottyan/items/2783bf91c8ea6a8a4ce8
  • #7 チャットボット:https://qiita.com/kanottyan/items/2783bf91c8ea6a8a4ce8
  • #8 チャットボット:https://qiita.com/kanottyan/items/2783bf91c8ea6a8a4ce8
  • #9 チャットボット:https://qiita.com/kanottyan/items/2783bf91c8ea6a8a4ce8
  • #15 BowMovies : match tag的なものを作っている:W2Vを利用
  • #16 Serban 2017 VAEを使っている SkipThoughty ベクトル化の方法 TFはTerm Frequencyで、それぞれの単語の文書内での出現頻度を たくさん出てくる単語ほど重要 IDFはInverse Document Frequencyで、それぞれの単語がいくつの文書内で共通して使われているか いくつもの文書で横断的に使われている単語はそんなに重要じゃない TF-IDF = TF / log(DF) ベクトル化はGloVe:https://www.slideshare.net/naoakiokazaki/20150530-jsai2015
  • #18 GRU:RNNのユニットの一種、LSTMの簡略版、入力ゲートと忘却ゲートを更新ゲートというもので統合 マルコフ連鎖で会話生成は、使われていないようだ
  • #27 スコアの低いものは選ばないようにすると評価の低い応答をすることが少なくなる RMSEが1.1程度
  • #33 スコアの低いものは選ばないようにすると評価の低い応答をすることが少なくなる RMSEが1.1程度
  • #34 チャットボット:https://qiita.com/kanottyan/items/2783bf91c8ea6a8a4ce8
  • #36 誤差は95% Dialoue Lengthは2で割るとターン数
  • #37 誤差は95%
  • #38 チャットボット:https://qiita.com/kanottyan/items/2783bf91c8ea6a8a4ce8
  • #39 誤差は95%
  • #46 RMSEが1.1程度 Very Poorはrandomと比較して