當前位置:
首頁 > 知識 > 自然語言處理之 VAE for NLP

自然語言處理之 VAE for NLP

引言


提及 Generative Models,Variational Autoencoder (VAE) 和 GAN 可以說是兩座大山頭。二十四期的「GAN for NLP」一文中對 GAN 在 NLP 中的進展做了詳細的介紹,推薦錯過的朋友不要再錯過。雖然 GAN 在圖像生成上效果顯著(當然 VAE 也很強),但在 NLP 方面暫時還是 VAE 較為 work。今天的分享作為姊妹篇(捂臉),對 VAE 在 NLP 的應用里最具有代表性的幾篇 paper 進行介紹。我會盡量梳理論文之間的聯繫,希望對大家有所幫助。本期涉及的論文有:


《Generating Sentences From a Continuous Spaces》. ICLR 2016

《Neural Variational Inference for Text Processing》. ICML 2016


《Language as a Latent Variable: Discrete Generative Models for Sentence Compression》. EMNLP 2016


《A Hierarchical Latent Variable Encoder-Decoder Model for Generating Dialogues》. AAAI 2017


其他

在展開之前,我先帶大家簡單回顧一下 VAE 的核心。


1) 如上圖所示,VAE 可以看做是 Standard autoencoder 的 regularized version(在 autoencoder 的架構上引入隨機 latent variable)


2) VAE 從 data 學到的是在 latent space 的 region,而不是單個點。換句話說是 encode 學到了一個概率分布 q(z|x)


3) 引入 KL divergence 讓後驗 q(z|x)接近先驗 p(z)。這裡的 motivation 在於如果僅用 reconstruction loss,q(z|x)的 variances 還是會很小(又和原有的單個點差不多了)


VAE 詳細推導這裡就不展開,各種 tutorial 也非常多。只要掌握變分推斷和理解 reparametrization trick 就基本 ok 了。

下面進入正題。


— 01 —


Generating Sentences From a Continuous Spaces


論文鏈接:https://aclweb.org/anthology/K/K16/K16-1002.pdf


這篇文章對後面很多 paper 影響很大而且我也很喜歡,所以重點介紹一下。paper 最早發表在 ICLR 2016 上,motivation 在於作者為了彌補傳統的 RNNLM 結構缺少的一些 global feature(其實可以理解為想要 sentence representation)。其實拋開 generative model,之前也有一些比較成功的 non-generative 的方法,比如 sequence autoencoders[1],skip-thought[2]和 paragraph vector[3]。但隨著 VAE 的加入,generative model 也開始在文本上有更多的可能性。

自然語言處理之 VAE for NLP



Loss 的組成還是和 VAE 一樣。具體模型上,encoder 和 decoder 都採用單層的 LSTM,decoder 可以看做是特殊的 RNNLM,其 initial state 是這個 hidden code z(latent variable),z 採樣自 Gaussian 分布 G,G 的參數由 encoder 後面加的一層 linear layer 得到。這裡的 z 就是作者想要的 global latent sentence representation,被賦予了先驗 diagonal Gaussians,同時 G 就是學到的後驗。


模型很簡單,但實際訓練時有一個很嚴重的問題:KL 會迅速降到 0,後驗失效了。原因在於,由於 RNN-based 的 decoder 有著非常強的 modeling power,直接導致即使依賴很少的 history 信息也可以讓reconstruction errors 降得很低,換句話說,decoder 不依賴 encoder 提供的這個 z 了,模型等同於退化成 RNNLM(攤手)。順便一提,本文最後有一篇 paper 也是為了解決這個問題。

先看這篇 paper 提出的解決方法:KL cost annealing 和 Word dropout。


1) KL cost annealing


作者引入一個權重 w 來控制這個 KL 項,並讓 w 從 0 開始隨著訓練逐漸慢慢增大。作者的意思是一開始讓模型學會 encode 更多信息到 z 里,然後隨著 w 增大再 smooth encodings。其實從工程/代碼的角度看,因為 KL 這項更容易降低,模型會優先去優化 KL,於是 KL 很快就降成 0。但如果我們乘以一開始很小的 w,模型就會選擇忽視 KL(這項整體很小不用降低了),選擇優先去降低 reconstruction errors。當 w 慢慢增大,模型也慢慢開始關注降低 KL 這項了。這個技巧在調參中其實也非常實用。


2) Word dropout

自然語言處理之 VAE for NLP



