讀論文《Toward Controlled Generation of Text》

夢柏發表於2018-08-11

Toward Controlled Generation of Text這篇論文是Zhiting Hu釋出在ICML2017上的paper。這篇paper主要乾的事情就是其題目中所描述的,生成可以控制方向的文字,方向也就是文字的各種屬性。

這篇paper中提出來的結構是基於VAE的,將VAE和一個判別器D結合的結構。文中剛開始便提到,如果要用VAE做定向的文字生成,必須克服兩個困難,一是NLP問題是連續問題不可導,二是VAE中的隱變數z中各項屬性是相互糾纏在一起的,不能單獨的控制單個屬性的定向生成。為了克服這兩個問題,作者在優化的時候採取了一些措施,下面會提到。

為了實現定向文字生成,paper中採取了用一個新的變數c與原來VAE中的隱變數z相結合,其中c關聯著句子中想要控制的特定屬性,而z則控制著其他屬性。通過變數的分佈(z,c)來生成句子後作為判別器D的輸入,而D又根據這些輸入來訓練改變c的分佈,整個模型的結構示意圖如下:

圖中如果沒有下面的判別器D的話,就是一個原始的VAE,而判別器加入是為了得出c的分佈。圖中藍色和紅色的箭頭分別表示的是模型對於獨立性的判別方法和優化方法。就優化方法而言,整個模型的優化其實有點像wake-sleep演算法,文章中也有提到過,就是交替優化VAE和判別器D,並且有一種競爭優化的感覺。

具體來講,對於生成器G,其生成輸出的過程可描述為:

而每一步都直接取特定的單詞作為輸出的話,單詞間的離散性會導致整個過程的不可微,也就沒法優化後面的判別器D。為了解決這個問題,paper中將每一步改為一個softmax 的概率值,使得其變成一個可導的連續量,如下:

式中ot為輸出,而τ為初始值1的溫度值,訓練過程中由1慢慢退火到0,從而將從連續分佈慢慢逼近近似離散分佈。

確定了z和c的分佈後,標準VAE的loss如下:

需要注意的是,這個時候是將判別器D和c的分佈qD(c|x)固定後進行計算的,即這個過程並不訓練判別器D。但是對於VAE中生成器G生成的文字,判別器此時應當判別其是否能夠與我們希望的屬性相匹配,因此加入一項損失函式,如下:

 

這項損失函式即為計算生成的句子與希望的c的分佈之間的交叉熵,從而優化生成器G,當然,此時D也是不進行優化的。

paper中接下來又提出了很亮的一點。作者為了保證屬性之間的獨立性,使其不產生相互干擾,即D只優化目標屬性而不會對其他屬性進行優化,又特意的強制其他不相干的屬性要在隱變數z中被完全的表示出來。而且這個任務作者並沒有去訓練一個新的判別器,而是直接將VAE中的編碼器E拿過來使用的。文中提到,因為E對於z的作用和D對於c的作用可以視為一樣的,都是將文字中的屬性抽出來得到其分佈。因此,第三項loss表示為:

綜合這三點,訓練編碼器E和生成器G的損失函式為:

其中λ為權重因子。

而關於判別器的訓練,是用半監督學習的方法得出的。即少量的有屬性標籤的樣本和大量的生成器生成的無標籤的樣本進行訓練,loss分別如下:

式中H(qD(c`|x))是條件分佈qD的熵,β為權重因子,paper中提到熵這一項的加入可以使得判別器在預測標籤方面具有更高的可信度,因此對於判別器D的損失函式如下:

其中λ為權重因子。

既然已經知道VAE和判別器D各自的損失函式,就可以對其進行優化了。具體優化過程為交替的優化VAE和判別器,演算法如下:

演算法中Eq(4,8,11)分別為上面提到的不同的loss函式。

關於實驗,paper中做了情感(p/n)和時態這兩個屬性的實驗。

其中情感屬性採用的資料集為SST-full,SST-small(作者自己構建的一個子集,為了測試監督資料可以有多麼少),Lexicon(詞典,為了驗證訓練判別器D只需要單詞級別的文字也可以),IMDB。而驗證標準為將模型生成的文字在state-of-the-art的情感分類器上進行測試,看分類準確性和先驗的c的重合程度。實驗中以S-VAE為baseline,並在各個資料集的準確度上都有了3%~4%的提升。

除了這個標準外,文章中還採取了一個比較隱形的標準。因為判別器D和VAE是共同進行交替訓練的,可以認為有一個競爭的關係,所以更好的G必然會使得訓練出來的D更好。反過來,可以用D的效能來反映G的效能。因此文中將G生成的句子作為訓練語料訓練出了判別器D,並且通過評判D的準確性來評判G的效能。而結果證明加入了正則化項和隱變數c會使得判別器的效能提升,並且也超過了S-VAE的baseline。

而關於時態,因為沒有時態標籤的資料集,所以作者將一個時態標籤的詞典作為監督學習的材料進行訓練了。最後的結果是通過例子展示的,即只控制c的改變,模型會生成句意基本保持一致而時態不同的輸出。作者也通過比較加不加獨立性強制,證明了加了強制後輸出的句子不會產生其他屬性的改變,證明了強制約束的有效性。

這篇論文最大的貢獻在於將VAE中的屬性相互交錯在一起隱變數z,通過加入特定判別器的方法,成功的將z中的特定屬性c抽出來,從而生成具有特定屬性的文字。並且各個屬性之間是可以單獨進行訓練,然後隨意組合的,而且半監督學習要求的樣本數量很少,形式也沒有什麼要求,甚至可以是單詞和短語,這就使得訓練對樣本的需求要求大大的降低了,並且可以並行的訓練很多個屬性。

而整篇paper從結構的搭建,到連續逼近離散的處理,再到模型的優化演算法,包括施加獨立性的強制約束和通過判別器D的效能來隱性的反應G的效能,都是閃光之處,也是十分值得去借鑑和學習的。

這篇paper現在還存在的問題就是句子長度太短,只有15個,並且沒有給出如何將獨立的不同屬性組合起來的具體方法。而想要將這篇paper中的結構運用到其他NLP問題上,比如對話系統等等,則需要進一步的實驗,以及對於模型架構的新的改進。

 

參考文獻

Hu Z, Yang Z, Liang X, et al. Toward Controlled Generation of Text[J]. 2018.

相關文章