GAN在自然語言處理方面有哪些有趣的文章和應用?

生成對抗網路在NLP上的應用

本題已收錄至知乎圓桌:人工智慧 · 語言智能,更多「人工智慧」相關話題歡迎關注討論


其實本來寫了一大段後來還是刪了.... 還是就列一些paper吧:
SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient GANS for Sequences of Discrete Elements with the Gumbel-softmax Distribution Generating Text via Adversarial Training
以上paper是直接用GAN做text generation的,但是其實都暫時沒有啥正經的實驗結果。

Modeling documents with Generative Adversarial Networks
這個是用GAN生成一個document中詞的分布(不是真正generate document),然後希望discriminator能學到好的feature without supervision

Professor Forcing: A New Algorithm for Training Recurrent Networks
這個是用discriminator來encourage一個RNN在training和testing的時候hidden state的分布一致,藉此解決exposure bias的問題(即RNN在training時接受ground truth input,但testing時卻接受自己之前的output,這兩個setting不一致會導致error accumulate)。

同時還有一系列paper用reinforcement learning來直接optimize evaluation metric(例如BLEU),同時解決exposure bias,這些paper其實和GAN有內在的聯繫(參考Connecting Generative Adversarial Networks and Actor-Critic Methods):
Sequence Level Training with Recurrent Neural Networks An Actor-Critic Algorithm for Sequence Prediction Optimization of image description metrics using policy gradient methods

最後個人不認為discrete data space是GAN在NLP上難work的本質原因...這裡不展開了


補充幾點,題主也許會好奇:為什麼Ian在reddit上說GAN做不了是因為word embedding加減無意義就做不了呢?既然這樣,我在latent vector上做加減不就行了嗎?這個方法看上去可以,實際上很難work。

使用generative model解決language generation最大的問題在於latent space存在非常多的desert hole。在training的時候,text的latent vector有聚攏的傾向(citation needed,感謝評論。評論裡面也提到了desert hole這個詞並不是一個學術上的辭彙。David Duvenaud和我們聊這個問題的時候,用了這個說法,這裡沿用,感覺還是滿形象的哈哈)。

因此直接上GAN model存在一些問題。圖中是[1] 裡面的一個例子。在latent space遨遊的時候,中間的句子不make sense。

不過解決的方法也是有很多的。最簡單的方法是用VAE而不是用GAN。GAN本身的訓練方式是非常依賴連續空間的。在訓練的時候,我們的目標就是連續空間上的pixel值。在這一點上,VAE就沒有這個假設。因此VAE是自然的選擇。

實際上用的時候有很多tricks,[1] 裡面感覺就有很多工程上的東西來減少desert hole的問題。

另外一個方法是結合policy gradient,把它做成一個RL的問題。[2] 是一篇非常有意思的文章。通過把word選擇由softmax output選擇變成policy選擇,作者巧妙的避開了GAN和word embedding不兼容的問題。當然實際上,結合GAN和RL需要更加多的思考和技巧。[2] 不一定是最好的方法,但是無疑證明了GAN是可以用在sentence generation這個問題上的。

我之前也很關注GAN和text的結合,也可以算是利益相關吧。此外有另外一個工作[3] (出自我們組去年剛剛招來的青年才俊Prof. David Duvenaud),可能可以帶來更加多的啟示。

如果我們考慮化學物質的預測呢?假設我們知道化學式A,B,C並且知道他們的性質,我們能不能預測A-B+C的化學性質呢?我們能不能得到類似queen-woman+man=king的結果呢?

這個時候,使用generative model解決化學分子生成會遇見和sentence generation一樣的問題。我們會發現,化學分子的latent space,一樣存在desert holes。推薦你看一下[3] ,我覺得它很有意思,能給我們考慮的問題帶來許多思考 。

[1] Generating Sentences from a Continuous Space.

Samuel R. Bowman, Luke Vilnis, Oriol Vinyals, Andrew M. Dai, Rafal Jozefowicz, Samy Bengio

https://arxiv.org/abs/1511.06349v4

[2] SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient.

Lantao Yu, Weinan Zhang, Jun Wang, Yong Yu

https://arxiv.org/abs/1609.05473v5

[3] Automatic chemical design using a data-driven continuous representation of molecules.

Rafael Gómez-Bombarelli, David Duvenaud, José Miguel Hernández-Lobato, Jorge Aguilera-Iparraguirre, Timothy D. Hirzel, Ryan P. Adams, Alán Aspuru-Guzik

https://arxiv.org/abs/1610.02415v1


我談下自己的看法。個人認為GAN不適合NLP還是由於discrete output space的緣故。首先考慮continuous output space (e.g image), 我們可以直接把generator的output當做input送到discriminator里,從而產生smooth的gradient。對於文本,尤其是當generator的output是句子,需要重新encode這個output,然後送到discriminator,這個結構不是differentiable,只能用REINFORCE(high variance)來train。

此外,如果把generator的output distribution按timestep 去decompose;然後在每個time step放一個discriminator,即這個min-max game簡化到詞的層面時,問題已經和NCE區別不大(當然還是有些細節不同的)。

所以,大多GAN在NLP的應用,例如Sam Bowman的文章,都是把discriminator用到latent space(which is continuous)。用到output時需要REINFORCE,個人認為不是個好方向。


GAN在NLP中的應用這篇[1]比較典型。GAN這樣用一個反饋信號來修正生成模型最大的問題在於:序列生成模型本身是離散的,而不是圖像數據這樣連續的。所以我們需要藉助離散變數優化的辦法,比如REINFORCE(likelihood-ratio estimation),gumbel softmax這些優化方法。[1]中就使用了REINFORCE來解決這個問題。

其實RL做序列生成已經有一部分工作了。比如[2,3,4]

[1] SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient

[2] An Actor-Critic Algorithm for Sequence Prediction

[3] Generating Text with Deep Reinforcement Learning

[4] Deep Reinforcement Learning for Dialogue Generation


最近寫了一個小總結,看看能不能回答你的問題

Role of RL in Text Generation by GAN(強化學習在生成對抗網路文本生成中扮演的角色)


這裡是幾篇相關的論文

1. Generating Text via Adversarial Training

2. Adversarial Learning for Neural Dialogue Generation

3. SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient

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


SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient 這篇paper感覺跟alphago的實現大思路居然有些神似。每填寫一個字,就類似每下了一步棋。 區別在於下棋有絕對的對錯,但是寫作沒有絕對評判,所以需要訓練D來給reward。不過增強學習和蒙特卡洛樹用的思路都是和狗狗是一樣的。


推薦閱讀:

漢語中「著」「了」「過」等,處理成詞尾還是處理成助詞對漢語的詞法分析有什麼影響?
谷歌翻譯原理是什麼,從語言A到B,中間是否要翻譯成中介語言C(如英語)?
如何使用「爬蟲/數據挖掘」自動尋找某「話題」的「父話題」?
推薦系統中的推薦理由實現,有什麼好的思路嗎?
自然語言處理的master和PhD比較是完全沒有優勢嗎?

TAG:人工智慧 | 自然語言處理 | 深度學習DeepLearning | 生成對抗網路GAN |