彭鵬菲,周琳茹
(中國人民解放軍海軍工程大學(xué)電子工程學(xué)院指揮信息系統(tǒng)教研室,湖北 武漢 430030)
近幾年隨著人工智能的飛速發(fā)展,得益于神經(jīng)網(wǎng)絡(luò)等相關(guān)概念的提出以及發(fā)展,人工智能在多個(gè)領(lǐng)域中取得了巨大的進(jìn)步,自然語言處理作為人工智能領(lǐng)域中一個(gè)重要的研究方向,也標(biāo)志著人工智能進(jìn)一步走向成熟[1]。自然語言處理包括自然語言理解和自然語言生成2個(gè)主要方向[2]。自然語言生成問題可以細(xì)分為機(jī)器翻譯[3]、對(duì)話系統(tǒng)[4]、圖像描述[5]、文章生成[6]等內(nèi)容。2014年,生成對(duì)抗網(wǎng)絡(luò)(GAN, Generative Adversarial Networks)被Fedus等人[7]提出以來便漸漸成為主流的生成模型框架之一,它分為生成器和判別器2個(gè)部分。生成器和判別器是2個(gè)“獨(dú)立”的神經(jīng)網(wǎng)絡(luò),并通過優(yōu)化函數(shù)將2個(gè)神經(jīng)網(wǎng)絡(luò)“鏈接”在一起。生成器的目的是試圖迷惑判別器,讓其判斷不出文本的真假;判別器的目的則是能夠正確地區(qū)分真實(shí)文本和生成文本,最終達(dá)到納什平衡。將博弈論的思想引入到模型訓(xùn)練中,GAN的本質(zhì)通常是先驗(yàn)噪聲和真實(shí)數(shù)據(jù)樣本分布之間的映射,這種特質(zhì)導(dǎo)致它在圖像生成領(lǐng)域具有天然的優(yōu)勢(shì)[8],但是由于文本數(shù)據(jù)的離散型,是不可微的,細(xì)微的梯度更新無法回傳,因此生成器無法更新。對(duì)這一問題,Kusner等人[9]提出GSGAN模型,模型中提出Gumbel-softmax分布,通過讓滿足Gumbel分布的向量和原本的輸出向量相結(jié)合,并使用一個(gè)逐漸減小的變量來作為除數(shù),這就使得可以直接使用可微的softmax函數(shù)來代替原本基于采樣且不可微的argmax函數(shù);Che等人[10]提出了極大似然增強(qiáng)離散數(shù)據(jù)生成對(duì)抗網(wǎng)絡(luò)(MailGAN),設(shè)計(jì)了一套訓(xùn)練技術(shù)直接計(jì)算生成數(shù)據(jù)分布與真實(shí)數(shù)據(jù)分布的差距,同時(shí)減少了模型潛在的方差。目前,GAN在文本生成領(lǐng)域應(yīng)用效果不佳的一個(gè)重要原因是來自判別器的二值反饋信息較少。針對(duì)GAN存在的梯度消失問題,Lin等人[11]提出了排序生成對(duì)抗網(wǎng)絡(luò)(RankGAN),將原始二值分類判別器替換為以余弦相似度為基礎(chǔ)的排序模型,使得判別器的反饋更加連續(xù);Yu等人[12]在AAAI會(huì)議上提出了SeqGAN的方法用來解決序列生成問題,該模型將GAN的生成模型看作強(qiáng)化學(xué)習(xí)過程中的代理,對(duì)抗模型則扮演強(qiáng)化學(xué)習(xí)過程中“人類”的角色,在SeqGAN中仍然選擇LSTM做生成網(wǎng)絡(luò),CNN[13]做對(duì)抗網(wǎng)絡(luò),該模型在中國古詩、英文演講稿和歌詞生成過程中取得了較大的進(jìn)步。GAN模型生成的數(shù)據(jù)不僅真實(shí)度高且具有多樣性,因此在圖像生成領(lǐng)域[14]GAN發(fā)揮了巨大作用。然而由于文本數(shù)據(jù)的離散型,生成器細(xì)微的改變?cè)陔x散空間中無法產(chǎn)生新的標(biāo)簽,因此針對(duì)離散數(shù)據(jù),判別器無法正確指導(dǎo)生成器;且針對(duì)判別器獎(jiǎng)勵(lì)的稀疏性,生成模型較難訓(xùn)練,通常會(huì)產(chǎn)生高方差梯度估計(jì),使得參數(shù)優(yōu)化較難確定方向。
在文本生成中隨著時(shí)序長度變長,深度不斷增加,循環(huán)神經(jīng)網(wǎng)絡(luò)的梯度消失和梯度爆炸問題隨之而來,且由于簡單RNN[15]每次更新時(shí)是對(duì)全體記憶進(jìn)行擦除和重寫,因此導(dǎo)致模型不能捕捉長期關(guān)系。為避免上述問題,本文采用門控結(jié)構(gòu)的GRU神經(jīng)網(wǎng)絡(luò)避免梯度問題,增加對(duì)長期記憶的捕捉能力。
上述模型雖然在文本生成領(lǐng)域有著不錯(cuò)的效果,但是生成的文本較一般,且文本信息單一;由于判別器中的輸出loss經(jīng)反向傳播指導(dǎo)生成器部分的參數(shù)優(yōu)化,不斷試錯(cuò),不斷嘗試進(jìn)行參數(shù)優(yōu)化,每一層參數(shù)的優(yōu)化都會(huì)影響其它層,因此訓(xùn)練時(shí)間較長。針對(duì)以上問題,本文提出以下解決方案:
1)為生成更真實(shí)多樣的文本、減少錯(cuò)誤累計(jì),加入蒙特卡洛策略[16],使判別器的輸出指導(dǎo)信號(hào)通過蒙特卡洛策略算法訓(xùn)練生成器,生成器根據(jù)指導(dǎo)進(jìn)行參數(shù)優(yōu)化,受到獎(jiǎng)勵(lì)。蒙特卡洛策略可幫助生成器在無監(jiān)督學(xué)習(xí)形式訓(xùn)練的每個(gè)時(shí)間步選擇最合適的離散值字符,加強(qiáng)文本生成的多樣性和真實(shí)性。
2)本文使用GRU神經(jīng)網(wǎng)絡(luò)作為生成器和判別器。GRU神經(jīng)網(wǎng)絡(luò)可有效地解決長距離梯度消失的問題,相對(duì)于LSTM神經(jīng)網(wǎng)絡(luò),GRU的參數(shù)要少于LSTM,訓(xùn)練速度要快于LSTM的同時(shí)傳播信息不會(huì)發(fā)生丟失的情況,同時(shí)又使結(jié)構(gòu)更加簡單,訓(xùn)練過程更加快速;改進(jìn)當(dāng)前時(shí)刻的隱含變量的激活函數(shù),使用自定義函數(shù)替換原sigmoid函數(shù),使模型的收斂速度更加迅速,采用有下界無上屆的函數(shù)Swish激活函數(shù)增加網(wǎng)絡(luò)的非線性能力。
GRU提出了更新門和重置門的概念[17],通過各種門函數(shù)將重要特征保留下來,保證了在long-term傳播時(shí)重要信息不會(huì)丟失。此外GRU相對(duì)于LSTM少了一個(gè)門函數(shù),因此在參數(shù)的數(shù)量上少于LSTM[18],整體上GRU的訓(xùn)練速度快于LSTM。
的雙曲正切函數(shù)tanh作為飽和激活函數(shù),在神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程中會(huì)因其飽和性減慢訓(xùn)練過程并導(dǎo)致梯度消失[19],因此本文采用Swish激活函數(shù)替代tanh函數(shù),Swish激活函數(shù)[20]的計(jì)算公式如下:
y=x×sigmoid(x)
(1)
圖1 GRU神經(jīng)網(wǎng)絡(luò)模型圖
Swish激活函數(shù)是有下界無上屆的函數(shù),可以增加網(wǎng)絡(luò)的非線性能力,且由于Swish的一階導(dǎo)數(shù)是平滑的,因此激活函數(shù)不會(huì)出現(xiàn)飽和問題,有效避免了梯度消失問題。具體結(jié)構(gòu)如圖1所示。圖1中的zt和rt分別表示更新門和重置門。
更新門控制前一時(shí)刻的狀態(tài)信息被帶入當(dāng)前狀態(tài)中的程度,值越大表明前一時(shí)刻的狀態(tài)信息帶入越多;重置門控制忽略前一時(shí)刻的狀態(tài)信息的程度,值越小表明忽略得越多。本文采用GRU作為生成對(duì)抗網(wǎng)絡(luò)中的生成器和判別器。在給定輸入值it=(1,2,3,…,n)時(shí),GRU網(wǎng)絡(luò)的前向傳播公式為:
zt=f(Wz·[ht-1,xt])
(2)
rt=f(Wr·[ht-1,xt])
(3)
(4)
(5)
yt=f(Wo·ht)
(6)
其中[ ]代表2個(gè)矩陣相連,*代表矩陣的乘積。
采用f函數(shù)代替原sigmoid函數(shù),加快收斂速度;將原tanh函數(shù)換為Swish函數(shù),改善原函數(shù)因其飽和性減慢訓(xùn)練過程并導(dǎo)致梯度消失問題。通過以上2點(diǎn)的改進(jìn)可綜合提高GRU網(wǎng)絡(luò)的模型訓(xùn)練速度。
本文應(yīng)用GAN神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)文本生成,生成模型包括生成器和判別器,在判別器中加入蒙特卡洛策略進(jìn)一步生成更真實(shí)的文本。真實(shí)的數(shù)據(jù)輸入生成器,判別器產(chǎn)生的結(jié)果反饋回生成器指導(dǎo)生成器繼續(xù)生成文本。由于有監(jiān)督訓(xùn)練對(duì)噪聲有著較強(qiáng)的魯棒性和容錯(cuò)能力,能夠充分逼近復(fù)雜的非線性關(guān)系且其學(xué)習(xí)能力較強(qiáng)[21],本文在訓(xùn)練過程中同時(shí)采用有監(jiān)督學(xué)習(xí)形式和無監(jiān)督學(xué)習(xí)形式,二者之間的轉(zhuǎn)換公式為:a=1-u×k,其中a為進(jìn)行有監(jiān)督訓(xùn)練的概率,k為訓(xùn)練輪數(shù),u為自定義的二者之間的轉(zhuǎn)換開關(guān)。生成器和判別器均使用GRU神經(jīng)網(wǎng)絡(luò),其中判別器的輸出作為反饋獎(jiǎng)勵(lì)函數(shù)評(píng)價(jià)生成文本的效果,并指導(dǎo)生成器的進(jìn)一步改進(jìn)。
蒙特卡洛方法是按抽樣調(diào)查法求取統(tǒng)計(jì)值來推定位置特性量的計(jì)算方法,適用于對(duì)離散系統(tǒng)進(jìn)行仿真實(shí)驗(yàn),從起始狀態(tài)到結(jié)束狀態(tài)稱為episode,完成一次episode計(jì)算一次狀態(tài)Si的平均獲得值。對(duì)蒙特卡洛策略進(jìn)行評(píng)估即在固定的策略π下,從經(jīng)歷過的episodes中學(xué)習(xí),通過求取多個(gè)episodes的平均獲得值來代替狀態(tài)價(jià)值函數(shù),當(dāng)值函數(shù)被估計(jì)出來后,對(duì)于每個(gè)狀態(tài)s,通過最大化動(dòng)作值函數(shù)來進(jìn)行策略的改進(jìn)。
本文的生成器總共包含3層,分別為Embedding層、GRU神經(jīng)網(wǎng)絡(luò)層、Softmax層,主體選擇GRU神經(jīng)網(wǎng)絡(luò)模型。首先對(duì)輸入數(shù)據(jù)進(jìn)行簡單的預(yù)處理,定義循環(huán)次數(shù)為l,為保證程序的運(yùn)行速度,當(dāng)讀取輸入數(shù)據(jù)r大于10000×l時(shí)停止讀入數(shù)據(jù)。接下來在Embedding層將給定真實(shí)文本的訓(xùn)練集I={i1,i2,…,in}映射為向量x={x1,x2,…,xn},xn代表第n個(gè)詞的向量,對(duì)于嵌入矩陣的初始化采用隨機(jī)初始化。然后將處理后的數(shù)據(jù)輸入到帶GRU的神經(jīng)網(wǎng)絡(luò)中,最后一層為輸出層。
GRU網(wǎng)絡(luò)將輸入的向量轉(zhuǎn)換為隱藏向量h={h1,h2,…,hn},對(duì)于GRU網(wǎng)絡(luò),當(dāng)前時(shí)刻隱藏層狀態(tài)由上一時(shí)刻的隱藏層狀態(tài)和輸入決定,即:
(7)
直到最后的輸入值xn處理完畢。GRU神經(jīng)網(wǎng)絡(luò)將每一時(shí)刻輸入形成的向量輸出到輸出層,序列Y={y1,y2,…,yn}在輸出層中轉(zhuǎn)換成單詞序列Z={z1,z2,…,zn}輸出。輸出可定義為:
zx=Softmax(We×tanh(Wx+b1))
(8)
其中:We是embedding層輸出的嵌入矩陣,W是參數(shù)矩陣,b1是一個(gè)偏置單元,x是傳入的參數(shù)。
生成器的loss函數(shù)是規(guī)范化的反饋獎(jiǎng)勵(lì)函數(shù)與生成器輸出的乘積,生成器的loss函數(shù)如式(9)所示:
M=-log(gen_out(y)×n(y))
(9)
其中,gen_out(y)為生成器的輸出,n(y)為規(guī)范化的反饋獎(jiǎng)勵(lì)函數(shù),如公式(13)所示。
在剛開始進(jìn)行訓(xùn)練時(shí),首先隨機(jī)提供一個(gè)閾值r,找到一個(gè)最小的大于閾值r的值作為循環(huán)的開始點(diǎn),在循環(huán)過程中,將生成器中的loss作為指導(dǎo)輸入到GRU神經(jīng)網(wǎng)絡(luò)中進(jìn)行參數(shù)更新,共循環(huán)k次。
生成器流程圖如圖2所示。
圖2 生成過程流程圖
判別器仍使用GRU網(wǎng)絡(luò),將生成的數(shù)據(jù)與輸入的真實(shí)數(shù)據(jù)進(jìn)行對(duì)比,判別生成文本的真假,并提供反饋,因此判別器可看為一個(gè)二分類模型,將真實(shí)的數(shù)據(jù)標(biāo)簽設(shè)置為1,生成器生成的數(shù)據(jù)標(biāo)簽設(shè)置為0。判別器模型由Dense神經(jīng)層、Embedding層、隱藏層和GRU層組成。參數(shù)初始化后,首先將數(shù)據(jù)經(jīng)過簡單的Dense神經(jīng)層進(jìn)行特征提取,隨后輸入到Embedding層中進(jìn)行降維,降維后輸入到隱藏層,最后在GRU神經(jīng)網(wǎng)絡(luò)中進(jìn)行判別生成數(shù)據(jù)的真假。
在經(jīng)過對(duì)輸入數(shù)據(jù)進(jìn)行處理后,首先前向計(jì)算單個(gè)神經(jīng)元的輸出值,然后反向計(jì)算當(dāng)前的誤差項(xiàng)并將誤差項(xiàng)傳遞到上一層,根據(jù)誤差項(xiàng)本文采用Adam優(yōu)化器計(jì)算權(quán)重,最后利用得到的梯度進(jìn)行權(quán)重更新。本文計(jì)算當(dāng)前神經(jīng)元的輸出loss作為指導(dǎo)更新輸入的參數(shù),loss的計(jì)算是求判別器的輸出與0矩陣的交叉熵,判別器的loss公式如下:
L=-EX~data[log(f(x),0)]
(10)
其中f(x)是判別器的輸出,EX~data為真實(shí)數(shù)據(jù)X的期望函數(shù)。在參數(shù)更新后,其指導(dǎo)信號(hào)通過蒙特卡洛策略算法訓(xùn)練生成器模塊,而生成器根據(jù)指導(dǎo)信號(hào)的指導(dǎo)方向行動(dòng),并受到獎(jiǎng)勵(lì)。獎(jiǎng)勵(lì)公式如下:
dloss=eγk
(11)
reward=g(dloss×sigmoidf(x),k)
(12)
n(x)=reward/g(dloss,k)
(13)
其中,γ是反饋獎(jiǎng)勵(lì)參數(shù),本文選擇0.9,k為訓(xùn)練輪數(shù),g函數(shù)為計(jì)算反向累計(jì)和。
判別器網(wǎng)絡(luò)循環(huán)6次,生成器循環(huán)一次,即在每一次迭代訓(xùn)練中保證判別器的訓(xùn)練次數(shù)遠(yuǎn)大于生成器。這樣的設(shè)置可以將弱判別器組合成一個(gè)較強(qiáng)的判別器,提高生成數(shù)據(jù)的準(zhǔn)確率。
模型最終示意圖如圖3所示。
圖3 加入獎(jiǎng)勵(lì)的GRU對(duì)抗文本生成模型
本模型中加入蒙特卡洛機(jī)制,將判別器的輸出函數(shù)作為生成過程中的參數(shù)指導(dǎo),生成器根據(jù)設(shè)定的獎(jiǎng)勵(lì)函數(shù)進(jìn)行參數(shù)優(yōu)化,以此達(dá)到生成文本的信息更加豐富的效果。
為驗(yàn)證本文模型的效果,利用長篇英文小說《神探夏洛克》中的文字內(nèi)容進(jìn)行實(shí)驗(yàn)。實(shí)驗(yàn)環(huán)境及配置如表1所示。
表1 實(shí)驗(yàn)環(huán)境配置
在預(yù)處理階段,本文通過對(duì)原始數(shù)據(jù)去掉多余的標(biāo)點(diǎn)符號(hào)、分詞,將大寫字母轉(zhuǎn)為小寫等操作,獲得更好的原始訓(xùn)練數(shù)據(jù)。本實(shí)驗(yàn)的相關(guān)參數(shù)設(shè)置:詞匯量大約為100萬左右,隨機(jī)初始化所有參數(shù),使用Adam優(yōu)化器[22],初始學(xué)習(xí)率為0.01。
本文將調(diào)整了激活函數(shù)的GRU生成對(duì)抗網(wǎng)絡(luò)的算法與未調(diào)整的算法進(jìn)行對(duì)比,通過對(duì)比判別器、有監(jiān)督學(xué)習(xí)形式的生成器和無監(jiān)督學(xué)習(xí)形式的生成器的loss,展現(xiàn)調(diào)整后網(wǎng)絡(luò)的優(yōu)點(diǎn);采用最通用的BLEU分?jǐn)?shù)評(píng)估本GAN網(wǎng)絡(luò)的生成效果。BLEU算法[23]最初應(yīng)用于機(jī)器翻譯任務(wù)的譯文生成的質(zhì)量評(píng)測(cè)中,將生成譯文與人工翻譯譯文進(jìn)行對(duì)比,相似度越高則分?jǐn)?shù)越高,即譯文的質(zhì)量越好?;竟饺缦拢?/p>
(14)
其中,N表示選到的最大的N-gram匹配規(guī)則,Pn為對(duì)應(yīng)規(guī)則下的匹配程度,wn匹配權(quán)重,BP為過短懲罰項(xiàng),長度越短懲罰項(xiàng)越大。
調(diào)整后訓(xùn)練產(chǎn)生的loss結(jié)果如圖4所示,未調(diào)整的訓(xùn)練結(jié)果loss結(jié)果如圖5所示。
圖4 加入獎(jiǎng)勵(lì)的調(diào)整后GRU對(duì)抗模型loss
圖5 未調(diào)整GRU對(duì)抗模型loss
從圖4~圖5中可以看出,調(diào)整后訓(xùn)練的收斂速度變快,生成器和判別器在訓(xùn)練過程中比未改進(jìn)前可得到更多的信息,且訓(xùn)練時(shí)間也要短于原訓(xùn)練時(shí)間,最終的準(zhǔn)確率與原結(jié)果相比也沒有發(fā)生較大偏差。
為更好地描述文本生成模型的性能,本文采用累加的N-Gram分?jǐn)?shù)進(jìn)行評(píng)估,采用1-gram和2-gram各50%的比例進(jìn)行計(jì)算。改進(jìn)后的模型在長篇英文小說上BLEU的分?jǐn)?shù)表現(xiàn)如圖6所示,未改進(jìn)的模型的BLEU分?jǐn)?shù)表現(xiàn)如圖7表示。
圖6 加入獎(jiǎng)勵(lì)的調(diào)整后GRU對(duì)抗模型BLEU分?jǐn)?shù)
圖7 原GRU對(duì)抗模型BLEU分?jǐn)?shù)
從圖6~圖7中可以看出,調(diào)整后的模型在有監(jiān)督訓(xùn)練中表現(xiàn)得更加優(yōu)越,不僅收斂速度變快且BLEU平均分?jǐn)?shù)也上升了0.03左右,最高分?jǐn)?shù)甚至與無監(jiān)督學(xué)習(xí)形式訓(xùn)練的BLEU分?jǐn)?shù)不相上下。
為驗(yàn)證本模型的效果,對(duì)seqGAN模型進(jìn)行仿真并與本文提出的模型進(jìn)行對(duì)比。其中seqGAN模型中的BLEU分?jǐn)?shù)只顯示最終結(jié)果,同樣采用1-gram和2-gram各50%的比例進(jìn)行計(jì)算,最終得到BLEU的分?jǐn)?shù)為0.05021。seqGAN的BLEU分?jǐn)?shù)低主要是數(shù)據(jù)沒有邏輯性,生成的文本多是單詞,因此分?jǐn)?shù)相對(duì)來說偏低。
圖8中的loss變化是seqGAN模型第1000輪最后的loss分?jǐn)?shù),從圖中變化可看到最后單個(gè)小輪loss基本在0.5以下,采用平均值來估計(jì)整體的話loss整體偏大。
圖8 seqGAN模型的loss變化
從文本生成的結(jié)果來看,無監(jiān)督學(xué)習(xí)形式生成的文本要比有監(jiān)督生成的文本豐富性要好,有監(jiān)督生成的文本雖然從BLEU分?jǐn)?shù)來看分?jǐn)?shù)差不太多,但是從生成結(jié)果來看,在訓(xùn)練輪數(shù)較少的時(shí)候全是重復(fù)字母或者標(biāo)點(diǎn)符號(hào),沒有意義,訓(xùn)練輪數(shù)增加后,文本生成中多樣性增加,但是沒有正確的英文單詞生成;無監(jiān)督學(xué)習(xí)形式生成的文本在訓(xùn)練輪數(shù)較少的時(shí)候,多樣性要比有監(jiān)督的訓(xùn)練好,但是還沒有生成正確的單詞,訓(xùn)練輪數(shù)增加,正確的單詞數(shù)也隨即增加。經(jīng)過增加訓(xùn)練輪數(shù)發(fā)現(xiàn)模型在300輪次左右達(dá)到穩(wěn)定狀態(tài),但在訓(xùn)練輪次達(dá)到500、1000輪時(shí)模型效果沒有較大的改善,且訓(xùn)練時(shí)間增加。
總體上來說,相比于原模型,改進(jìn)后的模型不管是在收斂速度還是在訓(xùn)練結(jié)果上都要更加優(yōu)越,有著不錯(cuò)的提升。
針對(duì)文本生成問題,本文提出了一種基于改進(jìn)的GRU神經(jīng)網(wǎng)絡(luò)的GAN網(wǎng)絡(luò)模型,詳細(xì)展示了改進(jìn)的GRU神經(jīng)網(wǎng)絡(luò)的GAN網(wǎng)絡(luò)是如何應(yīng)用在文本生成領(lǐng)域。本文模型改進(jìn)GRU神經(jīng)網(wǎng)絡(luò)的激活函數(shù),并加入強(qiáng)化反饋增加文本生成內(nèi)容的真實(shí)性。實(shí)驗(yàn)結(jié)果表明,本文模型拓展了GAN神經(jīng)網(wǎng)絡(luò)生成器和判別器選擇的多樣性,改進(jìn)的模型比原來的生成模型收斂效果更好,運(yùn)算時(shí)間更短,驗(yàn)證了模型的有效性。
下一步工作將探索如何改進(jìn)模型將文本生成的效果進(jìn)一步提升,增強(qiáng)模型的靈活性,進(jìn)一步提高文本生成效果。