Generating Chinese Poetry from Variational Auto-Encoder

本期使用Variational Auto-Encoder(VAE)生成中國五言絕句,模型實現來源於論文:[1511.06349] Generating Sentences from a Continuous Space。

模型結構:

圖1

模型由三部分組成,Encoder,Decoder和VAE。

  • Encoder - rnn模型,論文中使用LSTM,通過rnn模型提取樣本的序列特徵。
  • Decoder - rnn模型,可以看做一個標準的Recurrent neural network language models(rnnlms)如果看過上期文章的朋友想必不會陌生:Natural Language Generation for Chinese Poetry
  • VAE:筆者能力不夠,無法將論文中的意思很好的翻譯成中文傳達給大家,所以只能附上原文並帶上自己的一點淺見:由於高位空間中空間過於龐大,僅僅使用latent variable生成樣本會有明顯失真,不管圖片還是自然語言,所以在latent variable基礎上強制使其服從某種有規律的幾何概率分布,從而指導decoder生成逼真的樣本。


論文中使用 highway network layers 提高模型性能

t=σ(WTx+bT) - transform gate,(1?t) - carry gate,靈感來源於lstm。Highway實現


損失函數由兩部分組成:

sigma和mu 來源於encoder,可以參考圖1

代碼實現

全部代碼鏈接在文章最後面

encoder由一層雙向lstm構成,輸出時間序列的總體特徵。

decoder為標準rnnlms

vae由embedding,highway,encoder, W_{mu},W_{alpha} ,decoder組成

  • 這裡embedding使用預訓練詞向量,接入代碼請看82行,載入詞向量代碼
  • W_{mu},W_{alpha} 使encoder輸出tensor轉換成規定長度latent variable,latent_dim是超參數

生成服從高斯分布的latent variable並計算latent loss(109行)

全部代碼

查看github全部代碼

後話

到目前為止已經使用Pytorch實現NLP中主要任務,希望對大家有所幫助;下一期開始會實現一些有意思的Computer Vision相關內容。

其他NLP的模型將會使用TensorFlow繼續實現,有興趣的朋友可以關注ne7ermore/deeping-flow,筆者會不定期上傳代碼並在後面文章中挑選講解。

感興趣的朋友可以關注專欄深度學習


推薦閱讀:

機器學習識別cfDNA
梯度下降法求解logisitic回歸及其python代碼實現
數學 · 神經網路(二)· BP(反向傳播)
Python · 神經網路(三*)· 網路
【啄米日常】3:一個不負責任的Keras介紹(下)

TAG:深度学习DeepLearning | PyTorch | 机器学习 |