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