依存句法分析—A Fast and Accurate Dependency Parser using Neural Networks

一、問題描述

這是一篇使用神經網絡來做依存句法分析的經典文章,傳統的依存句法分析特徵向量稀疏,特徵向量泛化能力差,特徵計算消耗大,用神經網絡做transition-based貪心模型可以緩解上述問題,準確率提高,速度變快。由於源代碼是java寫的,所以本人看了用tensorflow改寫的代碼,但是該代碼存在一些問題,只預測是LEFT-ARC,RIGHT-ARC,SHIFT中的一種(即三分類),但沒有預測ARC是哪種依賴關係(label),也就是隻預測unlabeled attachment scores(UAS),不能預測labeled attachment scores(LAS),但是有助於特徵處理以及整個模型過程的理解,看不懂論文和博客的建議看一下代碼。

二、transition-based dependency parser

首先每一個決策過程都是基於當前的狀態(configuration)做的決策(transition),做好transition後更新configuration進入下一步決策過程中,做決策時採用貪心算法哦,就是每一步都選擇當前認爲最好的transition就行,這樣只損失了一丟丟準確率,換來了速度的大幅度提升。

configurationc=\left ( s, b, A \right )s是一個棧(stack),b爲緩存隊列(buffer),A爲當前已經畫好的依賴弧線集合(dependency arcs),假設一個句子爲w_{1},w_{2},\cdots ,w_{n}w_{n}爲句子中的單詞哦,初始configuration爲s=\left [ ROOT \right ]b=\left [w_{1},w_{2},\cdots ,w_{n} \right ]A=\varnothing,如果一個configuration的buffer是空的,且s=\left [ ROOT \right ],則這是最後一個configuration,即終點狀態哦,即結束整個決策過程了哦。

transition:有三種,LEFT-ARC,RIGHT-ARC,SHIFT。下面詳細介紹,先用S_{i}代表stack的第幾個top元素(注意棧的先進後出哦,是按出的順序算第幾個的),用b_{i}對應buffer中的第幾個元素(隊列先進先出,是按出的順序算第幾個的),則

             LEFT-ARC\left ( l \right ):當stack中元素個數大於等於2時,添加一個dependency arc爲S_{1}\rightarrow S_{2},且該arc對應的依賴關係(label)爲l,然後將S_{2}從stack中移除。

             RIGHT-ARC\left ( l \right ):當stack中元素個數大於等於2時,添加一個dependency arc爲S_{2}\rightarrow S_{1},且該arc對應的依賴關係爲l,然後將S_{1}從stack中移除。

             SHIFT:當buffer中元素個數大於等於1時,將b_{1}從buffer中移除,添加到stack中。

N_{l}代表依賴關係l總共的種類數,那麼在一個configuration對應的transition有2N_{l}+1種,也就是說每一步決策都是一個2N_{l}+1分類問題。將上述過程對應一下下圖一看就明白了。

 三、將上述過程用神經網絡表示

神經網絡爲三層,輸入層,隱藏層,softmax輸出層

 輸入層:當然是從configuration中提取的特徵啦,將單詞、詞性、已產生的arc label三種輸入的embedding cancat起來,那麼這三種輸入分別爲什麼呢?

      單詞S_{1}_{\cdot}wS_{2}_{\cdot}wS_{3}_{\cdot}wb_{1}_{\cdot}wb_{2}_{\cdot}wb_{3}_{\cdot}wlc_1\left ( S_{1} \right )_{\cdot}wlc_1\left ( S_{2} \right )_{\cdot}wrc_1\left ( S_{1} \right )_{\cdot}wrc_1\left ( S_{2} \right )_{\cdot}wlc_2\left ( S_{1} \right )_{\cdot}wlc_2\left ( S_{2} \right )_{\cdot}wrc_2\left ( S_{1} \right )_{\cdot}wrc_2\left ( S_{2} \right )_{\cdot}wlc_1\left (lc_1\left ( S_{1} \right ) \right )_{\cdot}wlc_1\left (lc_1\left ( S_{2} \right ) \right )_{\cdot}wrc_1\left (rc_1\left ( S_{1} \right ) \right )_{\cdot}wrc_1\left (rc_1\left ( S_{2} \right ) \right )_{\cdot}w

