這篇文章是論文‘Chinese Poetry Generation with Recurrent Neural Network’的閱讀筆記,這篇論文2014年發表在EMNLP。spa
這篇論文提出了一個基於RNN的中國古詩生成模型。code
第一句的生成是規則式的。
先自定義幾個keywords,而後經過《詩學含英》(這是清朝人編寫的)擴展出更多的相關短語。而後生成全部知足格式約束(主要是音調方面的)的句子,接下來用一個語言模型排個序,找到最好的。
原文中有挺重要的一句,可是我沒看懂。blog
In implementation,we employ a character-based recurrent neural network language model (Mikolov et al., 2010) interpolated with a Kneser-Ney trigram and find the n-best candidates with a stack decoder.it
一個字一個字的生成。
已經有了前面的1,2,3..i句話,句子\(S_{i+1}\)的條件機率:
\[ P(S_{i+1}|S_{1:i}) = \prod_{j=1}^{m-1}P(W_{j+1}|w_{1:j},S_{1:i}) \]
也就是構成這個句子的每一個字的機率乘積。每一個字機率依賴於前面的j-1個字以及前面的i句話。
整個模型由三個子模型構成:
1, CSM模型,convolution sentence model
這個模型的任務是把已經生成的句子\(S_i\)映射到一個vector \(v_i\)
\[ v_i = CSM(S_i) \]
這裏採用的是基於CNN的senence model, Kalchbrenner and Blunsom (2013)
2, RCM模型,recurrent context model
這個模型的把CSM對前面i個句子生成的i個向量映射到\(u_{i}^{j}\)
\[ u_i^{j}=RCM(v_{1:i},j) \]
這是個encode-decode模型,先把前i個句子encode到一個向量,而後再decode到m個向量,每一個向量對應一個位置,若是是五言絕句那就是decode出5個向量,分別對應着5個字。而後把這些向量拼接起來。
io
3,RGM模型,recurrent generation model
預測下個輸出是字w的機率(w是字典裏面的任意一個字),以RCM的輸出、前j個字、字自己的信息(這個模型用的是one-hot encoding向量)爲輸入。
\[ P(w_{j+1}|w_{1:j},S_{1:i}) = RGM(w_{1:j+1},u_i^{j}) \]
這裏實際上是個語言模型
class
\(e(w_j)\)是字w的one-hot encoding.Y須要注意,「matrix \(Y\subset R^{|V|\times q}\) decodes the hidden representation to weights for all words in the vocabulary」bfc
這篇文章有兩個創新點:擴展
欣賞一下整個模型生成的詩歌吧
sed