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