Chapter7-8_Deep Learning for Constituency Parsing
文章目錄
- 1 什么是Constituency Parsing
- 2 解決方案
- 2.1 Chart-based Approach
- 2.2 Transition-based Approach
- 2.3 Grammer as Foreign Language
本文為李弘毅老師【Deep Learning for Constituency Parsing】的課程筆記,課程視頻youtube地址,點這里👈(需翻墻)。
下文中用到的圖片均來自于李宏毅老師的PPT,若有侵權,必定刪除。
文章索引:
上篇 - 7-7 Deep Learning for Coreference Resolution
下篇 - 7-9 Deep Learning for Dependency Parsing
總目錄
1 什么是Constituency Parsing
Constituency parsing要做的事情就是解析出句子中所有的constituents。constituent在英文字典中的意思是“成分”,而在我們這次的這個場景中可以理解為句子中的一個“單元”。比如下面這句話中,“deep learning"就是一個constituent,“very powerful"也是一個constituent,甚至每一個單詞都是一個"constituent”。但是"learning is very"這樣狗屁不通的句子就不是"constituent”。一種感性的理解,只要讀的通的,就是"constituent"。
每個constituent在語言學中都有對應的專有名詞(POS tags),比如"deep learning"就是NP(Noun phrase),"very power"就是ADJP(Adjective phrase)等等。多個constituents可以組成一個更大的constituent。這也就構成了一棵樹的結構,每個節點都是我們要找的constituent。為了簡化,本文只考慮二叉樹的情況。
那么,到底有哪些constituents呢?可見下表。
2 解決方案
用deep learning的方法來解決Constituency Parsing的問題有兩個方案,一個是Chart-based Approach,另一個是Transition-based Approach。
2.1 Chart-based Approach
chart-based方法很直接,就是遍歷句子里的所有spans,然后對每個span做兩次分類,先推測這個span是不是一個constituent,如果是的話,再推測這個constituent的詞性是什么。
模型的結構和上一篇中的Coreference Resolution很像。就是把整個句子過一個預訓練的模型,然后對模型的輸出取一個感興趣的span,抽取這個span的特征,再送入剛才說的兩個分類器當中。
如果要遍歷所有的span的話,就要遍歷N(N-1)/2次,這樣做會有一個大問題,就是當模型認為"deep learning is"和"is very powerful"都是constiuent的時候,模型就自相矛盾了。
所以,實際情況下,并不是去遍歷所有的spans,而是去遍歷所有的樹結構。然后取總置信度最高的那棵樹來作為最終的那棵樹。而去遍歷所有的樹的時候,會有許多需要重復計算的子節點,這就是一個典型的動態規劃問題了。有個叫做CKY的算法就是來解決遍歷樹這個問題的。
2.2 Transition-based Approach
Transition-based方法有三個狀態,一個叫做stack,用來存儲已經操作過的元素;一個叫做buffer,用來存儲還未操作的句子;還有一個叫做actions,表示著可以采取的動作。動作有"create",“shift"和"reduce"三種?!癱reate"表示一個詞性的開始,將移入stack當中,比如NP從這個位置開始?!皊hift"表示將buffer中的一個單詞移入stack當中?!皉educe"表示一個詞性的結束,結束符也將移入stack當中。
比如下圖當中,每一步采取的action在下半圖,每一個action的結果將保存在上半圖的stack當中。首先create了一個”(s"表示"s"從這里開始,然后create了一個”(NP"表示"NP"從這里開始,接著兩個shift,把"deep"和"learning"放入stack當中,接著一個"reduce”,表示"NP"的結束,即"deep learning"是一個"NP”,以此類推,直到全部結束。
這個方法的網絡結構如下,就是將"stack","previous actions"和"buffer"分別過一個RNN,然后將這三個結果再一起過一個分類網絡,輸出要采取什么action,接著根據action更新狀態,如此循環,直到結束。
看到有action,很多人可能會聯想到強化學習,難道訓練的時候要用強化學習的方法嗎?不用!這就是一個簡單的分類任務。因為我們的ground truth明確地告訴了我們這一步要輸出什么action,所以只要每一步做分類就可以了。
2.3 Grammer as Foreign Language
還有一種直接用seq2seq的方法去做的,這種方法的關鍵就在于構造輸出的結果是什么。一種構造方法如下圖所示,自頂向下,由左向右,構造出來的和剛才Transition-based Approach的簡直一模一樣。只不過這里是直接用seq2seq去做的。
總結
以上是生活随笔為你收集整理的Chapter7-8_Deep Learning for Constituency Parsing的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Web框架——Flask系列之请求上下文
- 下一篇: 十四、MySQL函数相关知识总结(简单易