沈 杰 瞿遂春 任福繼 邱愛兵 徐 楊
1(南通大學電氣工程學院 江蘇 南通 226019)2(德島大學先端科學技術部 日本 德島 7708506)
20世紀90年代,Brown等提出的統(tǒng)計機器翻譯模型[1]應用于問答系統(tǒng),提供了有效的相關性特征。2014年, Sutskever等提出基于Sequence to Sequence架構的神經機器翻譯模型[2]。由于問答系統(tǒng)可看作是特殊的翻譯模型,所以使用Seq2Seq框架來實現(xiàn)問答聊天回復的自動生成成為一種可能。然而國內外研究的對話模型多以英文為主,且多有標準的訓練數(shù)據集,例如2016年斯坦福大學公開的SQuAD[3]和2018年的CoQA[4]數(shù)據集。高質量的中文對話語料缺乏成為限制中文對話模型取得良好效果的關鍵性因素。為了解決數(shù)據集的匱乏,Goodfellow 等[5]在2014年提出一種基于博弈論思想的網絡模型,即生成式對抗網絡 GAN。該網絡由生成器(Generator)和判別器(Discriminator)兩部分組成[6]。生成網絡和判別網絡都可以選用目前流行的深度神經網絡結構[7]。GAN網絡的優(yōu)化目標是達到納什均衡[8],使得生成網絡能夠預測樣本數(shù)據的分布。在自然圖像和機器視覺領域,GAN的研究與應用是最廣泛的[9-12]。
中文問答文本的生成是解決離散序列的問題。起初,GAN被設計用來生成實數(shù)連續(xù)數(shù)據,直接生成離散詞序列是十分困難的[13]。另外,GAN只有在生成時才能給出整個序列的得分/損失;對于部分生成的序列,平衡現(xiàn)在和未來的得分作為整個序列得分是很困難的事情[7]。本文僅研究中文開放域問答聊天數(shù)據的生成,同時為了解決這兩個問題,設計一種新的序列對抗生成網絡SGAN,對抗訓練出一個生成序列,使得網絡生成的序列和人為給出的序列相似,不易被分辨出來。同時本文采用SeqGAN模型[13]中的思想,將對話生成任務視為一個強化學習[14]的問題,選用Actor-Critic策略評估的方法,替換了蒙特卡洛策略梯度算法[15-16]。同時對新網絡模型用精準率和召回率等評價標準進行了評價實驗。
本文提出的序列生成對抗網絡SGAN是基于GAN模型設計而得的,同樣由生成網絡G和判別網絡D組成。該網絡計算流程如圖1所示。虛線框中的結構是GAN的計算流程[17]。網絡輸入分別為真實數(shù)據x和隨機變量z。如果判別網絡D的輸入是人為給定的真實數(shù)據x,則標注為1;如果D的輸入是生成樣本數(shù)據G(z),則標注為0。判別網絡作為二分類來判斷樣本數(shù)據的真和偽。如果判斷結果為真,數(shù)據來源于x;如果判斷結果為偽,數(shù)據來源于G(z)。為了使G(z)的樣本分布和x表現(xiàn)一致,網絡需要經過無限的迭代優(yōu)化,使生成器G性能得到提升。對抗網絡問題實質是一個極小-極大的問題,用表示真實樣本數(shù)據,是服從均勻分布的隨機噪聲。GAN對抗優(yōu)化過程如下:
(1)
圖1 SGAN計算流程
SGAN中的生成器G采用類似于Seq2Seq(Sequence-to-Sequence)模型為主體的問答回復結構[2,18]。該結構使用遞歸神經網絡將源輸入映射成一個向量表示,然后使用激活函數(shù)softmax計算在目標中生成每個序列句子的概率,損失函數(shù)用交叉熵。判別器D實質是一個二分類器,采用CNN網絡基礎結構[19]。對話序列{x,y}作為D模型的輸入,輸出一個標簽。標簽指示輸入是人為生成的真實樣本還是機器生成的偽樣本。在給定一個問題的情況下,生成器G通過編碼-解碼過程生成一個偽回復,這個偽回復將和問題構成一個負樣本,相反,問題與訓練數(shù)據中人給定的回復構成一個正樣本。處理問答序列設計的SGAN模型的對抗框架如圖2所示。
圖2 SGAN的對話框架
在SGAN結構中,基于Actor-Critic策略梯度[20]算法來訓練生成網絡,根據判別器D的輸出判別概率通過增強學習來更新D,增強學習的獎勵通過D來計算。
生成器G模型是基于RNN的Seq2Seq。輸入一個序列問題
(2)
判別器D采用CNN卷積神經網絡結構。本文重點關注判別器預測完整序列是人為真實樣本數(shù)據的概率。輸入序列x1,x2,…,xt表示為:
ε1:T=x1⊕x2⊕…⊕xT-1⊕xT
(3)
式中:xt是k維詞向量,⊕是矩陣級聯(lián)算子,用內核ω對l個詞進行卷積運算來產生一個新的特征映射:
ci=ρ(ω?εi:i+l-1+b)
(4)
式中:ρ是非線性函數(shù),?運算符是點積和,b是偏值。用不同數(shù)量且尺寸不同的內核來提取不同的功能;用最大池化對特征映射ci處理。激活函數(shù)為Sigmoid,判別器D的輸出是判別出真實樣本(標簽值為1)的概率。優(yōu)化目標是最小化值標簽與預測概率之間的交叉熵,表示為:
minEY~pdata[log2D(Y)]-EY~G[log2(1-D(Y))]
(5)
SGAN的訓練偽代碼如下:
Initialize G,D with random weights Pre-train G Generate negative samples using G for training D Pre-train DFor i=1, G-steps do Sample (X,Y) from real data Sample Y^~G(·|X) Compute reward r for (X,Y^) using D Update G on (X,Y^) using rend forFor i=1, D-steps do Sample (X,Y) from real data Sample Y^~G(·|X) Update D using (X,Y) as positive samples and (X,Y^) as neg-ative samplesend for until SGAN converge
序列生成過程是一個連續(xù)的決策過程。生成模型被視為強化學習(Reinforce Learning)的主體(agent),狀態(tài)(State)是目前為止所生成的詞,動作(Action)是待生成的下一個詞。強化學習的基本流程如圖3所示。
圖3 強化學習流程圖
Actor-Critic策略梯度與對抗網絡GAN結合,可以對網絡模型進行多級優(yōu)化使其穩(wěn)定,同時Actor-Critic策略梯度方法能夠很有效處理強化學習中的序列任務[21]。Actor-Critic是一種近似估計的策略梯度方法,所以會不可避免地引入偏差值,容易使模型出現(xiàn)復雜化或者過擬合的現(xiàn)象。
判別器D用來評估序列并反饋評估,以指導生成模式。用Actor-Critic策略梯度直接訓練生成模型,避免了GAN中離散數(shù)據的分化困難。強化學習可以解決順序決策過程。將序列生成器建模為選擇下一個詞的策略,可以采用策略梯度方法來優(yōu)化發(fā)生器。SGAN使用基于強化學習的生成器擴展了GAN,可以解決序列生成問題。
使用策略梯度方法是促使生成模型能夠生成與人類話語混淆的語句。將判別模型D判別出真實樣本的概率值視為回報值,用R+{x,y}表示,該回報值可以作為生成模型G的獎勵,并用Actor-Critic算法來訓練出生成模型的最大期望獎勵:
J(θ)=Ey~p(y|x))(R+({x,y})|A(s,a))
(6)
為了保證當前問答狀態(tài)的梯度不變,原則是基線函數(shù)僅與狀態(tài)有關,和行為無關。為了減少方差,使用了基于行為-價值函數(shù)減去偏差基線值的方法。式(6)中A(s,a)是優(yōu)勢評估的行為價值函數(shù)。給定一個中文問題序列輸入x,通過該策略抽樣生成回復y,將{x,y}放入判別模型D?;诨€函數(shù)的Actor-Critic策略梯度可表示為:
▽J(θ)≈[R+({x,y})-b({x,y})]▽log2π(y|x)=
(7)
式中:π表示生成響應的概率。b({x,y})表示用于減少估計的方差同時保持其無偏差的基線值。判別模型D會以人為生成的對話為正例,機器生成的對話為負例進行同步更新。為了在模型更新時,不同人生成的樣本對應不同的權重且保證人為生成的樣本總具有非負權重值,判別器將對人為生成和機器生成的句子分別打分。如果人為生成的句子高于設定的基值,那么生成器G將對人為生成樣本和分值進行更新。
Actor-Critic策略評估解決了原先蒙特卡洛樹搜索算法帶來的方差較大的問題,文本利用A(s,a)價值函數(shù)相對準確地評估狀態(tài)價值,并對策略進行及時更新,避免了蒙特卡洛樹搜索方法一個狀態(tài)更新N次的繁瑣處理。
本文用人人網小黃雞中文閑聊對話語料為預訓練生成模型的數(shù)據集。由于高質量的中文對話語料較少,所以模型的真實數(shù)據是由一種訓練好的對話數(shù)據清洗模型提供。真實數(shù)據是來自于45萬多小黃雞問答數(shù)據對,用全部數(shù)據集對生成模型Seq2Seq模型做預訓練,運用最大似然估計的方法訓練模型,同時加入了小批量訓練的方法。生成模型學習率為0.000 5,有兩層LSTM層共1 024個神經元,梯度最大閾值為5.0,batch_size設置為64,訓練迭代次數(shù)為250萬次。圖4為預訓練生成器G的損失曲線??v坐標是損失值,橫坐標為迭代次數(shù)。在訓練至12 000次左右,模型損失已經降到2.5以下,在20 000次左右,loss趨于2.2。此時模型困惑度從45左右降到20附近。模型測試階段使用beam search算法來尋找最優(yōu)結果[22],并通過設置K=1得到最優(yōu)的回復。
圖4 損失曲線
由于數(shù)據集中存在問題與回復不匹配且低俗暴力的樣本,數(shù)據集的內容不能全部認為是人為數(shù)據。需要從數(shù)據集中挑選質量較高的問答對作為真實數(shù)據。本文用訓練好的數(shù)據清洗框架Matcher模型[23]對原始數(shù)據集進行處理,獲得10萬對小黃雞樣本作為SGAN的真實數(shù)據,視為正樣本數(shù)據。將10萬對人為樣本放入生成器G,獲得的10萬對機器生成的樣本看作為負樣本數(shù)據。
生成器生成一批序列,然后獲得每個詞的獎勵,將序列與其對應的獎勵放入生成器,用策略梯度的方法更新生成器的參數(shù)。這個階段,判別器不發(fā)生任何改變,只是給出當前生成情況反饋獎勵值。
判別器D的訓練集來自于帶有標簽值為1的真實樣本數(shù)據和帶有標簽值為0的生成樣本。判別器是一個二分類的CNN卷積神經網絡,利用交叉熵為損失函數(shù)[24]。同樣,判別器也用了最大似然估計的方法作預訓練,輸入四維張量,經卷積池化線性化得到一個二維張量,預訓練中用了L2正則化和Dropout。詞向量維度為64,L2正則化的權重值設置為0.2,dropout值設置為0.7,batch_size為64。
預訓練之后,生成網絡G和判別網絡D被交替地訓練。生成器通過策略梯度更新參數(shù)訓練得到進步,判別器需要定期重新訓練,以保持和生成器的同步更新。用不同的負樣本和正樣本組合的方法減少估計的差異。
實驗中發(fā)現(xiàn),當生成器G收斂速度提高,判別器D往往得不到充分的訓練,導致一直提供錯誤反饋;當增加判別器的訓練次數(shù),訓練不穩(wěn)定情況會得到緩解;用固定的正樣本和不同的負樣本混合,可以獲得多個數(shù)據集;當判別器給出多個偽樣本時,強調正樣本,可以給判別器更好的學習指導。
由于計算困惑度是評價模型和某些數(shù)據吻合度的一個很好的指標,但是它不適合于對話模型的評價。雖然基于N-gram算法的BLEU[25]在機器翻譯是權威的評判標準,但是同樣不適于對話系統(tǒng),原因是重疊詞與給定回復的沖突評價。人為評估方法雖然是理想的,但是沒有很好的擴展性與可解釋性[26-27]。本文評價模型根據召回率[28-29]和識別精確度[29-30]的綜合評價指標來定性評判模型。精確率是就判別結果而言,表示判別為真的樣本中有多少是真實數(shù)據提供的正樣本。召回率是針對樣本數(shù)據的,表示樣本中正樣本有多少被判別正確,即判別出人為提供的真實樣本。圖5給出的是模型訓練召回率和精確率的關系分布。
圖5 SGAN評價指標關系分布
圖5中橫坐標為判別器D的精確率,縱坐標為召回率。由圖5可以得到,隨著對抗模型訓練無限的迭代,判別準確率精度越來越高的同時召回率越來越低,意味著生成器G生成的偽樣本和真實樣本越來越相近,同時判別器D越來越難區(qū)分樣本的來源是正樣本還是負樣本。直至模型收斂,召回率為0時,判別器已經無法分辨對話樣本數(shù)據來源,達到實驗目的。
為了進一步直觀地評價問答效果,本文還補充了問答相關性的評價試驗?;谟嘞蚁嗨菩栽瓌t,對平均和貪婪兩個指標對問答句中的單詞向量進行匹配測試。相關性評價得分結果如表1中給出。
表1 相關性評價指標得分
由表1可看出,序列對抗模型SGAN的問答效果要優(yōu)于Seq2Seq。由于Seq2Seq模型本身并未考慮問答的多樣性和信息性,所以本文并未對回復多樣性進行實驗驗證。
為了直觀地表現(xiàn)對抗模型和Seq2Seq模型的回復性能,表2給出了一些兩模型就單輪對話回復的實例。比較兩個模型,可以發(fā)現(xiàn)SGAN序列對抗模型可以生成內容更為豐富的回復,比Seq2Seq回復效果要好,且生成的對話皆可作為真實樣本數(shù)據供以后優(yōu)化模型訓練使用。
表2 模型生成對話回復的樣本實例
本文主要為了解決中文對話語料的缺乏,提出一種基于對抗模型的序列對抗模型SGAN來生成單輪對話。為了有效地訓練序列對抗網絡,本文使用Actor-Critic梯度評估方法。為了解決模型獎勵的及時反饋問題,使用了基線行為函數(shù)代替蒙特卡洛樹搜索的方法,同時降低了系統(tǒng)方差。本文用召回率和精確率作為模型的評價指標,同時使用輔助的問答相關性指標對所提模型進行直觀的測試。實驗表明,提出的對話序列對抗模型能夠生成足夠的中文對話樣本來混淆人為提供的樣本,對中文對話數(shù)據集的構建和優(yōu)化對話模型有重要的指導意義。