蔡 鉞,游進國,2,丁家滿
(1.昆明理工大學信息工程與自動化學院,云南 昆明 650500;2.云南省計算機技術應用重點實驗室,云南 昆明 650500)
對話系統(tǒng)分為特定領域的對話系統(tǒng)與開放領域的對話系統(tǒng)[1],前者用于完成特定的任務,后者用于無固定主題的閑聊和娛樂。目前,開放領域對話系統(tǒng)得到了較快的發(fā)展并且在工業(yè)界也得到了較好的應用,比如微軟小冰、小愛同學等聊天機器人已經慢慢地融入了我們的生活。開放領域對話系統(tǒng)的實現(xiàn)可以分為檢索式方法和生成式方法,檢索式方法通過查詢對話語料庫選擇最佳回復,生成式方法通過學習輸入的對話與生成回復之間的對應關系,使系統(tǒng)可以通過輸入的對話自動生成有意義的回復。對話生成的研究也就是開放領域對話系統(tǒng)中生成式方法的研究。
序列到序列Seq2Seq(Sequence-to-Sequence)[2]模型首先在機器翻譯領域[3]取得了很大的成功,之后被用于對話生成[4]。它通常由2個循環(huán)神經網絡RNN(Recurrent Neural Network)組成,可以端對端地訓練對話生成。Bahdanau等[5]將注意力機制引入Seq2Seq模型之后,改進了查詢-響應之間的相關性,使對話生成的質量進一步提高。但是,在開放領域的對話生成方向沒有好的評估方法來判斷生成對話的好壞,僅僅使用極大似然估計MLE(Maximum Likelihood Estimation)作為損失函數(shù)訓練Seq2Seq模型時,容易出現(xiàn)對話回復中部分單詞生成正確,總體對話卻很差的情況,并且會出現(xiàn)“安全響應(Safe Response)[6]”的問題,即容易產生“我不知道”等沒有信息的對話。盡管如此,使用MLE訓練帶有注意力機制的Seq2Seq模型還是目前對話生成最常用的方法。
之后的工作中,研究人員對極大似然估計算法提出了很多的改進[7,8],比如引入強化學習RL(Reinforcement Learning)的概念,從連貫性、信息流和輕松回復等多個方面自定義評估方法來判斷對話生成的好壞,從而得到對話的獎勵,進而使用策略梯度(Policy Gradient)[9]的方法將得到的獎勵用于指導對話的生成。但是,自定義的評估方法只能針對性地解決部分問題,依舊不能整體地判斷對話的好壞。
對抗生成網絡GAN(Generative Adversarial Nets)[10]可以使用判別模型來評估整個對話的好壞,從而解決模型評估的問題。它最初設計用于輸出可微分值,可以較好地捕獲連續(xù)分布。但是,離散語言的生成對它來說是具有挑戰(zhàn)性的,因為GAN在生成模型生成詞匯時選擇概率最大的一個詞匯作為輸出,在生成模型的參數(shù)進行微小更新的情況下,輸出的詞匯可能不會發(fā)生改變,導致它在對話生成時會面臨反向傳播不可微分的情況,生成模型與判別模型不能作為一個整體進行訓練。
Adver-REGS(Adversarial Reward for Every Generation Step)[11]模型采用了seqGAN(sequence Generative Adversarial Nets)[12]的思想,利用策略梯度的方法來解決GAN訓練對話生成時導致的反向傳播不可微分的問題,將GAN應用到了對話生成的領域,大大地提高了對話生成的質量。在對抗訓練的過程中,判別模型只能得到完整對話的獎勵,為了得到好的對話中間狀態(tài)的獎勵,需要使用蒙特卡羅采樣MC-Search(Monte Carlo Search)[13]的方法,這是一個非常耗時的過程。但是,策略梯度的方法對每次獎勵的利用率很低,這就導致了使用策略梯度訓練GAN的效率很低,并且使用策略梯度訓練時還存在樣本方差大、模型訓練困難并且容易收斂到局部最優(yōu)解的問題,影響了對話生成的質量。
近端策略優(yōu)化PPO(Proximal Policy Optimization)[14]算法是一種異策略(Off Policy)的RL方法。PPO算法已經在視頻游戲與無人駕駛等方面得到了較好的應用,但未見用于對話的生成。由于目前對話生成的方法會面臨判別模型返回獎勵利用率低、模型訓練困難、容易收斂到局部最優(yōu)解等問題,而PPO算法不僅可以解決一般策略梯度方法數(shù)據樣本利用率低與魯棒性差的問題,而且對比于異策略學習方法信賴域策略優(yōu)化(Trust Region Policy Optimization)[15]也具有更好的樣本復雜度。因此,本文提出使用PPO算法來訓練GAN。
本文提出對話生成算法PPO_GAN,使用PPO算法來訓練GAN。首先,處理了GAN在對話生成時導致的反向傳播不可微分的情況,利用判別模型返回的獎勵來指導生成模型生成對話,解決了僅使用極大似然估計訓練對話生成時面臨的對話質量評估的問題。其次,相比于Adver-REGS模型,本文算法不僅通過優(yōu)化帶有懲罰項的代理目標函數(shù)來得到生成模型參數(shù)更新的方向和步長,保證了生成模型的訓練是單調非減的,而且通過生成模型自適應的多次迭代,提高了判別模型返回獎勵的利用率。
本文模型使用GAN的結構,包含一個生成模型和一個判別模型,生成模型的目標是生成更接近人類的對話,判別模型的目標是盡可能地區(qū)分真實的對話和生成模型生成的對話。為了在對抗訓練之前,使生成模型具有一定生成對話的能力,判別模型具有一定分辨對話的能力,本文對生成模型和判別模型進行了預訓練。在對抗訓練的過程中,通過PPO算法使判別模型得到的獎勵能重復地被用于指導生成模型的訓練,同時為了得到對話中間狀態(tài)的獎勵,使用了MC-Search的方法,并且為了防止在對抗訓練的過程中出現(xiàn)獎勵中斷的問題,使用了強迫指導[16]的方法。在經過對抗訓練之后,生成模型可以生成足夠真實的對話使判別模型無法分辨。
Figure 1 Diagram of generate model structure 圖1 生成模型結構圖
本文將生成模型用G表示,判別模型用D表示。輸入對話用h表示,h={h1,h2,…,hm},其中,ht表示輸入對話的第t個單詞。真實的對話回復用x表示,x={x1,x2,…,xn},其中,xt表示真實回復的第t個單詞,x1:t表示真實回復的第1到第t個單詞。生成模型生成的對話回復用c表示,c={c1,c2,…,cw},其中,ct表示生成回復的第t個單詞,c1:t表示生成回復的第1到第t個單詞。使用(x,h)表示真實的對話,(c,h)表示生成模型生成的對話。S1表示所有真實的對話集合,S2表示所有生成的對話集合。判別模型得到的獎勵用R表示。
生成模型的目標是最大化每個輸出是真實回復的概率,使用MLE作為損失函數(shù)預訓練生成模型,如式(1)所示:
(1)
其中,θ表示生成模型的參數(shù),pθ(xt|x1:t-1,h)表示在給定輸入對話h和真實回復單詞(x1,…,xt-1)的情況下,產生的下一個單詞是真實回復單詞的概率。
如圖1中解碼器部分的虛線所示,訓練過程中和測試過程中解碼器的輸入是不一樣的,因為在訓練的過程中知道真實的對話回復x,所以在解碼的過程中可以將前一步真實的回復單詞xt-1作為輸入。但是,在測試時不知道真實的回復,只能將前一步的輸出ct-1作為輸入。如果前一步的輸出很差就會影響到接下來生成的回復,也就是會造成“暴露偏差(Exposure Bias )[17]”的問題,影響對話生成的質量。
判別模型的結構如圖2所示,是一個層次神經網絡[18]的結構。首先,使用一個RNN將對話的輸入h進行編碼,另一個RNN將真實的回復x或者生成的回復c進行編碼,將RNN最后一個時刻的隱藏狀態(tài)作為句子的編碼向量,得到句子層面的信息;然后,將句子的編碼作為下一層RNN的輸入向量,第2層RNN的隱藏狀態(tài)就包含了整個對話層面的信息;最后,加入一個二分類的softmax層進行分類。
Figure 2 Diagram of discriminant model structure圖2 判別模型結構圖
使用交叉熵作為損失函數(shù)預訓練判別模型,如式(2)所示:
(2)
由于GAN在處理離散數(shù)據時,判別模型得到的微分值不可以通過反向傳播傳到生成模型,因此不能直接整體地訓練生成模型和判別模型,而是將對話的生成看作是一個RL的問題,由判別模型得到獎勵來指導生成模型生成對話。
2.3.1 生成對話的獎勵
判別模型只能得到一個完整句子的獎勵,直接使用判別模型計算獎勵時,生成回復中的每個單詞都會得到相同的獎勵。但是,對話回復中可能部分單詞的生成是好的,部分單詞的生成是差的,因此需要采用MC-Search的方法計算每個單詞對應的獎勵。
使用MC-Search生成對話的過程如圖3所示。在已知前t個單詞c1:t的情況下,繼續(xù)從模型分布中完成整句話的生成,一共生成N句話,c1~cN。在計算獎勵時,這N句話獎勵的平均值即為第t個單詞的獎勵。重復此過程,直到得到所有單詞的獎勵。由此可見,獎勵計算的過程是非常耗時的。
Figure 3 Using MC-Search to generate dialogue圖3 使用MC-Search生成對話
在使用判別模型計算獎勵時,將生成的對話作為判別模型的輸入,判別模型判斷生成的回復為真實回復的概率即為獎勵的值,獎勵的值越大表示生成模型生成的對話的質量越高。單詞獎勵的計算如式(3)所示:
(3)
2.3.2 使用PPO算法訓練生成模型
將對話的生成看作一個RL的問題。RL的目的就是在狀態(tài)s下通過策略π得到要執(zhí)行的動作a,使執(zhí)行動作a可以獲得最大的期望獎勵。其中,策略π就是生成模型,狀態(tài)s就是給定輸入的對話和已經生成的序列{c1,…,ct-1},要執(zhí)行的動作a就是將要產生的下一個單詞ct,動作a的獎勵是通過判別模型得到的。
使用PPO算法訓練生成模型的過程如圖4所示。首先,將對話輸入生成模型生成對話的回復;其次,將對話的輸入與生成的回復輸入判別模型得到獎勵;最后,使用判別模型得到的獎勵指導生成模型更新參數(shù),提高生成模型生成對話的質量。其中,為得到每個單詞的獎勵使用了MC-Search的方法。
Figure 4 Adversarial training generation model圖4 對抗訓練生成模型
PPO算法是一個異策略的RL算法,用于生成模型迭代訓練的策略π和用于生成回復得到獎勵的策略πold是不同的,使用MC-Search得到的獎勵可以被重復用于生成模型的迭代訓練,從而提高模型訓練的效率。在使用異策略的RL算法時,當策略π和策略πold產生的單詞差距很大時,會導致策略πold得到的獎勵不再適用于指導策略π的訓練,PPO算法增加了限制條件以確保策略π和策略πold產生的單詞差距在一定的范圍內。
使用PPO算法訓練生成模型的損失函數(shù)如式(4)所示:
clip(mt(θ),1-ε,1+ε)Rt)
(4)
其中,
(5)
Rt=R(ct,h)
(6)
式(4)中,θ表示生成模型的參數(shù),即策略π的參數(shù);mt(θ)是生成模型的一個代理目標函數(shù),表示在訓練第t個單詞時模型參數(shù)的變化率;Rt表示第t個單詞的獎勵;clip(mt(θ),1-ε,1+ε)保證了模型參數(shù)的變化率在(1-ε,1+ε)之間,當mt(θ)的值小于1-ε時就為1-ε,當mt(θ)的值大于1+ε時就為1+ε。函數(shù)在mt(θ)Rt與clip(mt(θ,1-ε,1+ε))之間取較小的值,這樣確保了得到高的獎勵時,mt(θ)的值增大但是不會超過1+ε,得到低的獎勵時,mt(θ)的值減少但是不會小于1-ε。這樣就可以使生成模型自適應地多次迭代訓練。式(5)中,pθ(ct|c1:t-1,h)是指在給定輸入的對話h和已生成的單詞(c1,…,ct-1)的情況下,下一個生成的單詞為ct的概率;θ為策略π的參數(shù);即為正在迭代的生成模型的參數(shù);θold為策略πold的參數(shù),即為上一次對抗訓練的生成模型的參數(shù);(c1,…,ct)是由策略πold生成的。式(6)中,R(ct,h)是指使用策略πold生成單詞ct的獎勵。
在使用PPO算法訓練GAN的對話生成模型時,mt(θ)是生成模型的一個代理目標函數(shù),通過增加正則項保證了模型參數(shù)的變化率在一定的范圍內,這樣mt(θ)可以近似生成模型的目標函數(shù)pθ(ct|c1:t-1,h),通過優(yōu)化帶有正則項的代理目標函數(shù)mt(θ)來得到生成模型參數(shù)更新的方向和步長。同時,由于mt(θ)是生成模型目標函數(shù)的一個下界,這樣就保證了生成模型參數(shù)的更新是單調非減的,可以更好地訓練模型。
2.3.3 使用強迫指導訓練生成模型
在對抗訓練的過程中,可能出現(xiàn)判別模型訓練得足夠好而生成模型訓練不夠的情況。在這種情況下,判別模型可以輕易地分辨出生成模型生成的回復,而生成模型不能生成足夠真實的回復來“欺騙”判別模型,會導致判別模型總是給出低的獎勵,而生成模型不知道得到高的獎勵的迭代方向。強迫指導可用于避免這種情況的發(fā)生,強迫指導的訓練方法與預訓練生成模型時相同,使用數(shù)據集中的真實對話,將MLE作為損失函數(shù)訓練生成模型。這樣可以保證生成模型在對抗訓練的過程中能有真實的數(shù)據集指導訓練。
算法1PPO_GAN
輸入:訓練時真實的對話數(shù)據集(x,h),測試時真實的對話x。
輸出:測試時生成的回復c。
步驟1Gθ←L(θ);//預訓練生成模型Gθ
步驟2(c,h)←Gθ;/*使用生成模型Gθ生成對話(c,h)*/
步驟4θold←θ;//保存生成模型參數(shù)θold
步驟5repeat:
步驟6forD-stepsdo
步驟7(c,h)←Gθold;/*使用生成模型Gθold生成對話(c,h)*/
步驟9endfor
步驟10forG-stepsdo
步驟11(c,h)←Gθold;
步驟12fort=1towdo
步驟13functionR(ct,h);/*計算生成單詞ct的獎勵*/
步驟14endfor
步驟15forPPO-stepsdo
步驟16Gθ←Lppo(θ);/*通過最大化損失Lppo(θ)訓練生成模型Gθ*/
步驟17endfor
步驟18forTeacher-stepsdo
步驟19Gθ←L(θ);/*通過最大化損失L(θ)訓練生成模型*/
步驟20endfor
步驟21θold←θ;
步驟22endfor
步驟23 untilPPO_GAN converges
本文實驗采用Python 3.5.2編寫代碼,并使用了TensorFlow工具。實驗操作系統(tǒng)采用Windows 7,實驗硬件環(huán)境:Intel Core i5處理器,CPU四核 3.30 GHz。內存為8 GB。
本文使用的數(shù)據集為一個英文電影字幕的數(shù)據集OpenSubtitles[19]。去除數(shù)據集中對話長度小于5個單詞和大于50個單詞的對話,處理之后的數(shù)據集大約150 MB,一共包括約270萬對單輪對話,將其中的1萬對單輪對話劃分為測試數(shù)據集。本文對數(shù)據進行了分塊處理,將數(shù)據集根據對話的長度分為了4個部分,這樣減少了訓練過程中RNN傳播的長度,提高了模型訓練的效率。
在生成模型部分,Seq2Seq模型的編碼和解碼都是由門控循環(huán)單元GRU(Gated Recurrent Unit)[20]構成的,并且在編碼和解碼之間添加了注意力機制。GRU緩解了RNN梯度消失的問題,在訓練的過程中為了得到更好的效果,使用了Adam[21]優(yōu)化器代替隨機梯度下降,以自適應每個參數(shù)的學習率,也使用了小批量訓練的方法來平衡訓練的精確度和速度,以及使用梯度裁剪的方法來防止梯度爆炸。在測試的過程中,本文使用了集束搜索,考慮每一步的前k個回復,以得到更佳的結果,增添了對話的多樣性,改善了產生無聊回復的問題。
在判別模型部分,層次神經網絡中的3個RNN都是使用2層的長短期記憶LSTM(Long Short-Term Memory)[22]網絡構成的,同樣緩解了RNN梯度消失的問題。在訓練過程中,同樣也使用了小批量訓練、Adam優(yōu)化器以及梯度裁剪的方法。
本文使用的對比基線方法為開放領域對話生成的經典算法——極大似然估計以及使用策略梯度訓練GAN的Adver-REGS算法。極大似然估計是開放領域單輪對話生成最常用的算法。Adver-REGS算法將GAN引入到了開放領域的對話生成,并取得了較好的效果。
本文對模型訓練的效率和對話生成的質量都進行了評估。通過模型訓練時損失的收斂速度評估模型訓練的效率,并且通過困惑度、無聊響應出現(xiàn)的頻率以及對話生成的示例評估對話生成的質量。
困惑度(Perplexity)[23]是常常被用于評估生成對話語言質量的評估指標,它可以用來衡量一句話出現(xiàn)的概率。生成對話的文法結構越正確,語言質量越高,困惑度的值就越小,則模型訓練得越好。困惑度如式(7)所示:
(7)
其中,w表示生成的對話回復中的單詞個數(shù),pθ(ct|c1:t-1)表示生成模型在已知生成的單詞(c1,…,ct-1)的情況下,下一個生成的單詞為ct的概率。
安全響應的問題是影響對話質量的一個重要因素,生成模型傾向于生成語言質量高,但是沒有信息的對話。當這類對話生成過多的時候,會讓對話的有趣性、對話的意義以及對話的質量都有所下降。為了評估安全響應的問題,本文計算了生成無聊對話的頻率,將“i don’t know”“i’m sorry.”定義為無聊回復,無聊回復的頻率越高,代表安全響應的問題越嚴重。
在對抗訓練的過程中,超參數(shù)的選取對模型的訓練是非常重要的。本文將詞匯量的大小設置為35 000。GRU設置為2層,每層擁有512個神經元。LSTM設置為2層,每層擁有512個神經元。生成模型的批量大小設置為128,判別模型的批量大小設置為256。MC-Search中N的值取5。集束搜索的k值設為5。
實驗1極大似然估計算法訓練對話生成。在帶有注意力機制的Seq2Seq模型中采用極大似然估計算法迭代訓練了52 500次。
實驗2對比Adver-REGS模型。生成模型的預訓練迭代了50 000次,判別模型的預訓練迭代了30 000次。GAN對抗訓練的次數(shù)為1 250次,其中,本文依照Adver-REGS[9]模型中的設置,G-steps=1,D-steps=5,Teacher-steps=1。
實驗3本文提出的PPO_GAN模型。生成模型與判別模型的預訓練迭代次數(shù)同實驗2。GAN對抗訓練次數(shù)為415次,其中,G-steps=1,D-steps=5。將PPO-steps設置為3,即每次對抗訓練的過程中MC-Search得到的獎勵重復被利用3次,當PPO-steps的值過小時,判別模型的獎勵利用率較低,當PPO-steps的值過大時,由生成模型迭代閾值的控制,生成模型多次迭代之后梯度的變化率將會減小,而且判別模型得到獎勵的指導意義將會變小??刂粕赡P偷荻鹊拈撝郸旁O為0.2,即通過策略π和πold策略產生下一個單詞為ct的概率的比值控制在0.8~1.2,保證了判別模型得到的獎勵具有指導意義。使用PPO算法對抗訓練一次時參數(shù)會得到較大的更新,為此將Teacher-steps設置為3。
3.5.1 訓練效率
不同算法在訓練的過程中生成損失的下降曲線如圖5所示。圖5a是極大似然估計算法、Adver-REGS算法和PPO_GAN算法預訓練過程中的損失下降曲線,從圖5a中可以看出,這個階段一共迭代訓練了50 000次。圖5b是極大似然估計算法、Adver-REGS算法和PPO_GAN算法對抗訓練過程中的損失下降曲線,是在前50 000次訓練的基礎上繼續(xù)訓練的,從圖5b中可以看出,這個階段一共迭代訓練了2 500次。在圖5b中,對抗訓練的損失曲線為強迫指導得到的損失,即將真實的對話作為輸入時模型的損失。因為本文主要關注的是模型是否擬合了真實的對話,而不是關注它是否擬合生成模型生成的對話。但事實是,在對抗訓練生成的過程中,將真實的對話作為輸入或者將模型生成的對話作為輸入時,對抗生成網絡生成模型的損失都有下降,即模型不僅擬合了真實的對話,而且擬合了生成模型生成的對話。
Figure 5 Convergence effect diagrams of different generation models圖5 不同生成模型的收斂效果圖
由于在對抗訓練的過程中,生成模型的訓練需要判別模型得到的獎勵的指導,所以對抗訓練所需的時間比直接使用極大似然估計作為損失函數(shù)訓練生成模型時所需的時間長。Adver-REGS算法對抗訓練的過程中G-steps設為1,Teacher-steps設為1,D-steps設為5,所以每更新2次生成模型之后更新5次判別模型,然后采用MC-Search的方法計算1次獎勵。而PPO_GAN算法對抗訓練的過程中,PPO-steps設為3,Teacher-steps設為3,D-steps設為5,所以每更新6次生成模型之后更新5次判別模型,然后采用MC-Search的方法計算1次獎勵。這樣,PPO_GAN算法對抗訓練的過程中生成模型生成的樣本得到了重復的利用,同時使判別模型通過樣本得到的獎勵也得到了重復的利用,又由于計算獎勵的過程是一個耗時的過程,這樣就節(jié)省了大量生成獎勵的時間,所以PPO_GAN算法在對抗訓練時期平均每次訓練的時間開銷是遠小于Adver-REGS算法的,提高了算法收斂的速度。
由于GAN中的生成模型使用的是極大似然估計的結構,在極大似然估計訓練的過程中和GAN預訓練的過程中,都是使用極大似然估計作為損失函數(shù)訓練的模型,所以圖5a中它們的損失下降曲線接近重合。從圖5b中可以看出,在50 000次迭代訓練之后,使用極大似然估計訓練的損失值趨于穩(wěn)定,Adver-REGS算法和PPO_GAN算法開始了對抗訓練,模型的損失值又得到了大幅度的下降。在對抗訓練的過程中,PPO_GAN算法損失的收斂速度明顯快于Adver-REGS算法的,并且PPO_GAN算法最后收斂到了一個更低的損失值。本文分析原因是PPO_GAN算法在對抗訓練的過程中,其生成模型訓練的是帶有正則項的代理目標函數(shù),它是生成模型原目標函數(shù)的一個下界,因此生成模型可以單調非減地訓練,這樣就保證了模型收斂的速度以及模型收斂的效果;同時,在訓練的過程中還改善了生成模型容易收斂到局部最優(yōu)解的問題,以及增加了樣本的復雜度使模型更容易收斂到低的損失值。
3.5.2 對話生成質量的分析
本文從不同方面分析了對話生成的質量。通過困惑度比較了生成的對話接近人類語言的程度,通過產生無聊對話的頻率比較了對話回復有趣性與包含的信息量,并且通過隨機輸入對話得到了對話生成的示例,并對生成的示例進行了分析。
表1中列出了不同模型的困惑度,它通過生成模型訓練的最終損失值計算得到,與生成模型的損失呈正相關。困惑度的值越低,表示這句話在人類的語言中出現(xiàn)的可能性越大,越接近人類語言的語法。從表1可以看出,對比于極大似然估計算法,PPO_GAN模型的困惑度下降了1.434 1,性能提升了13%。對比于Adver-REGS算法,PPO_GAN算法的困惑度下降了0.325 4,性能提升了3%。結果表明,PPO_GAN生成的對話在文法結構以及與人類語言的接近程度上是優(yōu)于其他模型的。分析困惑度下降的原因,首先,對抗生成網絡的結構中擁有判別模型可以指導生成模型的訓練,相比于直接使用極大似然估計算法訓練生成模型,訓練時容易找到正確的迭代方向,因此困惑度下降。其次,在使用PPO算法訓練GAN的情況下,由于進一步限制了模型單調非減的訓練,改善了模型容易收斂到局部最優(yōu)解的問題,因此困惑度得到了進一步的降低。
Table 1 Perplexities of different algorithms表1 不同算法的困惑度
在測試數(shù)據集上隨機采樣12 800對對話,統(tǒng)計其中無聊對話產生的頻率,結果如表2所示。由表2可以看出,對比于極大似然估計算法,PPO_GAN算法中無聊對話產生的頻率下降了0.242 9,性能提升了63%。對比于Adver-REGS算法,PPO_GAN算法中無聊對話產生的頻率下降了0.067 2,性能提升了32%。PPO_GAN算法的無聊對話出現(xiàn)的頻率明顯下降。
結果表明,PPO_GAN算法在很大程度上改善了安全響應的問題,不會產生過多沒有信息的對話,使算法生成的對話在多樣性和有趣性方面都有改善。本文分析產生無聊對話的頻率下降的原因是,首先,在加入GAN的結構之后,通過判別模型的指導,改善了Seq2Seq模型僅僅使用MLE作為損失函數(shù)訓練時,容易擬合高頻回復的情況。其次,在使用PPO模型訓練GAN結構的時候,通過增加樣本的復雜度提高了生成對話的多樣性,更重要的是通過控制模型的訓練,使模型更好地擬合了真實的對話。
Table 2 Frequencies of boring dialog表2 產生無聊對話的頻率
在對話生成領域,對話的評估是困難的,目前沒有一個好的評估指標能從整體上評估對話的好壞,最好的方式是通過人類主觀來評估。表3~表5展示了與不同算法的隨機對話得到的部分示例,其中表3對話示例1的輸入為:we should finish the paper quickly。表4對話示例2的輸入為:your dress is so beautiful。表5對話示例3的輸入為:buy me a bottle of water??梢钥闯?,PPO_GAN算法得到的回復一般擁有較好的文法結構,更重要的是,PPO_GAN算法得到的回復擁有更多的信息量,與對話的輸入也有更強的上下文相關性,明顯減少了無意義對話以及無關對話出現(xiàn)的情況。
Table 3 Sample generation dialog 1表3 生成對話示例1
Table 4 Sample generation dialog 2表4 生成對話示例2
Table 5 Sample generation dialog 3表5 生成對話示例3
實驗結果表明,PPO_GAN算法在多個方面改善了對話生成的質量。本文分析對話生成質量得到改善的原因,首先,Seq2Seq模型存在沒有好的評估指標指導模型訓練的問題;其次,在使用策略梯度算法訓練GAN的時候,存在樣本方差大、模型訓練困難而且容易收斂到局部最優(yōu)解的問題。PPO_GAN算法使用GAN的判別模型得到的獎勵指導生成模型生成對話,同時通過優(yōu)化GAN對抗訓練的過程,提高了樣本的復雜度,并且使對抗訓練過程中的生成模型可以單調非減地訓練,改善了模型容易收斂到局部最優(yōu)解的問題。PPO_GAN算法可以更好收斂,從而可以更好地擬合輸入對話與生成回復之間的對應關系,改善了對話生成的質量。
本文通過比較不同算法損失函數(shù)的下降曲線比較了算法的效率,可以看出,本文算法的收斂速度有明顯的提升,訓練效率也得到了很大的提高;同時,通過比較困惑度、無聊對話產生的頻率以及分析生成對話的示例,比較了對話生成的質量,可以看出,本文算法的困惑度明顯降低,無聊對話產生的頻率明顯下降,并且生成對話的示例在包含的信息量和上下文相關性方面都得到了明顯的改善。
本文算法性能提升的原因是,首先,由于PPO算法是一個異策略的強化學習方法,通過增加正則項保證了模型參數(shù)的變化率在一定的范圍內,從而可以使生成模型自適應地多次迭代,讓生成模型生成的樣本以及判別模型得到的獎勵都得到了重復的利用,這是模型訓練效率提高的原因之一。其次,在使用PPO算法訓練GAN時,訓練的是生成模型的代理目標函數(shù),它是生成模型目標函數(shù)的一個下界,這樣就保證了生成模型的訓練是單調非減的,從而使模型易于訓練,這是模型訓練效率提高的另一個原因。同時,由于生成模型的訓練是單調非減的,可以改善模型收斂到局部最優(yōu)解的問題,可以更好地訓練模型,從而得到更好的收斂效果,更好地擬合真實的對話,這是改善對話生成質量的主要原因。最后,由于在訓練的過程中提高了樣本的復雜性,因此提高了生成對話的多樣性,這是改善對話質量的另一個原因。
本文提出了一種使用PPO算法訓練GAN來生成對話的方法。將GAN對抗訓練的過程看作一個強化學習的問題,使用PPO算法迭代訓練GAN的生成模型與判別模型。在訓練的過程中,通過PPO算法重復地利用了判別模型得到的獎勵,改善了模型收斂到局部最優(yōu)解的問題,以及提高了樣本的復雜度。
目前,BERT模型[24]和XLNet模型[25]等相繼被提出,從改進Seq2Seq模型的角度來改善對話生成的質量成為了熱門的研究點。然而本文從改進對話訓練方式的角度,利用GAN的結構,結合RL方向的研究進展,提出了基于PPO的對話生成算法PPO_GAN。實驗結果表明,在模型訓練的效率上,PPO_GAN算法得到了明顯的提高。在對話生成的質量上,不僅降低了算法的困惑度和無聊對話產生的頻率,而且改善了對話之間的上下文相關性,并且得到的回復中包含了更多的信息量。
在模型訓練上,PPO_GAN算法改善了GAN訓練時獎勵利用率低的問題,但是沒有提高計算獎勵的效率。在對話生成的質量上,PPO_GAN算法生成的對話與人類的對話之間還存在差距。在接下來的工作中,將繼續(xù)研究在不影響獎勵正確性的情況下提高獎勵計算效率的方法,以及研究多頭自注意力機制對GAN中生成模型的影響。