概要:本文使用神經網絡完成了一個快速準確的依存語法分析程序,也就是句子的結構。網絡
之前的depenency parser效果很好,可是有幾個問題:spa
做者想出了一個好方法來解決這些問題,其實我以爲這些都是第一個問題帶來的。blog
先解釋什麼是Dependency Parsing。依存語法是一種二元非對稱關係,一個詞A有一個箭頭指向另一個詞B, 箭頭上一般有標籤(label),這些標籤表示語法關係,好比主語,同位語等等。箭頭鏈接的兩個詞有head(高級)和dependent(低級)的區別。而這些箭頭稱爲dependency。本文的箭頭是從head到dependent。一般一個句子中加一個假的root,這樣每一個單詞dependent於另外一個節點。一般這些依存關係會造成一棵樹(連通,非循環,一個根結點)。對於dependency parsing有一個定義是projectivity,叫投影。若是這些箭頭沒有交叉,則稱這個樹是projective的。以下圖就是這樣。get
此圖是論文中的例子,好比He就dependent於has,由於has說明了he要幹嗎,因此has是head。而he是has的名詞主語(nominal subjective),就是label。能夠看出圖中的關係造成了一棵樹。it
接下來解釋什麼叫transition-based。依舊是論文的例子。圖:io
parser有如下幾項:ast
在本文中,有以下幾種transition:class
對於論文中的例子,有下圖:pdf
這樣就能夠獲得句子的dependency 樹了,也就是句子的結構。sed
Neural Network Based Parser
本文的目的是經過現有的信息,預測出下一步的transition。首先是所用的模型:
如圖所示:
輸入由三部分組成,詞,詞的詞性,詞的箭頭的label,可是全都是embedding的形式。一共選18個詞xw:(1)stack和buffer的前3個單詞:s一、s二、s三、b一、b二、b3;(2)棧頂兩個單詞的第一個和第二個最左邊/最右邊的子單詞:lc1(si), rc1(si), lc2(si), rc2(si), i = 1,2。(3)最左邊的最左邊/最右邊的最右邊——堆棧上最上面兩個單詞的大多數子元素:lc1(lc1(si))、rc1(rc1(si))、i = 1,2。xt:使用這18個詞的詞性標記,xl對應的單詞arc的label,不包括Sl堆棧/緩衝區上的那6個單詞,有12個,沒有的元素用null來代替。embedding的長度是50,直接行向量的形式鏈接起來,因此輸入長度是50*(18+18+12)。
隱藏層的長度是200,由圖中公式算出,值得注意的是,公式不只是進行了線性變換,加了一個三次方,論文中說比起tanh或者sigmoid效果很不錯,可是緣由說不出,說是有待理論調查。
最終輸出層是softmax,有2n+1個transition待選,選出其中可能性最高的。n是總的label的數量。leftarc * n+rightarc * n +shift,共2n+1個transition可選。
最終實驗效果很好,速度很快。
具體的訓練實驗細節和模型評估等請看論文A Fast and Accurate Dependency Parser using Neural Networks。
感嘆:word2vec對於nlp的影響真大。