共18個特徵哦,其中.w代表對應的單詞,lc_1代表left-most children,rc_1代表right-most children,比如上上圖中,has的left-most children就是所有從has畫起的箭頭指向的單詞中在has左邊且最靠左的(在句子中最靠開頭的),has的right-most children就是所有從has畫起的箭頭指向的單詞中在has右邊且最靠右的(在句子中最靠開頭的),he是has的left-most children,\cdot (末尾的句號)是has的right-most children。

      詞性S_{1}_{\cdot}tS_{2}_{\cdot}tS_{3}_{\cdot}tb_{1}_{\cdot}tb_{2}_{\cdot}tb_{3}_{\cdot}tlc_1\left ( S_{1} \right )_{\cdot}tlc_1\left ( S_{2} \right )_{\cdot}trc_1\left ( S_{1} \right )_{\cdot}trc_1\left ( S_{2} \right )_{\cdot}tlc_2\left ( S_{1} \right )_{\cdot}tlc_2\left ( S_{2} \right )_{\cdot}trc_2\left ( S_{1} \right )_{\cdot}trc_2\left ( S_{2} \right )_{\cdot}tlc_1\left (lc_1\left ( S_{1} \right ) \right )_{\cdot}tlc_1\left (lc_1\left ( S_{2} \right ) \right )_{\cdot}trc_1\left (rc_1\left ( S_{1} \right ) \right )_{\cdot}trc_1\left (rc_1\left ( S_{2} \right ) \right )_{\cdot}t。共18個特徵哦,其中.t代表對應的詞性。

      arc labellc_1\left ( S_{1} \right )_{\cdot}llc_1\left ( S_{2} \right )_{\cdot}lrc_1\left ( S_{1} \right )_{\cdot}lrc_1\left ( S_{2} \right )_{\cdot}llc_2\left ( S_{1} \right )_{\cdot}llc_2\left ( S_{2} \right )_{\cdot}lrc_2\left ( S_{1} \right )_{\cdot}lrc_2\left ( S_{2} \right )_{\cdot}llc_1\left (lc_1\left ( S_{1} \right ) \right )_{\cdot}llc_1\left (lc_1\left ( S_{2} \right ) \right )_{\cdot}lrc_1\left (rc_1\left ( S_{1} \right ) \right )_{\cdot}lrc_1\left (rc_1\left ( S_{2} \right ) \right )_{\cdot}l。共12個特徵哦,其中.l代表對應的依賴關係。

輸入層到隱層爲全連接,在隱層後面加全連接和softmax,輸出屬於2N_{l}+1中某一種的概率。

四、trick

1. 隱層的激活函數不用relu,而用立方函數,主要是立方函數剛好擬合上述48中特徵的各種組合,非常像人工設計的那種。你看下面的公式一下就能明白。

                                             \left (w_{1}x_1+ w_{2}x_2+\cdots +w_{m}x_m+b \right )^3\\ =\sum_{i,j,k}\left ( w_{i}w_{j}w_{k} \right )x_{i}x_{j}x_{k}+\sum_{i,j}b\left ( w_{i}w_{j} \right )x_{i}x_{j}\cdots

2.提前計算好高頻率單詞的embedding和權重矩陣相乘,這樣後面需要計算的時候只需要去裏面找,減少重複計算,節約時間。

3.目標函數加入了正則化項。

五、和傳統方法相比

上面可知神經網絡爲48個特徵,因爲神經網絡是非線性,包括立方函數都能幫助提取各個特徵直接的隱含聯繫,比如是否共同出現這種。但是傳統的方法只能人工將這48個特徵各種組合,表示一起出現的情況,那樣就會出現成千上百種組合,即成千上百種特徵,但是每個句子可能只出現了一兩種,這樣特徵向量(0101那種向量)就會非常稀疏。而且統計起來也很耗時,關鍵是人工設計的特徵容易漏掉一些信息,換一種場景,特徵就得重新設計,泛化能力差。

六、實驗結果

驗證用了三種數據,英文的有兩種CoNLL dependencies和Stanford dependencies,中文的有CTB。

精度判讀:

            unlabeled attachment scores(UAS):只預測是LEFT-ARC,RIGHT-ARC,SHIFT中的一種(即三分類)

            labeled attachment scores(LAS):還有預測是那種依賴關係,即2N_{l}+1分類。

1. 準確率和速度基本都最好

2. 立方函數效果最好

3. 使用預訓練的詞向量初始化比隨機初始化詞向量效果好

 

4.詞性和已有依賴關係作爲輸入是有用的,但是若已經有詞性,再加入已有依賴關係則效果甚微,因爲詞性已經捕捉了依賴關係信息。

5. 將隱層的每一個神經元作爲一個特徵(feature),分別看這個神經元與輸入(word,pos,label)的權重矩陣大於0.2的部分,看圖中多數分佈在pos,說明pos特徵很重要。這個方法可以幫我們看出什麼特徵更重要,比傳統方法好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章