1. 程式人生 > >GAN在自然語言處理中的應用

GAN在自然語言處理中的應用

“深度解讀:GAN模型及其在2016年度的進展”[1]一文對過去一年GAN的進展做了詳細介紹,十分推薦學習GAN的新手們讀讀。這篇文章主要介紹GAN在NLP裡的應用(可以算是論文解讀或者論文筆記),並未涉及GAN的基本知識 (沒有GAN基礎知識的小夥伴推薦先看[1],由於本人比較懶,就不在這裡贅述GAN的基本知識了J)。由於很長時間沒有寫中文文章了,請各位對文章中不準確的地方多多包涵、指教。

雖然GAN在影象生成上取得了很好的成績,GAN並沒有在自然語言處理(NLP)任務中取得讓人驚喜的成果。 其原因大概可以總結為如下幾點:

  • 原始GAN主要應用實數空間(連續型資料)上,在生成離散資料(texts)這個問題上並不work。GAN 理論的提出者Ian Goodfellow 博士這樣回答來這個問題問題:“GANs 目前並沒有應用到自然語言處理(NLP)中,最初的 GANs 僅僅定義在實數領域,GANs 通過訓練出的生成器來產生合成數據,然後在合成數據上執行判別器,判別器的輸出梯度將會告訴你,如何通過略微改變合成數據而使其更加現實。一般來說只有在資料連續的情況下,你才可以略微改變合成的資料,而如果資料是離散的,則不能簡單的通過改變合成數據。例如,如果你輸出了一張圖片,其畫素值是1.0,那麼接下來你可以將這個值改為1.0001。如果輸出了一個單詞“penguin”,那麼接下來就不能將其改變為“penguin + .001”,因為沒有“penguin +.001”這個單詞。 因為所有的自然語言處理(NLP)的基礎都是離散值,如“單詞”、“字母”或者“音節”, NLP 中應用 GANs是非常困難的。一般而言,採用增強學習演算法。目前據我所知,還沒有人真正的開始研究利用增強演算法解決 NLP 問題。”

  • 在生成text時,GAN對整個文字序列進行建模打分。對於部分(partially)生成的序列,十分難判斷其在之後生成整個 (fully) 序列時的分數。

  • 另一個潛在的挑戰涉及RNN的性質(生成文字大多采用RNN模型)。假設我們試圖從latent codes生成文字,error就會隨著句子的長度成指數級的累積。最開始的幾個詞可能是相對合理的,但是句子質量會隨著句子長度的增加而不斷變差。另外,句子的長度是從隨機的latent representation生成的,所以句子長度也是難以控制。

下面我將主要介紹和分析最近閱讀過的將GAN應用於NLP中的一些論文:

1. Generating Text via Adversarial Training

  • 論文連結:http://people.duke.edu/~yz196/pdf/textgan.pdf

  • 這是2016年的 NIPS GAN Workshop 上的一篇論文, 嘗試將 GAN 理論應用到了文字生成任務上。 文中的方法比較簡單,具體可以總結為:

  • 以遞迴神經網路(LSTM)作為GAN的生成器(generator)。其中,用光滑近似(smooth approximation)的思路來逼近 LSTM 的輸出。結構圖如下:

      

  • 本文的目標函式和原始GAN有所不同,文中採用了feature matching的方法 。迭代優化過程包含以下兩個步驟:

其中式 (6) 為標準GAN的優化函式,式 (7) 為feature matching的優化函式。

  • 本文的初始化非常有意思,特別是在判別器的預訓練方面,利用原始的句子和該句子中交換兩個詞的位置後得到的新句子進行判別訓練。(在初始化的過程中,運用逐點分類損失函式對判別器進行優化)。這非常有意思,因為將兩個單詞互換位置,輸入的資料資訊實際上是基本相同的。比如,大多數卷積計算最終會得出完全相同的值。

  • 本文生成器的更新頻率是判別器的更新頻率的5倍,這與原始GAN的設定恰好相反。這是因為LSTM比CNN的引數更多,更難訓練。

  • 然而,本文生成模型 (LSTM) decode階段有exposure bias問題,即在訓練過程中逐漸用預測輸出替代實際輸出作為下一個詞的輸入。

2. SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient

  • 論文連結:https://arxiv.org/pdf/1609.05473.pdf

  • 論文原始碼:LantaoYu/SeqGAN

  • 文字將誤差作為一種增強學習的獎勵,以一種前饋的方式訓練,用增強的學習的探索模式去更新G網路。

  • 主要內容:這篇論文將序列生成過程當作一個sequential decision making過程。如下圖:

      

(a) 其中左圖為GAN網路訓練的步驟1,判別器D主要用來區分真實樣本和偽造樣本,這裡的判別器D是用CNN來實現的。

(b) 右圖為GAN網路訓練的步驟2, 根據判別器D回傳的判別概率回傳給生成器G,通過增強學習的方法來更新生成器G,這裡的的生成器G是用LSTM來實現的.

(c) 因為G網路的更新策略是增強學習,增強學習的四個要素state, action, policy, reward分別為:state 為現在已經生成的tokens (當前timestep之前LSTM decoder的結果), action是下一個即將生成的token (當前解碼詞), policy為GAN的生成器G網路,reward為GAN的判別器D網路所生成的判別概率。其中,reward採用以下方法來近似:

  

本過程特點:即當解碼到t時,即對後面T-t個timestep採用蒙特卡洛搜尋搜尋出N條路徑,將這N條路徑分別和已經decode的結果組成N條完整輸出,然後將D網路對應獎勵的平均值作為reward. 因為當t=T時無法再向後探索路徑,所以直接以完整decode結果的獎勵作為reward。

(d) 對於RL部分,本文采用了policy gradient方法。 根據policy gradient理論,生成器G的目標函式可以表示如下:

求導結果為: (詳細推導過程請看原論文附頁)

(e) 每隔一段時間,當生成更多的更逼真的句子後,重新訓判別器D,其中判別器的目標函式表示如下:

演算法結構圖可以表示為如下:

實驗

實驗部分主要分為合成數據實驗和現實資料實驗。

(a) 合成數據實驗: 隨機初始一個LSTM生成器A,隨機生成一部分訓練資料,來訓練各種生成模型.

評判標準為:負對數似然(交叉熵) NLL. 詳細實驗設定可以參看原論文。

(b) 現實資料實驗:主要展示中文詩句生成,奧巴馬演講生成,音樂生成的結果。實驗資料分別為中文詩歌資料集 (16,394首絕句),奧巴馬演講資料集 (11,092 段落), Nottingham音樂資料集 (695首歌)。評測方法為BLEU score, 實驗結果如下:

文中並未展示模型生成的詩歌等, 具體效果如何?

3. Adversarial Learning for Neural Dialogue Generation

  • 論文連結:https://arxiv.org/pdf/1701.06547.pdf

  • 論文原始碼:jiweil/Neural-Dialogue-Generation

  • 這篇論文是2017年1月26號上傳到arxiv上的,屬於最新的GAN用於NLP的論文。文中主要用對抗性訓練 (adversarial training) 方法來進行開放式對話生成 (open-domain dialogue generation)。文中把這項任務作為強化學習(RL)問題,聯合訓練生成器和判別器。和SeqGAN一樣,本文也是使用判別器D的結果作為RL的reward部分,這個reward用來獎勵生成器G,推動生成器G產生的對話類似人類對話。

  • 總體來說,本文的思路和SeqGAN是大體一樣的,但是有幾處不同和改進的地方:

(a) 因為本文是用於開放式對話生成,所以文中的生成器採用seq2seq模型 (而非普通的LSTM模型)。 判別器則採用了hierarchical encoder (而非CNN)。

(b) 採取了兩種方法為完全生成或者部分生成的序列計算reward。除了 Monte Carlo search (與SeqGAN相似) 方法,本文新提出了一個能對部分生成的序列進行reward計算的方法。使用所有完全 (fully) 和部分 (partially) 解碼的序列來訓練判別器會造成overfitting。早期產生的部分(partially)序列會出現在許多的訓練資料中,比如生成的第一個token y_1將會出現在所有的部分生成 (partially generated) 的序列裡。所以本文提出僅僅分別從正(positive)序列 y+ 和負(negative)序列y-的每個子序列中隨機地選取一個 sample來訓練判別器D。這個方法比Monte Carlo search更快速,但是也會使得判別器更弱,更不準確。

