什么是依存句法樹
依存句法樹就是表示一個(gè)句子中詞與詞之間的依存關(guān)系,如下圖
其中兩個(gè)詞之前的弧表示這兩個(gè)詞有依存關(guān)系,弧上的標(biāo)簽為二者的關(guān)系,弧的始發(fā)點(diǎn)為父親節(jié)點(diǎn),箭頭指向?yàn)楹⒆庸?jié)點(diǎn)。比如The 和 fox 是冠詞+名詞(det)的名詞短語(yǔ)。
除了一個(gè)詞,即根節(jié)點(diǎn)(這里為jumped)外,其他詞都有詞作為父親節(jié)點(diǎn),而該根節(jié)點(diǎn)(jumped)的父親節(jié)點(diǎn)為root。
但是注意,依存句法樹是不允許弧之間有交叉或者回路!
依存句法樹數(shù)據(jù)表示
依存句法樹的文本表示格式為conll格式,如表
根據(jù)該表的父親節(jié)點(diǎn)索引和對(duì)應(yīng)的弧上關(guān)系就能還原該依存句法樹。其中-1表示根節(jié)點(diǎn)。
依存句法樹的用途
我們通常將依存句法的特征融入到其他任務(wù)模型里,比如機(jī)器翻譯、意見挖掘、語(yǔ)篇分析等,一般能得到更好的性能。
那怎么得到依存句法特征呢?通常有兩種方法:
將依存句法樹喂給遞歸神經(jīng)網(wǎng)絡(luò),得到的隱層表示可以作為該依存句法的特征表示。
將依存句法樹交給特征模板,從而得到該依存句法的特征表示。
什么是Transition-based基于轉(zhuǎn)移的框架?
這個(gè)框架由狀態(tài)和動(dòng)作兩部分構(gòu)成,其中狀態(tài)用來(lái)記錄不完整的預(yù)測(cè)結(jié)果,動(dòng)作則用來(lái)控制狀態(tài)之間的轉(zhuǎn)移。
用在生成依存句法樹上,則具體表示為從空狀態(tài)開始,通過(guò)動(dòng)作轉(zhuǎn)移到下一個(gè)狀態(tài),一步一步生成依存句法樹,最后的狀態(tài)保存了一個(gè)完整的依存樹。依存分析就是用來(lái)預(yù)測(cè)詞與詞之間的關(guān)系,現(xiàn)在轉(zhuǎn)為預(yù)測(cè)動(dòng)作序列。在基于轉(zhuǎn)移的框架中,我們定義了4種動(dòng)作(棧頂?shù)脑卦叫”硎倦x棧頂越近):
移進(jìn)(shift):隊(duì)列首元素出棧,壓入棧成為。
左規(guī)約(arc_left_l):棧頂2個(gè)元素規(guī)約,下沉成為的左孩子節(jié)點(diǎn),l為弧上關(guān)系。
右規(guī)約(arc_right_l):棧頂2個(gè)元素規(guī)約,下沉成為的右孩子節(jié)點(diǎn),l為弧上關(guān)系。
根出棧(pop_root):根節(jié)點(diǎn)出棧,分析完畢。
ps:下沉的意思
0下沉,視覺(jué)效果能看出是1的孩子
所以,我們基于轉(zhuǎn)移的依存句法分析器就由預(yù)測(cè)樹結(jié)構(gòu)問(wèn)題轉(zhuǎn)為預(yù)測(cè)動(dòng)作序列問(wèn)題。使得問(wèn)題簡(jiǎn)單了不少。
Transition-based基于轉(zhuǎn)移的具體例子
還是以上面的依存樹為例:
一整套依存分析的動(dòng)作序列(金標(biāo),訓(xùn)練數(shù)據(jù))就變?yōu)椋?/p>
詳細(xì)解釋下:
初始狀態(tài)
棧為空,隊(duì)列為整個(gè)文本的數(shù)字序列。這個(gè)時(shí)候只能進(jìn)行移進(jìn)shift操作:
因?yàn)樽筮厳?duì)一個(gè)元素0,還是只能進(jìn)行移進(jìn)shift操作:
這個(gè)時(shí)候棧中有2個(gè)元素,我們此時(shí)看依存樹
0、1之間并沒(méi)有弧,不能進(jìn)行規(guī)約,所以還是只能shift:
此時(shí)看棧頂兩元素,發(fā)現(xiàn)依存樹中1、2之間有依存關(guān)系
而且1為2的孩子,所以此時(shí)的動(dòng)作為左規(guī)約arc_left,1下沉,為2的孩子(此時(shí)實(shí)際操作為1被踢出棧,棧里剩為0、2,踢出是因?yàn)樽詈竽芨鶕?jù)動(dòng)作序列還原整個(gè)依存樹,當(dāng)然也為了接下來(lái)的操作方便),此時(shí)標(biāo)簽為amod:
此時(shí)棧里為0、2,再次查看依存樹
發(fā)現(xiàn)0、2之間有依存關(guān)系,其中0為2的孩子,所以此時(shí)操作為左規(guī)約,此時(shí)標(biāo)簽為det
...
中間略過(guò)一些步驟,因?yàn)槎际峭?,這次說(shuō)下第9步:
此時(shí)棧中為3、4,查看依存樹
按照正常操作,此時(shí)應(yīng)該arc_right右規(guī)約,但是如果真的4就下沉,就沒(méi)了。而一會(huì)5要入棧,再查看依存樹發(fā)現(xiàn)4是自己的爸爸,天吶,5的爸爸沒(méi)了,找不到了,消失了,其他詞都有爸爸,就5沒(méi)有,還有比這個(gè)更慘的嗎?這就沒(méi)發(fā)再進(jìn)行操作了!所以,還有一個(gè)潛規(guī)則如果操作為棧頂元素要進(jìn)行arc_right時(shí),不執(zhí)行該操作,而選擇shift。
而你可能會(huì)問(wèn)arc_left會(huì)有這樣的問(wèn)題嗎?不會(huì)啦,比如3、4進(jìn)行arc_left操作,3下沉,如果右邊的隊(duì)列中有父親節(jié)點(diǎn)是3,那么就表示該依存樹有交叉或者回路!這種是不可能發(fā)生的,因?yàn)橐来鏄洳辉试S有交叉或者回路?。ú恍诺脑?,你自己畫畫試試)
最后說(shuō)下,pop_root根彈出操作,只能發(fā)生在最后
右下角的數(shù)據(jù)為詞與詞之間的關(guān)系,這個(gè)就是根據(jù)動(dòng)作序列生成的依存關(guān)系(父親,孩子,關(guān)系),根據(jù)該關(guān)系,就能還原成原來(lái)的依存樹。
神經(jīng)網(wǎng)絡(luò)模型
我們用神經(jīng)網(wǎng)絡(luò)來(lái)進(jìn)行特征抽取,該網(wǎng)絡(luò)共分為2部分:
編碼端:用來(lái)負(fù)責(zé)計(jì)算詞的隱層向量表示
解碼端:用來(lái)解碼計(jì)算當(dāng)前狀態(tài)的所有動(dòng)作得分
編碼端
我們用Bi-LSTM來(lái)編碼一個(gè)句子
,計(jì)算對(duì)應(yīng)的隱層表示
。公式表示為:
其中,為詞向量,為詞性向量,為向量拼接。
具體解釋:
就是咱們平時(shí)用的詞的embedding
就是詞性,比如是NN,VV,VP等。將它當(dāng)成詞的操作一樣,用它自己的embedding(和詞的embedding不是一個(gè)?。┍硎?。
就是向量拼接,咋拼接都行,cat呀,add呀都行的。自己嘗試哪個(gè)效果好用哪個(gè),沒(méi)有死規(guī)定。而我們這里用的是cat。
解碼端
解碼端就需要對(duì)每一個(gè)狀態(tài)打出所有動(dòng)作的得分。根據(jù)經(jīng)驗(yàn),認(rèn)為棧頂三元素和隊(duì)列首元素為動(dòng)作預(yù)測(cè)關(guān)鍵特征,于是將棧頂三元素(下標(biāo)越小離棧頂越近)和隊(duì)列首元素進(jìn)行拼接。然后用線性變換計(jì)算每一個(gè)動(dòng)作的分?jǐn)?shù):
模型預(yù)測(cè)
對(duì)每一個(gè)動(dòng)作的分?jǐn)?shù)進(jìn)行Softmax概率化,然后輸入到交叉熵中,作為目標(biāo)函數(shù)。然后再用Adam來(lái)進(jìn)行更新模型參數(shù),最小化目標(biāo)函數(shù):
其中為金標(biāo)動(dòng)作序列的概率,為模型參數(shù)。
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4771瀏覽量
100712 -
框架
+關(guān)注
關(guān)注
0文章
403瀏覽量
17475 -
機(jī)器翻譯
+關(guān)注
關(guān)注
0文章
139瀏覽量
14880
原文標(biāo)題:詳解Transition-based Dependency parser基于轉(zhuǎn)移的依存句法解析器
文章出處:【微信號(hào):zenRRan,微信公眾號(hào):深度學(xué)習(xí)自然語(yǔ)言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論