提到dependency parser,我們就會想到自然語言處理娩践,而句法分析是自然語言處理領(lǐng)域的一個關(guān)鍵問題地来,dependency parser作為句法分析中的一個文法體系,近年來望众,成為研究熱點,并且逐漸廣泛應(yīng)用于其他自然語言處理任務(wù)中。飛馬網(wǎng)于3月21日晚烂翰,邀請到上海交大計算機科學(xué)與信息碩士夯缺,先后在UBS和螞蟻金服工作過的胡翔老師,在直播中為我們分享關(guān)于dependency parser的研究進展以及它的一些主流方法等相關(guān)內(nèi)容甘耿。
以下是本次分享內(nèi)容:
一.自然語言理解的主要解決問題
我們首先要了解一下自然語言理解領(lǐng)域想要解決的幾個問題踊兜。自然語言處理的領(lǐng)域非常廣,信息檢索佳恬、智能問答捏境、情感分析、自動翻譯等等毁葱,都可以說是這個領(lǐng)域非常難且有待解決的問題垫言,今天我們主要討論的是語義表達(dá)及知識表達(dá)。
我們先從一個簡單的例子著手倾剿,來了解一下語義表達(dá)筷频。下面這張圖片的兩句話,放到現(xiàn)在的語義自動匹配模型里柱告,幾乎相同截驮,但為什么到人類理解這里,這兩句話就是完全不同的意思呢际度?
從語義角度來說葵袭,一句話的含義是有層次和主要元素的,主要元素用學(xué)術(shù)性的話語說就是語義框架乖菱,也就是我們所說的“主謂賓”坡锡。雖然不是所有的句子都會有主謂賓覆蓋,但我們這里窒所,先拿一個主謂賓的句子舉個例子鹉勒。
主謂賓的句式可以理解為,這個句子里面有三個不同類型的槽吵取,每個槽只能填一個字或詞禽额。一旦我們把兩句話結(jié)構(gòu)化之后,它們的區(qū)別就十分明顯了皮官。
所以問題就來了脯倒,有沒有一種結(jié)構(gòu)化的表達(dá)方式,可以有效地解決語義表達(dá)這個問題捺氢?我們細(xì)想一下藻丢,這個問題其實有幾大難點。首先摄乒,如果說存在這樣一種結(jié)構(gòu)悠反,那么這個結(jié)構(gòu)一定要具有普適性残黑,其次,更難的問題是斋否,如何讓計算機實現(xiàn)把一個序列化的句子轉(zhuǎn)化成這種結(jié)構(gòu)梨水。
二.自然語言理解的幾種主流理論
接下來的部分,我們就來談?wù)勀壳敖鉀Q這兩個問題的方法以及思考茵臭。自然語言理解主要有以下三種主流理論冰木。
1.Phrase structure(句法結(jié)構(gòu)):
這套理論是由喬姆斯基提出的,在句法結(jié)構(gòu)中笼恰,一個非終結(jié)符只能生成小于等于兩個非終結(jié)符,或者生成一個終結(jié)符歇终。
非終結(jié)符就是這張圖里面社证,像“S、NP评凝、VP”等這些沒有實詞的標(biāo)簽追葡,在我們構(gòu)成樹狀節(jié)點的結(jié)構(gòu)中,它下面還會有子節(jié)點奕短,有子節(jié)點的節(jié)點宜肉,我們都稱之為非終結(jié)符。
終結(jié)符就是這張圖里面翎碑,像“she谬返、bought、car”等這些具體的實詞日杈,是樹狀結(jié)構(gòu)中的葉子節(jié)點遣铝。
我們從句子層面看,一句話可以根據(jù)語義的層次性莉擒,即它們之間的緊密型酿炸,被表達(dá)成一個二叉樹,如上圖所示涨冀。
那這個句法結(jié)構(gòu)有什么缺陷呢填硕?我們看下圖,首先它是一個強序列要求的結(jié)構(gòu)鹿鳖。其次扁眯,它不是各種語言通用的框架,依賴于特定語言規(guī)則栓辜,普適性很差恋拍。最后,它反映的語義信息比較有限藕甩。
2.Dependency structure(一層句法):
它通過用詞與詞之間的有效邊來表示語法關(guān)系施敢,因此在形式上會更簡單周荐、直觀。
在上圖這個例子里面僵娃,我們可以看到一條邊SBJ概作,也就是指句子的主語,OBJ就是指句子的賓語默怨,NMOD就是指名詞的修飾詞讯榕,它通過邊的類型來定義詞與詞之間的關(guān)系。而邊的類型比較多匙睹,目前有三十幾種愚屁。
3.Frame semantics(框架語義):
它相比于之前的兩個理論,更偏重于語義及知識表達(dá)痕檬,這套理論認(rèn)為一個完整的表達(dá)是要結(jié)合背景知識的霎槐。比如“吃”這個詞,不能獨立于知識來討論這個詞應(yīng)該怎么用梦谜,而要把它放在完整的語義結(jié)構(gòu)中丘跌。“轉(zhuǎn)”這個詞也是如此唁桩。
?
三.Dependency parser的意義
Dependency parser是我們今天的主講內(nèi)容闭树,所以我們就dependency parser來討論它的主要意義是什么。其實要討論dependency parser的意義荒澡,這可能是個比較難的話題报辱,因為它是自然語言處理領(lǐng)域里面一項比較基礎(chǔ)的研究,但它真正在實際應(yīng)用中的效果仰猖,主要有以下幾方面:
我們可以看到捏肢,Tree-LSTM較Bi-LSTM并沒有很明顯的優(yōu)勢,所以“結(jié)構(gòu)化是不是有必要”饥侵,仍然是一個爭議點鸵赫,在胡翔老師看來,他認(rèn)為這個話題對dependency parser的研究相當(dāng)于是對語言本質(zhì)的一些揭露躏升,它的研究成果對理解自然語言很有幫助辩棒,雖然它不一定在實際應(yīng)用中起到效果。
四.Dependency parser的結(jié)構(gòu)
在傳統(tǒng)的dependency parser結(jié)構(gòu)中膨疏,有以下幾個限制:
在這些條件下一睁,自然而言最后構(gòu)成的結(jié)果是一棵樹。存在爭議的一點是佃却,我們構(gòu)成一個dependency parser結(jié)構(gòu)的時候者吁,有交叉還是無交叉,實際上饲帅,支持交叉复凳,句子表達(dá)的語義性更強瘤泪,但相繼引來的pass難度也會更高。
依存句法結(jié)構(gòu)的規(guī)范了解完之后育八,我們來介紹它的幾種主流pass方法对途。所謂的parser就是教會計算機把一句話自動地翻譯成所規(guī)范的結(jié)構(gòu),因此我們就要有一些方法髓棋,幫助計算機能夠結(jié)合上下文或某些操作实檀,來縮小它的搜索范圍和空間,有效地去構(gòu)成一棵樹按声。
1.Transition-based parser:
這是最經(jīng)典的方法膳犹,transition-based簡單來說是它定義的一系列操作,我們只要用這一系列的操作一路做下去签则,最后就能把它變成一棵樹镣奋,這是直觀一點的理解。
這種pass方法主要基于狀態(tài)轉(zhuǎn)移怀愧,我們來看下面這張圖中的例子,來直觀地了解一下具體過程:
shift的功能是把當(dāng)前臨時站I站頂里面的token或一個結(jié)構(gòu)余赢,往左邊的S站里壓一個芯义。
然后我們看到圖三里的Left-Arc(向左形成一條弧)操作妻柒,它的具體意義是從I和S里面各取一個元素彈出來扛拨,畫一條左弧把它們連起來,丟到最右邊的A里面举塔,A的意義是一個操作歷史绑警。
在“she”和“bought”之間形成一條左弧,左弧的意義是央渣,弧向哪邊指计盒,被指向的那個token是作為子節(jié)點,指別人的token是作為一個父節(jié)點芽丹,在這里北启,“bought”就作為一個父節(jié)點重新被壓到站里面,之后的操作就是不斷循環(huán)往復(fù)拔第,一直做到I站為空咕村,這時候過程終止。
A站表示這個過程當(dāng)中的操作記錄蚊俺,我們通過A站看到形成的弧是哪些懈涛,就能形成一棵樹。
這個算法的意義主要是泳猬,“我永遠(yuǎn)只操作我這句話最前面的兩個token”批钠,可以這么理解宇植,transition-based parser是通過基于局部詞的組合,來進行局部的合并价匠,一直到把整個東西“吃”完当纱。它在運行性能上有優(yōu)勢,包含更多的語義性踩窖。
2.Graph-based parser:
相比于上面局部的方法坡氯,graph-based parser就是一種全局的方法。
它的核心思想是洋腮,不管每個詞之間的距離箫柳,把詞與詞的關(guān)系密切性變成一個值,然后生成一個對角樹啥供,生成這個樹的路徑就是dependency parser的路徑悯恍。它的優(yōu)勢是能夠?qū)崿F(xiàn)局部最優(yōu)解,因此它不會因為之前的誤差伙狐,導(dǎo)致全局最后的pass結(jié)果錯誤涮毫。
五.基于deep learning的parser model介紹
最后我們介紹基于transition-based理論的一些deep learning模型。
1.Transition-based methods:
它的主要思路是先把一個句子變成句法樹贷屎,再變成dependency parser罢防,這個方法有點舍近求遠(yuǎn),但它的效果不錯唉侄。它同樣會定義一些操作咒吐,即在一個序列上不斷做這些操作,直到結(jié)束属划,就能形成一棵樹恬叹。主要有以下三種操作:
這個模型就是在序列中,插左括號或右括號的非典型性序列打標(biāo)問題同眯,deep learning在里面起的作用是绽昼,每一個左括號和右括號封閉的token,把它們表達(dá)成一個更高級的含義须蜗。
2.Graph-based model:
這個模型是把之前構(gòu)建數(shù)的問題變成距離計算的問題绪励。它本質(zhì)做的事情是建立一個矩陣,行和列都是這個句子里的token唠粥,每兩個行列中的一個點表示a修飾b的概率或b修飾a的概率的一個得分疏魏,最后要形成樹,我們就是在這個距離向量中找一棵最小生成樹晤愧,生成出來的就是dependency parser大莫。
所以在deep learning的模型里面,比較重要的就是怎么去計算這個距離向量官份,同樣的只厘,也是因為有word embedding的發(fā)現(xiàn)烙丛,讓我們能夠把一個句子變成連續(xù)向量。
那么在實際應(yīng)用中羔味,dependency parser有多少意義呢河咽?我們不能否認(rèn)dependency parser的意義,但它有幾點很大的限制:
那么為什么中文準(zhǔn)確率會那么低呢赋元?主要有以下兩點:
為了解決這個問題忘蟹,我們設(shè)計了一種簡化標(biāo)注的思路:
怎么簡化呢?就是讓標(biāo)注人員去標(biāo)這里面的語義結(jié)構(gòu)搁凸,識別里面的語義塊媚值,但它仍然有缺陷,我們只能強化學(xué)習(xí)护糖。
以上所有部分就是這次線上直播的主要分享內(nèi)容褥芒,相信你一定對dependency parser有了更深入的認(rèn)識,想了解更多更詳細(xì)內(nèi)容的小伙伴們嫡良,可以關(guān)注服務(wù)號:FMI飛馬網(wǎng)锰扶,點擊菜單欄飛馬直播,即可進行學(xué)習(xí)寝受。