一個神經網絡自然語言模型當然需要神經網絡的結構層次,但是在進入神經網絡之前,怎麼把單詞表示成要輸入的詞向量,這也是一個非常重要的問題。其實,神經網絡語言模型主要分兩大部分,第一,輸入詞向量的表示問題,第二,神經網絡結構的選擇問題。只要處理好這兩方面的問題,剩下的就交給訓練了,當然其中還有一些細節。本文所描述的是一個一般化的多層神經網絡結構,首先要說明一些標記記號:
假設一個神經網絡函數爲
再假設,給定一個矩陣
轉化單詞爲特徵向量
首先,每一個單詞都有一個索引,網絡的第一層就是通過一個查詢表(lookup table)把單詞索引映射爲一個特徵向量。
對每一個單詞
其中,
通過對這些特徵向量的連接可以輸入到後續的神經網絡層中。
擴展到單詞的離散特徵
更詳細地,可以把每個單詞向量更細分一下,即每個單詞可以由多個離散的特徵組成(這個對於英語語言來說,漢語好像沒有這個問題)。比如一個單詞,它有詞根,它的小寫的結尾和它大寫的開頭等特徵,由這些特徵組成這個單詞的特徵。
一般來說,假設一個單詞由
上面那是一個單詞的由多個離散特徵向量拼接表示的特徵向量。
那麼,單詞序列
其中,矩陣中的每一列爲一個單詞的由多個離散特徵向量拼接表示的特徵向量。
其實,我認爲這種離散特徵可以不被考慮,因爲這些參數都是隨機初始化的,並且在傳入網絡中訓練,最後得到的詞向量應該都會一樣的,可能比較好的是,這種離散化可能提取每個詞的詞根向量和大小寫向量。
神經網絡的輸入方法
有兩種方法把單詞向量輸入到神經網絡中去,一種是基於窗口的方法;另一種是基於句子的方法,也稱爲卷積方法。
基於窗口的方法
基於窗口方法認爲一個單詞的標註主要依賴於它近鄰的單詞,因此,要標註一個單詞,我們使用一個固定大小爲
從下面一張圖中可以清楚看出模型的結構:
每一個詞由多個離散特徵組成,通過設定窗口,再把對應各個單詞的離散特徵向量從查詢表(記住,此查詢表是需要訓練的,得到的每一列是各個單詞的詞向量,即word embedding 或 word representation,但是具體地技術細節怎麼實現訓練呢?)中抽出,拼接成一個列向量,然後再經過標準的神經網絡訓練,此監督學習方法可以得到詞性標註(POS),命名實體識別(NER)等,得到的副產品就是詞向量。
基於卷積的方法
使用基於窗口的方法能解決大多數自然語言處理工作,但是對語義角色標註(SRL)力有所逮,因爲假設一個單詞標註依賴於一個前面的動詞,但這個動詞在窗口之外,那麼它就不太可能標註正確,這種情況下,標註一個單詞需要整個句子。這時候,基於卷積的方法就派上用場了。該卷積方法又稱爲時間延遲神經網絡(TDNNs)。
卷基層:卷基層可以看做窗口方法的一般化,給定一個序列,其可以表示成爲一個矩陣
其中,權重矩陣
最大池化層:卷積層的輸出的大小依賴於句子長度的大小,由於神經網絡的全連接層需要輸入固定長度大小的特徵,因此局部特徵向量需要整合爲一個全局特徵向量,一般的最大池化層是取平均或取最大值,由於句子中大多數單詞對於一個要標註單詞的語義角色沒多大影響,所以取平均操作沒多大意義,所以可以用最大化方法。給定一個由卷積層
給出它的結構圖形:
從上圖可以清楚看出卷積層和最大池化層的操作,然後就是進入標準的神經網絡結構了。
對於標準的神經網絡,訓練量十分龐大,如果是單純的要訓練詞向量的話,可以使用Word2vec模型,它更改了神經網絡中的一些結構,使得訓練更具有效率,詳情可看word2vec以及GloVe總結。
參考文獻
【Ronan Collobert, Jason Weston, Leon Bottou, Michael Karlen, Koray Kavukcuogluy, Pavel Kuksaz】Natural Language Processing (almost) from Scratch
【Yoav Goldberg】A Primer on Neural Network Models for Natural Language Processing