既然問題是 RNN-based 的 decoder 能力太強,那我們就來弱化它好了。具體方法是把 input 的詞替換成 UNK(我可能是個假的 decoder),模型被迫只能去多多依賴z。當然保留多少 input 也需要嘗試,我們把全都不保留的叫做 inputless decoder,實驗表明,inputless VAE 比起 inputless RNN language model 不知道好到哪裡去了。


受到 GAN 的啟發,作者還提出了一個 Adversarial evaluation,用一半真一半假的數據作為樣本訓練出一個分類器,再對比不同模型生成的句子有多少能騙過這個分類器,這個 evaluation 被用在 Imputing missing words 這個任務上,VAE 的表現同樣比 RNNLM 出色。


最後,作者展示模型的確學到了平滑的 sentence representation。選取兩個 sentence 的 code z1 和 z2,z1 和 z2 可以看做向量空間的兩個點,這兩個點連線之間的點對應的句子也都符合語法且 high-level 的信息也保持局部一致。


— 02 —


Neural Variational Inference for Text Processing


論文鏈接:https://arxiv.org/pdf/1511.06038.pdf


其實這篇 paper 和第一篇是一起投的 ICLR,後來轉投了 ICML 2016,所以時間上其實和第一篇是一樣的(兩篇文章也有互相引用)。不同於第一篇,作者的出發點是構建一個 generative neural variational framework。為了證明 framework 的優越性,分別在 unsupervised 和 supervised 的任務上提出了兩個模型,結果也很令人滿意。

自然語言處理之 VAE for NLP



第一個任務是 unsupervised document modeling,模型叫 Neural Variational Document Model(NVDM)。h 和第一篇的 z 一樣,在這裡代表latent document semantics,但 document 是以 bag-of-words 的形式(個人以為這裡作者主要還是受到 LDA 的影響)。encoder 採用MLP,decoder 是一層 softmax。


第二個任務是 supervised answer selection,模型叫 Neural Answer Selection Model(NASM)。文本的建模方式採用 LSTM(在第二個任務用 LSTM,第一個任務用詞袋,可能為了證明普適性)。h 代表 latent question semantics。如上圖所示,Zq 和 Za 用來表示 question 和 answer,y 代表 answer 是不是正確答案,用 Zq 和 Za 預測 y。那麼 Zq 和 Za 是怎麼得到的呢?Zq 延用 LSTM 的 last state,而 Za 則較為複雜,所謂脫離問題談答案都是耍流氓,所以對 Za 建模時要顯式的放入 question 的信息。可這裡該怎麼表示 question 呢?如果還用 Zq,模型很容易 overfitting。這裡我們的 latent h 終於可以出場了,引入 h 不僅起到了 muti-modal的效果,還讓模型更 robust,再把基於 attention 的 c(a,h)和 answer的 LSTM last state 組合得到 Za。這種做法對我們在尋找 representation 時有很好的借鑒作用。最後通過推導 variational lower bound 確定 h 的先驗是 p(h|q)(第一個任務中先驗是 p(h)), 這裡就不贅述了。


— 03 —


Language as a Latent Variable: Discrete Generative Models for Sentence Compression


論文鏈接:https://arxiv.org/pdf/1609.07317v1.pdf


這篇 paper 發表在 EMNLP 2016,同樣出自第二篇 paper 的作者。傳統的 VAE 是把數據 encode 成 continuous latent variable,這篇 paper 的貢獻在於提出了一個 generative model 用來學到 language 的 discrete representation—一個帶有 sequential discrete latent variable 的 VAE。所謂的 discrete latent variable 就是指一個單詞,加上 sequential 其實就是一個句子,由於 VAE 本身是壓縮數據的,換句話說是用短一點的句子來表示原來的句子,也就是句子壓縮。我覺得作者的 intuition 在於每個句子可以有多個縮寫,且都可以表示原句,有一點點 distribution 的意思,所以用 latent variable 很合適。

自然語言處理之 VAE for NLP



原句和壓縮句分別是 s 和 c ,模型整體是 encoder -> compressor -> decoder。我們分解開看,encoder -> compressor 採用 pointer network[4]只從 s 里選取合適的詞而不是整個詞典,從而大大減少了 search space。compressor -> decoder 是一個帶 soft attention 的 seq2seq。這個模型的好處是不需要 label 數據,但是如果我們有足夠的 label 數據(真實數據里 c 里的詞可不僅僅來自 s),需要額外加個 softmax 從整個詞典里選詞,同時再定義一個 latent factor 判斷是從 s(pointer network)還是從詞典里選,更加符合任務需求。