(c) 在SeqGAN中,生成器只能間接的通過判別器生成的reward來獎勵或者懲罰自己所產生的序列。而不能直接從 gold-standard序列中直接獲取資訊。 這種訓練方式是脆弱的,一旦生成器在某個訓練batch中變壞,判別器將會很容易對生成的句子進行判斷 (比如reward為0 ),此時生成器就會迷失。生成器只知道現在生成的句子是壞的,但是並不知道如何調整才能使得生成的句子變好。為了解決這個問題,在生成器的更新過程中,本文輸入了human-generated responses。對於這些human-generated responses, 判別器可以將其reward設定為1。這樣生成器可以在上述情況下仍能生成好的responses。

(d) 訓練過程中,有些針對dialogue system的設定(trick)。這部分內容,讀者可以參考Jiwei Li之前的關於dialogue system的論文。

  • 部分實驗結果:

      

  • 值得思考的地方:文中只嘗試用判別器的結果作為reward, 結合 原文作者之前在dialogue system文中提出的其他reward機制(e.g., mutual information)會不會提高效果?

4. GANs for sequence of discrete elements with the Gumbel-softmax distribution

  • 論文連結:https://arxiv.org/pdf/1611.04051.pdf

  • 相比前面兩篇論文,本文在處理離散資料這個問題上則比較簡單暴力。離散資料 (用one-hot方法表示)一般可以從多項式取樣取得,例如由softmax函式的輸出p = softmax(h)。 根據之前的概率分佈,以p的概率進行取樣y的過程等價於:y=one_hot(argmax_i(h_i+g_i)) , 其中g_i是服從Gumbel distribution (with zero location and unit scale)。然而one_hot(argmax(.)) 是不可微分的。與原始GAN不同,作者提出了一種方法來近似上面的式子: y = softmax(1/ r (h + g))。這個公式是可以微分的。演算法結構如下:

      

  • 本文的實驗部分做得比較粗糙,只展示了生成得context-free grammar, 並未在生成其他文字資料上做實驗。

  • 總的來說,這篇論文字身方法還值得改進,也可以值得借鑑下。

5. Connecting generative adversarial network and actor-critic methods

  • 論文連結:https://arxiv.org/pdf/1610.01945.pdf

  • Actor-critic methods [2]: 許多RL方法 (e.g., policy gradient) 只作用於policy 或者 value function。Actor-critic方法則結合了policy-only和value function-only 的方法。 其中critic用來近似或者估計value function,actor 被稱為policy structure, 主要用來選擇action。Actor-critic是一個on-policy的學習過程。Critic模型的結果用來幫助提高actor policy的效能。

  • GAN和actor-critic具有許多相似之處。Actor-critic模型中的actor功能類似於GAN中的generator, 他們都是用來take an action or generate a sample。Actor-critic模型中的critic則類似於GAN中的discriminator, 主要用來評估 actor or generator 的輸出。具體的相同和不同點,感興趣的朋友可以仔細閱讀原文。

  • 這篇論文主要貢獻在於從不同的角度來說明了GAN和actor-critic模型的相同與不同點,從而鼓勵研究GAN的學者和研究actor-critic模型的學者合作研發出通用、穩定、可擴充套件的演算法,或者從各自的研究中獲取靈感。

  • 最近Bahdanau等大神提出了用actor-critic模型來進行sequence prediction [3]。雖然[3]中並沒有用到GAN,或許對各位能有啟發。 用類似的思想,GAN在sequence prediction上也許也能取得的比較好的效果?

[1] 深度解讀:GAN模型及其在2016年度的進展

[2] Actor-Critic Algorithms

[3] An actor-critic algorithm for sequence prediction

作者

楊敏,香港大學計算機系博士, 從事自然語言和機器學習的研究,最近也在關注和從事non-goal-oriented dialogue system以及goal-oriented question answering的研究, please feel free to contact me if you have similar interests.

主頁:http://minyang.me/

新浪微博:楊敏_HKU

微信: yangmin19911129

關於PaperWeekly

PaperWeekly是一個分享知識和交流學問的學術組織,關注的領域是NLP的各個方向。如果你也經常讀paper,也喜歡分享知識,也喜歡和大家一起討論和學習的話,請速速來加入我們吧。

微信公眾號:PaperWeekly

微博賬號:PaperWeekly(http://weibo.com/u/2678093863)

微信交流群:微信+ zhangjun168305(請備註:加群交流或參與寫paper note)


原文地址:http://www.sohu.com/a/126048879_465975