本文章對(duì)文本生成領(lǐng)域一些常見(jiàn)的模型進(jìn)行了梳理和介紹。Seq2Seq 是一個(gè)經(jīng)典的文本生成框架,其中的Encoder-Decoder思想貫徹文本生成領(lǐng)域的整個(gè)過(guò)程。Pointer-Generator Networks是一個(gè)生成式文本摘要的模型,其采用的兩種經(jīng)典方法對(duì)于其他文本生成領(lǐng)域也有很重要的借鑒價(jià)值。SeqGAN模型將強(qiáng)化學(xué)習(xí)和GAN網(wǎng)絡(luò)引入到文本生成的過(guò)程中,是對(duì)文本生成領(lǐng)域的一個(gè)方向上的嘗試。GPT 對(duì)于文本生成領(lǐng)域有重大意義,是在文本生成領(lǐng)域使用預(yù)訓(xùn)練模型的一個(gè)重大嘗試。生成句子是否符合正常語(yǔ)句表達(dá)也是文本生成領(lǐng)域的一個(gè)重大問(wèn)題,生成的句子不僅需要沒(méi)有語(yǔ)法問(wèn)題,同時(shí)符合正常的表達(dá)方式和邏輯也是一個(gè)很重要的評(píng)價(jià)指標(biāo),最后一節(jié)將介紹一種方法來(lái)對(duì)該指標(biāo)進(jìn)行評(píng)價(jià)。
1 分享內(nèi)容
介紹 Seq2Seq 模型
介紹 Pointer-Generator Networks模型
介紹 SeqGAN 模型
介紹 GPT-2 預(yù)訓(xùn)練模型
介紹如何判斷生成句子是否符合正常語(yǔ)句表達(dá)
2 Seq2Seq模型介紹
seq2seq 是一個(gè) Encoder–Decoder 結(jié)構(gòu)的網(wǎng)絡(luò),它的輸入是一個(gè)序列,輸出也是一個(gè)序列, Encoder 中將一個(gè)可變長(zhǎng)度的信號(hào)序列變?yōu)楣潭ㄩL(zhǎng)度的向量表達(dá),Decoder 將這個(gè)固定長(zhǎng)度的向量變成可變長(zhǎng)度的目標(biāo)的信號(hào)序列。
快樂(lè)大本營(yíng)有一期節(jié)目,嘉賓之間依次傳話,有趣的是傳到后面經(jīng)常會(huì)出現(xiàn)意思完全相反的現(xiàn)象,這個(gè)傳話可以類比成一個(gè)Encoder–Decoder過(guò)程。每個(gè)人對(duì)上一個(gè)人的聲音會(huì)在腦海里面形成一個(gè)理解,這個(gè)過(guò)程類似于Encoder,即將上一個(gè)人的聲音編碼成一個(gè)腦海里面形成的理解。最后我們把對(duì)腦海里面形成的理解用聲音表達(dá)出來(lái),這個(gè)過(guò)程類似于Decoder階段。
2.1 Seq2Seq 工作流程
Seq2Seq的經(jīng)典應(yīng)用場(chǎng)景是機(jī)器翻譯。如下是 Seq2Seq 模型工作的流程:
最基礎(chǔ)的 Seq2Seq模型 包含了三個(gè)部分, Encoder、Decoder 以及連接兩者的中間狀態(tài)向量 C,Encoder通過(guò)學(xué)習(xí)輸入,將其編碼成一個(gè)固定大小的狀態(tài)向量 C(也稱為語(yǔ)義編碼),繼而將 C 傳給Decoder,Decoder再通過(guò)對(duì)狀態(tài)向量 C 的學(xué)習(xí)來(lái)進(jìn)行輸出對(duì)應(yīng)的序列。
Encoder和decoder里面包含多個(gè)RNN 單元,通常是 LSTM 或者 GRU 。Basic Seq2Seq 有很多弊端的,首先 Encoder 將輸入編碼為固定大小狀態(tài)向量(hidden state)的過(guò)程實(shí)際上是一個(gè)“信息有損壓縮”的過(guò)程。如果信息量越大,那么這個(gè)轉(zhuǎn)化向量的過(guò)程對(duì)信息造成的損失就越大。同時(shí),隨著 sequence length的增加,意味著時(shí)間維度上的序列很長(zhǎng),RNN 模型也會(huì)出現(xiàn)梯度彌散。最后,基礎(chǔ)的模型連接 Encoder 和 Decoder 模塊的組件僅僅是一個(gè)固定大小的狀態(tài)向量,這使得Decoder無(wú)法直接去關(guān)注到輸入信息的更多細(xì)節(jié)。
由于 Basic Seq2Seq 的種種缺陷,隨后引入了 Attention 的概念,Attention在decoder過(guò)程中的每一步,都會(huì)給出每個(gè)encoder輸出的特定權(quán)重,然后根據(jù)得到權(quán)重加權(quán)求和,從而得到一個(gè)上下文向量,這個(gè)上下文向量參與到decoder的輸出中,這樣大大減少了上文信息的損失,能夠取得更好的表現(xiàn),對(duì)于attention如何在Seq2Seq中使用,下一節(jié)將會(huì)有更加詳細(xì)的講解。
3 Pointer-Generator Networks模型
Pointer-Generator Networks 用于生成式文本摘要領(lǐng)域,其相比較于普通的Seq2Seq模型,主要的改點(diǎn)在于
(1) 避免SeqSeq模型在摘要生成時(shí)經(jīng)常出現(xiàn)的重復(fù)詞現(xiàn)象
(2)解決了OOV現(xiàn)象,即生成的詞除了包含上下文已有的詞以外,也可以生成上下文中沒(méi)有的詞。
3.1 基線 Seq2Seq+Attention 模型
這里是一個(gè)標(biāo)準(zhǔn)的attention計(jì)算。encoder的第i個(gè)hidden_state,是t時(shí)刻decoder的狀態(tài),是學(xué)習(xí)參數(shù)。attention計(jì)算一般有兩種方式,第一種方式是先經(jīng)過(guò)decoder單元(LSTM或者GRU,這里使用的LSTM)之后,再使用其輸出來(lái)計(jì)算attention。第二種則表示使用上一個(gè)單元(t-1時(shí)刻)的hidden_state先計(jì)算attention,得到context vector,將其作為t時(shí)刻單元的輸入。該模型使用的是第二種方式。
(1)
(2)
(3)
利用LSTM單元的輸出和context vector()的contact來(lái)計(jì)算詞的概率,并定義其損失函數(shù)。
(4)
(5)
(6)
(7)
3.2 Pointer-generator network 網(wǎng)絡(luò)
增加,區(qū)間范圍[0,1],表示decoder網(wǎng)絡(luò)生成一個(gè)vocab中的詞,還是從原文本中抽取一個(gè)詞的概率。當(dāng)>=0.5時(shí),=0,當(dāng)其小于0.5時(shí),=0。的計(jì)算公式如下所示:
(8)
(9)
3.3 Coverage mechanism:
實(shí)現(xiàn)方式,在計(jì)算t時(shí)刻的attention,即context vector 時(shí),不僅僅考慮t時(shí)刻的hidden_state, 同時(shí)考慮已經(jīng)生成的內(nèi)容,這里通過(guò)0到t-1刻的attention的權(quán)重來(lái)體現(xiàn),權(quán)重比較大的詞表示已經(jīng)考慮過(guò)了,在后面的計(jì)算過(guò)程中減少其比重。計(jì)算公式:(10)
同時(shí),式(1)中計(jì)算權(quán)重矩陣的公式也做了相應(yīng)修改,如式(11)。
(11)
定義了coverage loss,這在實(shí)驗(yàn)部分被證明是非常有必要的。關(guān)于這個(gè)損失函數(shù)的定義,取得是當(dāng)前詞前面所有時(shí)刻的累計(jì)權(quán)重和當(dāng)前時(shí)刻權(quán)重的最小值,這種方式綜合考慮到一個(gè)詞在文中多次出現(xiàn)和一個(gè)詞在當(dāng)前狀態(tài)最大概率出現(xiàn)的的情況,既不完全偏向于多次出現(xiàn)的詞,同時(shí)也不過(guò)分考慮當(dāng)前狀態(tài)最大概率出現(xiàn)的詞。
(12)
整體的損失函數(shù):
(13)
4 SeqGAN 模型介紹
核心思想是將GAN與強(qiáng)化學(xué)習(xí)的Policy Gradient算法結(jié)合到一起,這也正是D2IA-GAN在處理Generator的優(yōu)化時(shí)使用的技巧。
SeqGAN的出發(fā)點(diǎn)也是意識(shí)到了標(biāo)準(zhǔn)的GAN在處理像序列這種離散數(shù)據(jù)時(shí)會(huì)遇到的困難,主要體現(xiàn)在兩個(gè)方面:Generator難以傳遞梯度更新,Discriminator難以評(píng)估非完整序列。
對(duì)于前者,給出的解決方案相對(duì)比較熟悉,即把整個(gè)GAN看作一個(gè)強(qiáng)化學(xué)習(xí)系統(tǒng),用Policy Gradient算法更新Generator的參數(shù);對(duì)于后者,則借鑒了蒙特卡洛樹(shù)搜索(Monte Carlo tree search,MCTS)的思想,對(duì)任意時(shí)刻的非完整序列都可以進(jìn)行評(píng)估。
對(duì)于強(qiáng)化學(xué)習(xí)和對(duì)抗神經(jīng)網(wǎng)絡(luò)在文本生成領(lǐng)域的結(jié)合,可以做個(gè)簡(jiǎn)單的類比,從而可以加深對(duì)SeqGAN的理解。我們可以將文本生成過(guò)程中的生成器,理解成強(qiáng)化學(xué)習(xí)的策略器,每次選擇生成詞可以看作是強(qiáng)化學(xué)習(xí)過(guò)程中的動(dòng)作選擇,判別器可以看作是強(qiáng)化學(xué)習(xí)的環(huán)境,其作用是對(duì)每次的動(dòng)作給出相應(yīng)的反饋。
4.1 SeqGAN 數(shù)學(xué)推導(dǎo)過(guò)程
根據(jù)強(qiáng)化學(xué)習(xí)相關(guān)知識(shí),我們可以定義SeqGAN的的回報(bào)函數(shù)。優(yōu)化過(guò)程就是最大化強(qiáng)化學(xué)習(xí)的回報(bào)函數(shù)
(1)
由于判別器只能評(píng)價(jià)一個(gè)完成序列,因此可以計(jì)算前T-1個(gè)序列已經(jīng)生成的情況下,最后一個(gè)動(dòng)作的Q值。
(2)
但是在強(qiáng)化學(xué)習(xí)的過(guò)程中不僅需要的是最后一個(gè)動(dòng)作的Q值,而且需要任意時(shí)刻的Q值,因此,對(duì)于一個(gè)任意時(shí)刻的Q值,可以通過(guò)MC采樣的方式來(lái)進(jìn)行近似計(jì)算,MC會(huì)采樣多個(gè)完整的序列,通過(guò)計(jì)算采樣后的完整序列回報(bào)的均值,當(dāng)作當(dāng)前時(shí)刻的Q值。
(3)
判別器的訓(xùn)練,判別器的訓(xùn)練目標(biāo)是給出真實(shí)樣本和生成樣本的分?jǐn)?shù),目標(biāo)是最大化真實(shí)樣本的分?jǐn)?shù),最小化生成樣本的分?jǐn)?shù),下面是其損失函數(shù)的公式。
(4)
將(1)中的公式展開(kāi)成按照時(shí)間累計(jì)求和的形式,可以得到下面的的公式
(5)
將任意時(shí)刻的期望回報(bào)用累計(jì)回報(bào)近似代替,可以得到下面公式。
(6)
利用反向傳播更新生成器的參數(shù)。
(7)
4.2 SeqGAN缺點(diǎn)
SeqGAN模型主要耗時(shí)操作是在MC的采樣過(guò)程,因?yàn)閷?duì)于每一個(gè)時(shí)刻的累計(jì)回報(bào)都是通過(guò)采樣的方式的進(jìn)行估算近似,當(dāng)需要生成的序列比較長(zhǎng)時(shí),采樣需要的次數(shù)會(huì)急速的增長(zhǎng)。同時(shí)當(dāng)采樣次數(shù)比較少的情況下,近似估計(jì)的結(jié)果會(huì)偏差較大。
5 GPT-2 預(yù)訓(xùn)練模型
bert 模型雖然在文本分類領(lǐng)域取得了驚人的效果,但是考慮到BERT是一個(gè)雙向語(yǔ)言模型,充分利用了上下文信息,所以在文本分類領(lǐng)域效果優(yōu)于GPT無(wú)可厚非,但是BERT模型也正是因?yàn)殡p向的語(yǔ)言模型的特點(diǎn),導(dǎo)致其在文本生成領(lǐng)域表現(xiàn)不佳。由于文本生成本身的特性,每次生成時(shí)候,只能看見(jiàn)上文,并不能看見(jiàn)下文,所以并不適合雙向的語(yǔ)言模型。GPT-2在文本生成領(lǐng)域的驚人表現(xiàn),讓我們不禁想要去探索,是因?yàn)槭裁词沟肎PT-2在本文生成領(lǐng)域表現(xiàn)如此強(qiáng)力,下面我們對(duì)比BERT模型來(lái)詳細(xì)介紹GPT-2。
從結(jié)構(gòu)上來(lái)說(shuō)GPT-2 是使用「transformer 解碼器模塊」構(gòu)建的,而 BERT 則是通過(guò)「transformer 編碼器」模塊構(gòu)建的。二者一個(gè)很關(guān)鍵的不同之處在于:GPT-2 就像傳統(tǒng)的語(yǔ)言模型一樣,一次只輸出一個(gè)單詞(token)。這種模型之所以效果好是因?yàn)樵诿總€(gè)新單詞產(chǎn)生后,該單詞就被添加在之前生成的單詞序列后面,這個(gè)序列會(huì)成為模型下一步的新輸入。這種機(jī)制叫做自回歸(auto-regression),同時(shí)也是令 GPT-2模型效果拔群的重要思想。
GPT-2,以及一些諸如 TransformerXL 和 XLNet 等后續(xù)出現(xiàn)的模型,本質(zhì)上都是自回歸模型,而 BERT 則不然。這就是一個(gè)權(quán)衡的問(wèn)題了。雖然沒(méi)有使用自回歸機(jī)制,但 BERT 獲得了結(jié)合單詞前后的上下文信息的能力,從而取得了更好的效果。XLNet 使用了自回歸,并且引入了一種能夠同時(shí)兼顧前后的上下文信息的方法。
5.1 帶掩碼的注意力模型
能夠清楚地區(qū)分 BERT 使用的自注意力(self-attention)模塊和 GPT-2 使用的帶掩碼的自注意力(masked self-attention)模塊很重要。普通的自注意力模塊允許一個(gè)位置看到它右側(cè)單詞的信息(如下左圖),而帶掩碼的自注意力模塊則不允許這么做,他會(huì)將該詞后面的詞通過(guò)掩碼的方式將其屏蔽掉。
利用掩碼方式一個(gè)最大的優(yōu)勢(shì)在于,我們后續(xù)的注意力機(jī)制模塊,可以通過(guò)矩陣運(yùn)算的方式直接進(jìn)行,大大優(yōu)化了計(jì)算效率。
5.2 只包含解碼器的模塊
這些解碼器模塊和 transformer 原始論文中的解碼器模塊相比,并沒(méi)有很大的差別,僅僅只是將第二層的自注意力層給去掉,原本的自注意力層中,會(huì)把encoder層的輸出和上一層的結(jié)果進(jìn)行注意力計(jì)算。但是GPT-2使用的是循環(huán)結(jié)構(gòu),每次把新生成的詞添加到原有的序列后面,然后再重新參與計(jì)算。通過(guò)這種方式,將encoder給去掉了。這樣OpenAI 的 GPT-2 模型就用了這種只包含編碼器(decoder-only)的模塊。
5.3 GPT-2 內(nèi)部生成機(jī)制
給定GPT-2一點(diǎn)提示,然后GPT-2根據(jù)提示開(kāi)始進(jìn)行生成,每次只能生成一個(gè)單詞,然后將生成的單詞加入到提示中,層層開(kāi)始處理,最終生成一個(gè)完整的序列。但是會(huì)存在一個(gè)問(wèn)題,每次選擇第一個(gè)單詞,這樣的生成序列變成唯一了,只有選擇第二個(gè)或者第三個(gè)推薦詞以后,才能跳出唯一的現(xiàn)象,因此GPT-2有一個(gè)top-k參數(shù),模型會(huì)從概率前k大的單詞中選擇下一個(gè)單詞。
6 如何判斷生成句子是否符合正常語(yǔ)句表達(dá)
在我們生成的句子中,總是存在一些句子看起來(lái)通順,但是實(shí)際并沒(méi)有意義,或者存在邏輯錯(cuò)誤。比如“北京是新中國(guó)的首都”,這句話是沒(méi)有問(wèn)題的,但是我們將北京替換成南京,顯然這樣的句子并沒(méi)有語(yǔ)法錯(cuò)誤,但是如果生成的句子是這樣的話,很可能會(huì)被請(qǐng)去喝茶。
句子符合正常語(yǔ)句表達(dá),對(duì)于機(jī)器而言我們應(yīng)該怎么評(píng)價(jià)呢,顯然,如果我們注意到新中國(guó)、首都這兩個(gè)詞,那么我們能夠很快判斷出現(xiàn)北京明顯比南京更加常見(jiàn)。按照這個(gè)思想,可以把這個(gè)問(wèn)題換個(gè)角度來(lái)描述,我們是希望在前面詞出現(xiàn)的條件下,后續(xù)詞出現(xiàn)的概率應(yīng)該最大,并且后面詞出現(xiàn)的前提下,前面詞出現(xiàn)的概率也應(yīng)該最大。
6.1 模型損失函數(shù)
對(duì)于一個(gè)給定的序列Y{}我們可以定義其損失為:
其中對(duì)于Loss函數(shù)而言是一個(gè)超參數(shù),我們可以通過(guò)調(diào)整其來(lái)達(dá)到一個(gè)更好的效果,通常而言,根據(jù)總體序列的長(zhǎng)度來(lái)選擇一個(gè)合理的。
6.2 判別模型的選擇
當(dāng)序列比較長(zhǎng)時(shí),推薦使用Transform結(jié)構(gòu)模型,考慮到長(zhǎng)文本需要預(yù)測(cè)的次數(shù)比較多,Transform比起RNN結(jié)構(gòu)更加有利于并行運(yùn)算,速度會(huì)更快。
-
模型
+關(guān)注
關(guān)注
1文章
3121瀏覽量
48663 -
文本
+關(guān)注
關(guān)注
0文章
118瀏覽量
17057 -
強(qiáng)化學(xué)習(xí)
+關(guān)注
關(guān)注
4文章
265瀏覽量
11199
原文標(biāo)題:AI也能精彩表達(dá):幾種經(jīng)典文本生成模型一覽
文章出處:【微信號(hào):zenRRan,微信公眾號(hào):深度學(xué)習(xí)自然語(yǔ)言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論