值得一提的是 Variational lower bound 里的 p(c)是 pre-train 好的 language model。因為 Language model 的一個特點是比較喜歡短句子,很適合句子壓縮的場景。由於 reparameterisation trick 並不適用 discrete latent variable,作者還採用了 REINFORCE[5]的方法(凡是 discrete 的問題,GAN/VAE 都可以採用 REINFORCE)。


— 04 —


A Hierarchical Latent Variable Encoder-Decoder Model for Generating Dialogues


論文鏈接:https://arxiv.org/pdf/1605.06069.pdf


這是第一篇把 VAE 的思想引入到 dialogue 的 paper。和普通的 VAE 區別在於 dialogue 的 reconstruction 是生成的下一句 utterance,而不是 input 自身。這篇 paper 的前身是 HRED[6],HRED 的核心思想是,把dialogue 看做是 two-level:dialogue 是 utterance 的組合,utterance 是 words 的組合。HRED 由 3 個 RNN 組成:encode RNN 把每個utterance 變成 real-valued 的向量 u,context RNN 把每個 turn 里的 u 作為輸入變成向量 c,最後把 c 交給 deocde RNN 生成下一個 utterance。

自然語言處理之 VAE for NLP



VHRED 在 HRED 的基礎上每個 turn 里引入一個 latent variable z,z 由 context RNN 的 c 生成。z 的意義比較籠統,sentiment/topic 怎麼解釋都行。模型的訓練技巧如 KL annealing 等大量借鑒了第一篇 paper 的思想,特別要注意訓練時的 z 從後驗採樣(保證 decode 的正確性),測試時再從先驗採樣( KL 已經把分布拉近)。實驗表明,latent variable 有助於生成更加 diverse 的回復。


— 05 —


其他


論文鏈接:https://arxiv.org/pdf/1605.06069.pdf


第一次將 VAE 引入機器翻譯:


《Variational neural machine translation》EMNLP 2016


論文鏈接:https://arxiv.org/pdf/1605.07869.pdf


為了改進 KL 迅速降到 0,提出 convolutional 和 recurrent 結合的 VAE:


《A Hybrid Convolutional Variational Autoencoder for Text Generation》


論文鏈接:https://arxiv.org/pdf/1702.02390.pdf


參考文獻


[1] Semi-supervised sequence learning


[2] Skip-thought vectors


[3] Distributed representations of sentences and documents


[4] Pointer Networks


[5] Recurrent models of visual attention


[6] Building End-To-End Dialogue Systems Using Generative Hierarchical Neural Network Models


作者

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 科研圈 的精彩文章:

撫平時間皺摺,追憶似水年華——皺巴巴的糖紙也有記憶
記中國暗物質探測團隊PandaX:世界矚目的「非典型熊貓」
深圳大學醫學部生物醫學工程學院高薪誠聘博士後
調好收音機,聆聽恆星形成時的歌聲

TAG:科研圈 |

您可能感興趣

英特爾推出自然語言處理開源庫,代號「NLP Architect」
靈活的API查詢語言——GraphQL
放棄幻想,全面擁抱Transformer:自然語言處理三大特徵抽取器(CNN/RNN/TF)比較
「RNG vs SKT」彈幕的自然語言的初步分析,這就是Python的魅力
GitHub獲贊過千:PyTorch 自然語言處理項目Top 5
放棄幻想,全面擁抱 Transformer:自然語言處理三大特徵抽取器(CNN/RNN/TF)比較(下篇)
放棄幻想,全面擁抱 Transformer:自然語言處理三大特徵抽取器(CNN/RNN/TF)比較(上篇)
LingPipe : 自然語言處理工具包
AWS開源可跨關係型與NoSQL資料庫查詢語言PartiQL
IEEE Spectrum發布語言排名:Python第一
AI技術專利研究系列:NetBase,自然語言處理領域的資深玩家
「轉載」Python與C語言的異同
ICCV三個Strong Accept,UCSB等機構提出首個大規模視頻語言數據集
進一步改進GPT和BERT:使用Transformer的語言模型
ICCV三個Strong Accept,UCSB等提出首個大規模視頻語言數據集
IEEE Spectrum評選出最受歡迎編程語言
如何將Python自然語言處理速度提升100倍:用spaCy/Cython加速NLP
TIOBE 8 月編程語言排行榜:Python 奮力追趕 C,Swift 下跌
使用PaddleFluid和TensorFlow訓練RNN語言模型
Facebook收購Bloomsbury AI,以提高自然語言處理能力打擊假新聞