原文作者:Richard Socher
翻譯:@胥可 && @熊傑 && @楊帆 && @陳沛 && @Molly
校對調整:寒小陽 && 龍心塵
時間:2016年7月
出處:http://blog.csdn.net/han_xiaoyang/article/details/52075160
說明:本文爲斯坦福大學CS224d課程的中文版內容筆記,已得到斯坦福大學課程@Richard Socher教授的授權翻譯與發表
這篇課堂筆記將介紹不同類型的RNN(遞歸神經網絡),並介紹它在NLP領域的應用和優勢。
##1、遞歸神經網絡
在這篇課筆記中,我們會一起學習一種新的模型,這種模型絕對是以前介紹的那種遞歸神經網絡的加強版!遞歸神經網絡(RNNs)十分適用於有層次的、本身就有遞歸結構的數據集。來,咱們一起看看一個句子,是不是就很符合上面的要求呢?比如這個句子,“三三兩兩的人靜靜地走進古老的教堂。”首先,咱們可以把這個句子分成名詞短語部分和動詞短語部分,“三三兩兩的人”和“靜靜地走進古老的教堂。”然後呢,在動詞短語裏面還包含名詞短語部分和動詞短語部分對不對?“靜靜地走進”和“古老的教堂”。也就是說,它是有明顯的遞歸結構的。
語言的語法規則本身就有很強的遞歸性。所以,通過相應的模型,咱們可以把這種遞歸結構充分地利用起來。另外,使用RNNs對句子進行建模還有一個附加的好處,就是我們可以輸入任意長度的句子了。這在NLP的神經網絡中曾經是一個很令人頭疼的事情,句子的長度是不同的,但我們必須得使用各種預處理技巧讓句子對應的輸入向量長度相等。(see Bengio et al., 2003; Henderson, 2003; Collobert & Weston, 2008)
我們現在假設當前任務是要把句子對應到一個向量,這個向量和單詞本身對應的向量在同一個語義空間。也就是說,像“我昨天去了商場。”,“我們上週去購物了”,“他們去了商店”這樣的句子對應的向量,互相之間的距離應該是很近的。我們之前已經訓練過一元語言模型的詞向量,我們也可以用同樣的方法進行二元、三元等模型的訓練。這種思路是行得通的,但是還有兩點需要注意:(1)理論上講,詞彙可能的組合是無窮多的。存儲和訓練這樣無窮多的數據顯然是辦不到的。(2)有一些詞彙的組合,在語言中是有意義的,但是它們並不在我們的訓練/提升語料庫中。所以模型可能從來就沒有學習到這些詞組。
我們需要一個辦法,在句子和句子中包含的詞對應的詞向量上,推出句子對應的(嵌入)向量的形式。首先我們來探討一個頗有爭議的問題。在我們已有的詞向量空間裏,用這些詞向量來表示任意長度的句子是否可行和合理?儘管這個問題我們無法給出確切的答案,但從模型得出的結果來看,這好像是一個行之有效的方法。
首先,我們先談一下從語義角度和語法角度理解一個句子的區別和不同。語義分析的目的是理解一個句子所表達的實際意義,通過將短語表示成結構化語義空間裏的向量,使空間裏相似含義的句子的距離會比較近,而不相關意思的的句子離得會非常遠。與之相比,從語法角度來說,我們需要找到句子相對應的語法結構,弄清楚各個語句各部分間的依賴關係,詞語間的相互作用,等等。語法分析的結果常常被表示爲一棵解析樹,如下圖所示。
另外一個更爲有價值的問題是,在語義分析的過程中,從語法角度的理解時候會有所幫助,或者說是必不可少的?好吧,儘管有各種反對的理由,目前我們還是按照如下流程來進行的語義分析:首先,我們需要先理解各個詞;其次,我們需要知道各個詞是如何組織在一起;最後,我們可以通過前兩步的分析結果來理解一個短語或句子的實際意義。
現在讓我們一起來學習下基於以上原則所設計出來的一個模型。假如我們有一個句子和與這個句子相關的解析樹,就比如上面那個圖,我們如何將這個句子編碼,並且通過詞向量來得出句子的情緒分值?其實,僅僅一個簡單的遞歸神經網絡模型就可以得到我們想要的結果。(練習題3就是一個相關題目)
1.1 一個簡單的單層遞歸神經網絡
下面我們來學習下圖中的模型。我們首先來看下這個句子的解析樹和詞向量,由下而上的來逐步分析這棵樹。結點3(node 3)是圖中最底層的結點,所以我們將和連接組合成一個2d維的向量,並將這個向量輸入到網絡中按如下公式計算:
由於,,同時,我們可以將看做是在相同向量空間中,關於2元語法短語“this assignment”的一個點。在這裏,我們沒有必要去探究如何表示這個點,只要關注如果從構成的詞向量中導出就可以。
我們把輸入softmax層計算得到其關於各情感分類的得分,這裏所謂的情感分類就是一組離散分類,用來表示一些特定的含義。舉個列子,比如說在正負情感分析中,我們可以把情感分成5類,0表示強烈的負能量,1表示負能量,2表示中性,3表示正能量,4表示強烈的正能量。
現在,我們用同樣的方式,用"I" 和 “love"作爲輸入來計算表示"I love"這條詞組的。類似的,我們用作爲輸入,得到其關於情感分類的得分。 最後,最有意思的地方來了,我們需要找到一個方式來合併兩個短語"I love” 和 “this assignment”。 這裏我們並不是把這些單詞的詞向量連起來,而是合併這兩條詞組作爲輸入。換句話說,就是把表示這兩條詞組的向量合併起來計算:
現在我們在詞向量空間中,得到了表示"I love this assignment"這個詞組的向量。接着,我們可以把這個向量輸入給softmax層來計算整句話的情感分類得分。當然,這個模型只有在訓練之後才能給出合理的結果,這部分留作PSet3練習。
這裏有個問題,我們無論是把單詞連接成詞組,還是把詞組連接起來到更深層,與之相乘的都是同一個權重矩陣,於此同時我們還希望得到的向量儘可能的表達更多的內容,這樣是不是太天真了。這個問題確實是存在的, 我們在接下來的例子中會做更細緻的講解。
1.2 Syntactically Untied (語義解綁) SU-RNN
就像上一節最後所提到的問題,用同樣一個權重矩陣去合併動詞跟名詞和去合併介詞短語及另外一個詞向量似乎直觀上講不通。這樣的草率處理可能會影響到模型的表現。
爲了彌補這個缺點,我們可以通過針對這些不同的任務”語義解綁”權重矩陣。 也就是說,我們不必去考慮是否針對這類輸入最佳的在其他類的輸入上的表現是否會怎麼樣。我們弱化限制,使得並不需要處處相同。這樣做一方面使得我們有更多的矩陣要去學習,但另一方面在模型的表現也會有顯著的提升。
如下圖所示, 注意到我們現在的模型根據輸入的句法類別分別進行處理, 這裏我們通過一個簡單的概率上下文無關文法 (Probabilistic Context Free Grammar, PCFG) 來確定輸入的句法類別. 其中 PCFG 大致通過對 Penn Tree Bank 進行彙總統計來學習這些分類規則, 如“The”通常是一個冠詞 (DT) , 等等. 關於 PCFG 的內容無需進行更深入的理解, 你只需知道它確實很簡單即可.
當前模型與之前模型相比, 最主要的不同是, 我們初始化權重矩陣 W 爲單位矩陣. 通過這樣做, W會將兩個輸入的詞向量進行均值計算, 但經過一段長時間的訓練, 模型將會學習到哪個向量對於句子表達更加重要, 同時它可以通過對向量進行旋轉或縮放來提高這種表現. 我們觀察到下圖中訓練好的權重矩陣 W 確實學習到了單詞的重要性. 舉個例子, 對於冠詞-名詞短語 (DT-NP) 規則, 或者限定詞接名詞短語, 如 “The cat” 以及 “A man”, 我們的模型會將注意力放到名詞短語而非限定詞上. (因爲圖中對角線中紅色代表更高的權重, 所以這是顯而易見的). 這就是所謂的"軟頭詞" (soft head word) 概念, 語言學家通過長時間的觀察總結出來這些概念. 然而我們的模型通過觀察數據自己就學習到了這點. 這太棒了.
通過這部分討論我們看到, SU-RNN 確實比前一小節討論的模型要更加強大, 但是SU-RNN的表達力似乎還有提升的空間. 一旦我們考慮到修飾詞, 例如副詞 “very”, 任何針對此單詞及下一單詞詞向量進行插值的行爲, 確實都很難說明 “very” 的本質含義.
作爲一個副詞, “very” 的字面意思是 “用於強調”, 我們怎麼才能僅僅通過線性插值的方法, 來使得一個向量可以強調其後的其他向量? 我們怎麼才能構建一個向量來 “縮放” 其他的向量? 事實是我們無法做到這一點. 我們需要採用另外一種形式的詞與詞之間的乘法操作才能做到. 這裏我們有兩種新的組合形式可以做到這一點, 其中一種利用了詞矩陣 (word matrices) 的概念而另外一種利用了典型仿射上的二次形方程.
1.3 MV-RNN’s (矩陣-向量遞歸神經網絡, Matrix-Vector Recursive Neural Networks)
現在我們討論一下加強詞的表示形式, 除了詞向量外, 還往其中加入一個詞矩陣(word matrices)! 現在單詞 “very” 將擁有一個詞向量 及一個詞矩陣 , 通過這麼做, 新的模型將不僅僅擁有表達嵌入詞含義的能力, 它還擁有學習一個單詞是如何 “修飾” 其他單詞的能力, 新加入的詞矩陣使我們擁有了這種新的能力. 將兩個單詞 a 和 b 喂到一個 RNN 網絡中, 我們將得到他們的詞矩陣 A 與 B, 接下來我們將向量 Ab 與 Ba 進行連接作爲新的輸入向量 x. 對於之前 “very” 的例子, 可以是一個單位矩陣與一個任意大於1的常量 s 的乘積, 因此可以將相鄰的詞向量縮放 s 的比例. 這正是我們之前期望的那種新的模型表現力. 雖然這種新的詞的表達形式將會使得模型的特徵空間增加額外的一個維度, 但是我們將從這種新的詞的修飾能力中獲益良多。下圖是一個 MV-RNN 的例子。
通過觀測模型的誤差,我們看到即使MV-RNN仍不能表達一定的關係。我們注意到了有三類錯誤。
首先,否定正向的。當我們說一些正向的東西時,其中有一個詞變成負向的,這個模型不能衡量一個詞強大到足以翻轉整個句子的情緒。圖7給出了這樣一個例子,交換的“most”“least”應該倒裝句子的整個情緒,但MV-RNN不能實現這一點。
第二類錯誤是否定負向的例子。在我們說什麼是不壞,或不沉悶,如圖8所示,MV-RNN不能領略到“not”可以減輕負向的情緒。
我們觀察到的最後一類錯誤是“X 但是 Y 的結合”,如圖9所示。這裏的X可能是負向的,但如果Y是正向的,那麼該模型的情感輸出的句子應該是正向的!MV-RNNs無法做到這一點。
因此,我們必須尋找一個更具表現力的合成算法,將能夠充分捕捉這些類型的高層次的組成。
1.4 RNTNs(遞歸神經張量網絡,Recursive Neural Tensor Network)
最後介紹的這種RNN,對上述的3類錯誤處理的很好。RNTN(遞歸神經張量網絡)用一個詞矩陣的概念,而且沒有采用傳統的仿射變換 pre-tanh/sigmoid的概率。爲了構成兩個詞向量或短語向量,我們以向量的形式連接起來,不去把它通過仿射函數處理變爲一個非線性,我們首先把它通過一個二次型處理,然後變爲非線性的,如:
KaTeX parse error: \tag works only in display equations
注意V是3階張量∈ 。我們計算切成張量輸出向量。接着加上Wx,然後進行一個非線性函數的變換。這個二次型表明,我們確實可以允許的乘法類型的詞向量之間的相互作用,而不需要保持和學習詞矩陣!
實驗結果表明,RNTN是唯一的能在這些非常難的數據集上表現很好的模型。
下一節我們將繼續講下一個在某些方面優於RNTN的模型,它不需要輸入解析樹!該模型是動態卷積神經網絡(Dynamic Convolutional Neural Network),下節課見。