一、問題描述
這是一篇使用神經網絡來做依存句法分析的經典文章,傳統的依存句法分析特徵向量稀疏,特徵向量泛化能力差,特徵計算消耗大,用神經網絡做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就行,這樣只損失了一丟丟準確率,換來了速度的大幅度提升。
configuration:,是一個棧(stack),爲緩存隊列(buffer),爲當前已經畫好的依賴弧線集合(dependency arcs),假設一個句子爲,爲句子中的單詞哦,初始configuration爲,,,如果一個configuration的buffer是空的,且,則這是最後一個configuration,即終點狀態哦,即結束整個決策過程了哦。
transition:有三種,LEFT-ARC,RIGHT-ARC,SHIFT。下面詳細介紹,先用代表stack的第幾個top元素(注意棧的先進後出哦,是按出的順序算第幾個的),用對應buffer中的第幾個元素(隊列先進先出,是按出的順序算第幾個的),則
:當stack中元素個數大於等於2時,添加一個dependency arc爲,且該arc對應的依賴關係(label)爲,然後將從stack中移除。
:當stack中元素個數大於等於2時,添加一個dependency arc爲,且該arc對應的依賴關係爲,然後將從stack中移除。
:當buffer中元素個數大於等於1時,將從buffer中移除,添加到stack中。
代表依賴關係總共的種類數,那麼在一個configuration對應的transition有種,也就是說每一步決策都是一個分類問題。將上述過程對應一下下圖一看就明白了。
三、將上述過程用神經網絡表示
神經網絡爲三層,輸入層,隱藏層,softmax輸出層
輸入層:當然是從configuration中提取的特徵啦,將單詞、詞性、已產生的arc label三種輸入的embedding cancat起來,那麼這三種輸入分別爲什麼呢?
單詞:,,,,,,,,,,,,,,,,,。
共18個特徵哦,其中代表對應的單詞,代表left-most children,代表right-most children,比如上上圖中,has的left-most children就是所有從has畫起的箭頭指向的單詞中在has左邊且最靠左的(在句子中最靠開頭的),has的right-most children就是所有從has畫起的箭頭指向的單詞中在has右邊且最靠右的(在句子中最靠開頭的),he是has的left-most children, (末尾的句號)是has的right-most children。
詞性:,,,,,,,,,,,,,,,,,。共18個特徵哦,其中代表對應的詞性。
arc label:,,,,,,,,,,,。共12個特徵哦,其中代表對應的依賴關係。
輸入層到隱層爲全連接,在隱層後面加全連接和softmax,輸出屬於中某一種的概率。
四、trick
1. 隱層的激活函數不用relu,而用立方函數,主要是立方函數剛好擬合上述48中特徵的各種組合,非常像人工設計的那種。你看下面的公式一下就能明白。
2.提前計算好高頻率單詞的embedding和權重矩陣相乘,這樣後面需要計算的時候只需要去裏面找,減少重複計算,節約時間。
3.目標函數加入了正則化項。
五、和傳統方法相比
上面可知神經網絡爲48個特徵,因爲神經網絡是非線性,包括立方函數都能幫助提取各個特徵直接的隱含聯繫,比如是否共同出現這種。但是傳統的方法只能人工將這48個特徵各種組合,表示一起出現的情況,那樣就會出現成千上百種組合,即成千上百種特徵,但是每個句子可能只出現了一兩種,這樣特徵向量(0101那種向量)就會非常稀疏。而且統計起來也很耗時,關鍵是人工設計的特徵容易漏掉一些信息,換一種場景,特徵就得重新設計,泛化能力差。
六、實驗結果
驗證用了三種數據,英文的有兩種CoNLL dependencies和Stanford dependencies,中文的有CTB。
精度判讀:
unlabeled attachment scores(UAS):只預測是LEFT-ARC,RIGHT-ARC,SHIFT中的一種(即三分類)
labeled attachment scores(LAS):還有預測是那種依賴關係,即分類。
1. 準確率和速度基本都最好
2. 立方函數效果最好
3. 使用預訓練的詞向量初始化比隨機初始化詞向量效果好
4.詞性和已有依賴關係作爲輸入是有用的,但是若已經有詞性,再加入已有依賴關係則效果甚微,因爲詞性已經捕捉了依賴關係信息。
5. 將隱層的每一個神經元作爲一個特徵(feature),分別看這個神經元與輸入(word,pos,label)的權重矩陣大於0.2的部分,看圖中多數分佈在pos,說明pos特徵很重要。這個方法可以幫我們看出什麼特徵更重要,比傳統方法好。