nlp 筆記:A Fast and Accurate Dependency Parser using Neural Networks

概要:本文使用神經網絡完成了一個快速準確的依存語法分析程序,也就是句子的結構。網絡

 

  • introduction:

  之前的depenency parser效果很好,可是有幾個問題:spa

  1. 所用的特徵很稀疏,而數據不夠訓練這些權重。
  2. 特徵都是人工提取的模版,須要專業知識的狀況下還常常不全面。
  3. 計算這些特徵十分費時。

  做者想出了一個好方法來解決這些問題,其實我以爲這些都是第一個問題帶來的。blog

  • Transition-Based Dependency Parsing

  先解釋什麼是Dependency Parsing。依存語法是一種二元非對稱關係,一個詞A有一個箭頭指向另一個詞B, 箭頭上一般有標籤(label),這些標籤表示語法關係,好比主語,同位語等等。箭頭鏈接的兩個詞有head(高級)和dependent(低級)的區別。而這些箭頭稱爲dependency。本文的箭頭是從headdependent。一般一個句子中加一個假的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

  1. 一個stack S,root第一個入棧,棧頂靠右,圖中棧頂是詞good。
  2. 一個buffer B,第一個元素是在最左邊,按照句子的順序開始。
  3. 一個放dependency邊的集合A
  4. transition的集合

  在本文中,有以下幾種transition:class

  1. LEFT-ARC(l): 往A中增長一條s1到s2的邊,label是l
  2. RIGHT-ARC(l): 往A中增長一條s2到s1的邊,label是l
  3. SHIFT: 把b1移到stack中,前提是buffer的長度大於等於1

  對於論文中的例子,有下圖: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的影響真大。

相關文章
相關標籤/搜索