Deep Reinforcement Learning for Dialogue Generation
本文將會分享一篇深度增強學習在bot中應用的文章,增強學習在很早的時候就應用於bot中來解決一些實際問題,最近幾年開始流行深度增強學習,本文作者將其引入到最新的bot問題中。paper的題目是Deep Reinforcement Learning for Dialogue Generation,作者是Jiwei Li,最早於2016年6月10日發在arxiv上。
現在學術界中bot領域流行的解決方案是seq2seq,本文針對這種方案拋出兩個問題:
1、用MLE作為目標函數會導致容易生成類似於「呵呵呵」的reply,grammatical、safe但是沒有營養,沒有實際意義的話。
2、用MLE作為目標函數容易引起對話的死循環,如下圖:
解決這樣的問題需要bot框架具備以下的能力:
1、整合開發者自定義的回報函數,來達到目標。
2、生成一個reply之後,可以定量地描述這個reply對後續階段的影響。
所以,本文提出用seq2seq+增強學習的思路來解決這個問題。
說到增強學習,就不得不提增強學習的四元素:
- Action
這裡的action是指生成的reply,action空間是無限大的,因為可以reply可以是任意長度的文本序列。
- State
這裡的state是指[pi,qi],即上一輪兩個人的對話表示。
- Policy
policy是指給定state之後各個action的概率分布。可以表示為:pRL(pi+1|pi, qi)
- Reward
reward表示每個action獲得的回報,本文自定義了三種reward。
1、Ease of Answering
這個reward指標主要是說生成的reply一定是容易被回答的。本文用下面的公式來計算容易的程度:
其實就是給定這個reply之後,生成的下一個reply是dull的概率大小。這裡所謂的dull就是指一些「呵呵呵」的reply,比如「I don』t know what you are talking about」等沒有什麼營養的話,作者手動給出了這樣的一個dull列表。
2、Information Flow
生成的reply盡量和之前的不要重複。
這裡的h是bot的reply表示,i和i+1表示該bot的前後兩輪。這個式子表示同一個bot兩輪的對話越像reward越小。
3、Semantic Coherence
這個指標是用來衡量生成reply是否grammatical和coherent。如果只有前兩個指標,很有可能會得到更高的reward,但是生成的句子並不連貫或者說不成一個自然句子。
這裡採用互信息來確保生成的reply具有連貫性。
最終的reward由這三部分加權求和計算得到。
增強學習的幾個要素介紹完之後,接下來就是如何模擬的問題,本文採用兩個bot相互對話的方式進行。
step 1 監督學習。將數據中的每輪對話當做target,將之前的兩句對話當做source進行seq2seq訓練得到模型,這一步的結果作為第二步的初值。
step 2 增強學習。因為seq2seq會容易生成dull reply,如果直接用seq2seq的結果將會導致增強學習這部分產生的reply也不是非常的diversity,從而無法產生高質量的reply。所以,這裡用MMI(Maximum Mutual Information,這裡與之前Jiwei Li的兩篇paper做法一致)來生成更加diversity的reply,然後將生成最大互信息reply的問題轉換為一個增強學習問題,這裡的互信息score作為reward的一部分(r3)。用第一步訓練好的模型來初始化policy模型,給定輸入[pi,qi],生成一個候選列表作為action集合,集合中的每個reply都計算出其MMI score,這個score作為reward反向傳播回seq2seq模型中,進行訓練。整個模擬過程如下圖:
兩個bot在對話,初始的時候給定一個input message,然後bot1根據input生成5個候選reply,依次往下進行,因為每一個input都會產生5個reply,隨著turn的增加,reply會指數增長,這裡在每輪對話中,通過sample來選擇出5個作為本輪的reply。
接下來就是評價的部分,自動評價指標一共兩個:
1、對話輪數。
很明顯,增強學習生成的對話輪數更多。
2、diversity。
增強學習生成的詞、片語更加豐富和多樣。下圖給出了一個MMI seq2seq與RL方法的對比結果:
RL不僅僅在回答上一個提問,而且常常能夠提出一個新的問題,讓對話繼續下去,所以對話輪數就會增多。原因是,RL在選擇最優action的時候回考慮長遠的reward,而不僅僅是當前的reward。
本文是一篇探索性的文章,將seq2seq與RL整合在一起解決bot的問題是一個不錯的思路,很有啟發性,尤其是用RL可以將問題考慮地更加長遠,獲得更大的reward。用兩個bot相互對話來產生大量的訓練數據也非常有用,在實際工程應用背景下數據的缺乏是一個很嚴重的問題,如果有一定質量的bot可以不斷地模擬真實用戶來產生數據,將deep learning真正用在bot中解決實際問題就指日可待了。
RL解決bot問題的文章在之前出現過一些,但都是人工給出一些feature來進行增強學習,隨著deepmind用seq2seq+RL的思路成功地解決video games的問題,這種seq2seq的思想與RL的結合就成為了一種趨勢,朝著data driven的方向更進一步。
一點思考,歡迎交流。
推薦閱讀:
※盤點丨2016年機器學習十大文章整理
※Bagging
※驗證式開發——簡論演算法開發的正確姿勢
※我們離機器人理財還有多遠?
TAG:自然语言处理 | 深度学习DeepLearning | 机器学习 |