神經網絡自然語言模型的一般化結構形式

一個神經網絡自然語言模型當然需要神經網絡的結構層次,但是在進入神經網絡之前,怎麼把單詞表示成要輸入的詞向量,這也是一個非常重要的問題。其實,神經網絡語言模型主要分兩大部分,第一,輸入詞向量的表示問題,第二,神經網絡結構的選擇問題。只要處理好這兩方面的問題,剩下的就交給訓練了,當然其中還有一些細節。本文所描述的是一個一般化的多層神經網絡結構,首先要說明一些標記記號:
假設一個神經網絡函數爲fθ() ,其參數爲θ 。如果有L 層的前饋網絡,則認爲由flθ() 組成,

fθ()=fLθ(fL1θ(f1θ()))

再假設,給定一個矩陣A ,則[A]i,j 表示A 中第i 行第j 列的元素。<A>dwini 表示是由在矩陣Ai 列向量周圍的dwin 個列向量拼接而成的向量。也即A 中第i 列左右各dwin/2 個列向量拼接而成。特別的,<A>1i 表示矩陣Ai 列向量。對於一個向量v[v]i 表示其第i 個標量元素。最後,序列{x1,x2,...,xT} 可寫爲[x]T1 ,序列的第i 個元素爲[x]i

轉化單詞爲特徵向量

首先,每一個單詞都有一個索引,網絡的第一層就是通過一個查詢表(lookup table)把單詞索引映射爲一個特徵向量。
對每一個單詞wD,D 爲一個有限的字典,一個dwrd 維的特徵向量由查詢表層LTW() 給出:

LTW(w)=<W>1w

其中,WRdwrd×|D| 是一個要學習的矩陣參數<W>1wRdwrdW 的第w 列,dwrd 爲單詞向量維度(由用戶選擇的超參)。給定一個句子或任何具有T 個字典D 中的單詞[w]T1 序列,則查詢表會產生一個輸出矩陣:
LTW([w]T1)=(<W>1[w]1<W>1[w]2...<W>1[w]T)(1)

通過對這些特徵向量的連接可以輸入到後續的神經網絡層中。

擴展到單詞的離散特徵

更詳細地,可以把每個單詞向量更細分一下,即每個單詞可以由多個離散的特徵組成(這個對於英語語言來說,漢語好像沒有這個問題)。比如一個單詞,它有詞根,它的小寫的結尾和它大寫的開頭等特徵,由這些特徵組成這個單詞的特徵。
一般來說,假設一個單詞由K 個離散特徵表示,wD1××DK ,其中,Dk 爲第k 個特徵的字典。我們把每個特徵關聯一個查詢表LTWk() ,其參數WkRdkwrd×|Dk| ,其中,dkwrdN 是一個用戶設定的維度大小。給定一個單詞w ,它的特徵向量維度爲dwrd=Σkdkwrd ,也就是把組成它的離散特徵拼接在一起:

LTW1,...,WK(w)=LTW1(w1)LTWK(wK)=<W1>1w1<WK>1wK

上面那是一個單詞的由多個離散特徵向量拼接表示的特徵向量。
那麼,單詞序列[w]T1 的查詢表層的輸出爲一個矩陣:
LTW1,...,WK([w]T1)=<W1>1[w1]1<WK>1[wK]1<W1>1[w1]T<W1>1[wK]T(2)

其中,矩陣中的每一列爲一個單詞的由多個離散特徵向量拼接表示的特徵向量。
其實,我認爲這種離散特徵可以不被考慮,因爲這些參數都是隨機初始化的,並且在傳入網絡中訓練,最後得到的詞向量應該都會一樣的,可能比較好的是,這種離散化可能提取每個詞的詞根向量和大小寫向量。

神經網絡的輸入方法

有兩種方法把單詞向量輸入到神經網絡中去,一種是基於窗口的方法;另一種是基於句子的方法,也稱爲卷積方法。

基於窗口的方法

基於窗口方法認爲一個單詞的標註主要依賴於它近鄰的單詞,因此,要標註一個單詞,我們使用一個固定大小爲ksz (超參數)的窗口,窗口中的每一個單詞都通過查詢表(1)或(2)找到對應的詞向量,這就產生一個dwrd×ksz 大小的詞向量矩陣,然後把各個單詞的詞向量拼接成一個dwrdksz 維的列向量作爲後續標準的神經網絡的輸入,因此可以寫爲:

f1θ=<LTW([w]T1)>dwint=<W>1[w]tdwin/2<W>1[w]t<W>1[w]t+dwin/2

從下面一張圖中可以清楚看出模型的結構:
這裏寫圖片描述

每一個詞由多個離散特徵組成,通過設定窗口,再把對應各個單詞的離散特徵向量從查詢表(記住,此查詢表是需要訓練的,得到的每一列是各個單詞的詞向量,即word embedding 或 word representation,但是具體地技術細節怎麼實現訓練呢?)中抽出,拼接成一個列向量,然後再經過標準的神經網絡訓練,此監督學習方法可以得到詞性標註(POS),命名實體識別(NER)等,得到的副產品就是詞向量。

基於卷積的方法

使用基於窗口的方法能解決大多數自然語言處理工作,但是對語義角色標註(SRL)力有所逮,因爲假設一個單詞標註依賴於一個前面的動詞,但這個動詞在窗口之外,那麼它就不太可能標註正確,這種情況下,標註一個單詞需要整個句子。這時候,基於卷積的方法就派上用場了。該卷積方法又稱爲時間延遲神經網絡(TDNNs)。
卷基層:卷基層可以看做窗口方法的一般化,給定一個序列,其可以表示成爲一個矩陣fl1θ ,矩陣中的每一列都是序列中一個單詞的詞向量,然後對這個單詞序列做卷積操作:

<flθ>1t=Wl<fl1θ>dwint+blt

其中,權重矩陣Wl 是共享的,相當於卷積核,窗口的大小爲t ,一般通過多個卷積層來提取更高級的特徵。
最大池化層:卷積層的輸出的大小依賴於句子長度的大小,由於神經網絡的全連接層需要輸入固定長度大小的特徵,因此局部特徵向量需要整合爲一個全局特徵向量,一般的最大池化層是取平均或取最大值,由於句子中大多數單詞對於一個要標註單詞的語義角色沒多大影響,所以取平均操作沒多大意義,所以可以用最大化方法。給定一個由卷積層l1 輸出的矩陣fl1θ ,則最大池化層輸出的向量爲flθ
[flθ]i=maxt[fl1θ]i,t1inl1hu

給出它的結構圖形:
這裏寫圖片描述
這裏寫圖片描述
從上圖可以清楚看出卷積層和最大池化層的操作,然後就是進入標準的神經網絡結構了。
對於標準的神經網絡,訓練量十分龐大,如果是單純的要訓練詞向量的話,可以使用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

發佈了112 篇原創文章 · 獲贊 165 · 訪問量 52萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章