天天看點

遞歸神經網絡 cs224n

語言模型:

詞袋模型(BoW)-簡單:

一篇文本(文章)被表示成"裝着詞的袋子",也就是說忽略文章的詞序和文法,句法;将文章看做詞的組合,文中出現的每個詞都是獨立的,不依賴于其他詞.雖然這個事實上并不成立,但是在實際工作中,效果很好.

如下,在詞袋模型BoW中,每個詞的數量表示有多種方法:可以表示為0-1(在這篇文章中,這個詞出現了沒有–詞集模型),詞頻(在這篇文章中,這個詞出現了多少次),也可以用tf-idf.

遞歸神經網絡 cs224n

詞袋模型在較小資料集上有一定優勢,深度學習模型在較大資料庫上取得更好的效果。

發現兩者其實是極為相似的.在詞袋模型中,對底層特征進行特征編碼的過程,實際上近似等價于卷積神經網絡中的卷積層,而彙聚層所進行的操作也與詞袋模型中的彙聚操作一樣。不同之處在于,詞袋模型實際上相當于隻包含了一個卷積層和一個彙聚層,且模型采用無監督方式進行特征表達學習,而卷積神經網絡則包含了更多層的簡單、複雜細胞,可以進行更為複雜的特征變換,并且其學習過程有監督過程。

短語結構樹-複雜:

額外再标注一些諸如指代、語義等标簽。

語義合成性

snowboarder 《==》people on the snowboard

就算一個人沒見過snowboarder這個單詞,他也能明白這與下面這個短語是同一個意思。人們可以用更大顆粒度的文本來表達自己的意思,而不僅僅是詞袋中的某個單詞。有什麼模型可以做到這一點呢?

它希望通過同時學習句法樹和複合性向量表示,能夠達到将短語映射到詞向量空間(這不可能說用vocabulary dict去學習,因為短語的組合是無窮的)

遞歸神經網絡 cs224n

遞歸神經網絡(recursive neural network)

得到一個向量表示,以及得到一個結構得分

最簡單的Recursive Neural Network

利用單層的神經網絡作為組合函數,向量内積作為打分函數,馬上就可以得到一個最簡單的RNN:

遞歸神經網絡 cs224n

用RNN分析句子

計算任意兩個單詞合并的得分(雖然下圖是相鄰兩個,但我覺得那隻是繪圖友善;就算是我第一次寫的玩具級别的依存句法分析器,也是任意兩個單詞之間計算):

遞歸神經網絡 cs224n

然後貪心地選擇得分最大的一對合并:

遞歸神經網絡 cs224n

重複這一過程

遞歸神經網絡 cs224n

直到得到根節點:

遞歸神經網絡 cs224n

Recursive vs. recurrent neural networks

遞歸神經網絡 cs224n

兩者都是遞歸神經網絡,隻不過前者在空間上遞歸,後者在時間上遞歸。中文有時會把後者翻譯為“循環神經網絡”,但這明顯混淆了等級,令人誤解。

它們各有各的優缺點,Recursive neural net需要分析器來得到句法樹,而Recurrent neural net隻能捕捉“字首”“上文”無法捕捉更小的機關。

但人們還是更傾向于用後者,LSTM之類。因為訓練Recursive neural net之前,你需要句法樹;句法樹是一個離散的決策結果,無法連續地影響損失函數,也就無法簡單地利用反向傳播訓練Recursive neural net。另外,複雜的結構也導緻Recursive neural net不易在GPU上優化。

Recursive vs. convolution neural networks

RNN隻會為滿足文法的短語計算向量,而CNN為每個可能的短語計算向量。從語言學和認知科學的角度來講,CNN并不合理。甚至recurrent neural network也比tree model和CNN更合理。

兩者的關系可以這樣想象,RNN将CNN捕捉的不是短語的部分删除了:

遞歸神經網絡 cs224n

得到:

遞歸神經網絡 cs224n

更強的遞歸神經網絡:

  • 改進不同短語結構學習不同的組合函數的神經網絡
  • 改進向量為矩陣的神經網絡

    詳情還是看

    http://www.hankcs.com/nlp/cs224n-tree-recursive-neural-networks-and-constituency-parsing.html

    https://blog.csdn.net/sscc_learning/article/details/78856375

遞歸神經網絡的缺點:

  • 樹狀的結構,是離散的,每一個節點分離的地方都有可能造成誤差傳播
  • 盡管遞歸神經網絡具有更為強大的表示能力,但是在實際應用中并不太流行。其中一個主要原因是,遞歸神經網絡的輸入是樹/圖結構,而這種結構需要花費很多人工去标注。想象一下,如果我們用循環神經網絡處理句子,那麼我們可以直接把句子作為輸入。然而,如果我們用遞歸神經網絡處理句子,我們就必須把每個句子标注為文法解析樹的形式,這無疑要花費非常大的精力。很多時候,相對于遞歸神經網絡能夠帶來的性能提升,這個投入是不太劃算的。