句法分析:依存分析(Dependency Parsing)
目錄
1. 句法分析任務(wù)分類
2. 依存分析方法
2.1 什么是依存分析
2.2 傳統(tǒng)的基于轉(zhuǎn)移的依存分析(Transition-based Parsing)
2.3 神經(jīng)依存分析(Neural Dependency Parsing)
句法分析(syntactic parsing)是自然語言處理中的關(guān)鍵技術(shù)之一,它是對輸入的文本句子進行分析以得到句子的句法結(jié)構(gòu)的處理過程。對句法結(jié)構(gòu)進行分析,一方面是語言理解的自身需求,句法分析是語言理解的重要一環(huán),另一方面也為其它自然語言處理任務(wù)提供支持。例如句法驅(qū)動的統(tǒng)計機器翻譯需要對源語言或目標(biāo)語言(或者同時兩種語言)進行句法分析;語義分析通常以句法分析的輸出結(jié)果作為輸入以便獲得更多的指示信息。
1. 句法分析任務(wù)分類
根據(jù)句法結(jié)構(gòu)的表示形式不同,最常見的句法分析任務(wù)可以分為以下三種:
-
句法結(jié)構(gòu)分析(syntactic structure parsing),又稱短語結(jié)構(gòu)分析(phrase structure parsing),也叫成分句法分析(constituent syntactic parsing)。作用是識別出句子中的短語結(jié)構(gòu)以及短語之間的層次句法關(guān)系。
-
依存關(guān)系分析,又稱依存句法分析(dependency syntactic parsing),簡稱依存分析,作用是識別句子中詞匯與詞匯之間的相互依存關(guān)系。依存句法分析屬于淺層句法分析。
-
深層文法句法分析,即利用深層文法,例如詞匯化樹鄰接文法(Lexicalized Tree Adjoining Grammar, LTAG)、詞匯功能文法(Lexical Functional Grammar, LFG)、組合范疇文法(Combinatory Categorial Grammar, CCG)等,對句子進行深層的句法以及語義分析。
2. 依存分析方法
-
基于規(guī)則的方法: 早期的基于依存語法的句法分析方法主要包括類似CYK的動態(tài)規(guī)劃算法、基于約束滿足的方法和確定性分析策略等。
-
基于統(tǒng)計的方法:統(tǒng)計自然語言處理領(lǐng)域也涌現(xiàn)出了一大批優(yōu)秀的研究工作,包括生成式依存分析方法、判別式依存分析方法和確定性依存分析方法,這幾類方法是數(shù)據(jù)驅(qū)動的統(tǒng)計依存分析中最為代表性的方法。
-
基于深度學(xué)習(xí)的方法:近年來,深度學(xué)習(xí)在句法分析課題上逐漸成為研究熱點,主要研究工作集中在特征表示方面。傳統(tǒng)方法的特征表示主要采用人工定義原子特征和特征組合,而深度學(xué)習(xí)則把原子特征(詞、詞性、類別標(biāo)簽)進行向量化,在利用多層神經(jīng)元網(wǎng)絡(luò)提取特征。
https://www.jianshu.com/p/24e0d53b1ee2
https://blog.csdn.net/qq_28031525/article/details/79187080
用語言云分析依存句法和語義依存:語言云工具
生成句法分析樹:基于概率上下文無關(guān)文法(PCFG)
2.1 什么是依存分析
自然語言處理任務(wù)中,有很重要的一塊,就是分析語言的結(jié)構(gòu)。語言的結(jié)構(gòu),一般可以有兩 種視角:
前者,主要關(guān)心的是句子是怎么構(gòu)成的,詞怎么組成短語。所以研究Constituency,主要 是研究忽略語義的“ 語法” 結(jié)構(gòu)(content-free grammars) 。
后者,依賴關(guān)系,則主要關(guān)心的是句子中的每一個詞, 都依賴于哪個其他的詞。 比如下面這個句子:
“瞧這個可愛的小傻瓜!”
- “傻瓜”,是“瞧” 這個動作的對象,因此“傻瓜”是依賴于“瞧”的;
- “可愛的”、“小” 都是修飾“傻瓜”的,因此,這兩個形容詞都是依賴于“ 傻瓜” 的;
- “這個”同樣是指示“傻瓜”的,因此它也依賴于“傻瓜” 。
這樣,我們就清楚了這個句子中的所有依賴關(guān)系,畫成依賴關(guān)系圖則是這樣:
注意,在圖中我們增加了一個根節(jié)點“Root”,這是為了讓“瞧”這個字也有依賴的對 象。
當(dāng)然,關(guān)系依存分析,還有很多的規(guī)則,里面比較復(fù)雜,我不太感興趣,所以這里不多寫 了。
下面我們來介紹如何讓機器自動地幫我們來分析句子的結(jié)構(gòu)。
Dependency Structure展示了詞語之前的依賴關(guān)系,通常用箭頭表示其依存關(guān)系,有時也會在箭頭上標(biāo)出其具體的語法關(guān)系,如是主語還是賓語關(guān)系等。
Dependency Structure有兩種表現(xiàn)形式:
- 一種是直接在句子上標(biāo)出依存關(guān)系箭頭及語法關(guān)系,如:
? ? ? ? ? ? ? ? ? ? ? ??
- 另一種是將其做成樹狀機構(gòu)(Dependency Tree Graph)
? ? ? ? ? ? ? ? ??
Dependency Parsing可以看做是給定輸入句子??(其中常常是fake ROOT,使得句子中每一個詞都依賴于另一個節(jié)點)構(gòu)建對應(yīng)的Dependency Tree Graph的任務(wù)。而這個樹如何構(gòu)建呢?一個有效的方法是Transition-based Dependency Parsing。
2.2 傳統(tǒng)的基于轉(zhuǎn)移的依存分析(Transition-based Parsing)
這里主要介紹Nivre在2003年提出的“Greedy Deterministic Transition-based Parsing”方法,一度成為依存分析的標(biāo)準(zhǔn)方法。這里我簡單地介紹一下它的工作原理。
我們構(gòu)造一個三元組,分別是Stack、Buffer和一個Dependency Set。
- Stack:最開始只存放一個Root節(jié)點;
- Buffer:則裝有我們需要解析的一個句子;
- Set:中則保存我們分析出來的依賴關(guān)系, 最開始是空的。
state之間的transition有三類:?
https://zhuanlan.zhihu.com/p/66268929
我們要做的事情,就是不斷地把Buffer中的詞往Stack中推,跟Stack中的詞判斷是否有依 賴關(guān)系,有的話則輸出到Set中,直到Buffer中的詞全部推出,Stack中也僅剩一個 Root,就分析完畢了。
下面,我通過一個十分簡單的例子,來演示這個過程。這次,我們分析的句子是:
? ? ? ??
分析過程如下:
? ? ? ? ? ? ? ??
上面的過程怎么理解呢?
以上的過程,應(yīng)該不難理解,但是相信大家此時一定會有疑問:
? 我怎么讓機器去決定當(dāng)前的Action呢?即機器怎么知道,Stack中是否構(gòu)成了依賴關(guān) 系??
在Nivre的年代,這里使用是機器學(xué)習(xí)的方法, 需要做繁重的特征工程.這里的特征,往往 有個二值特征,即無數(shù)個指示條件作為特征,來訓(xùn)練模型,可以想象這么高緯度的 特征是十分稀疏的。因此,這種模型的95%左右的解析時間,都花費在計算特征上。這也 是傳統(tǒng)方法的最要問題。
2.3 神經(jīng)依存分析(Neural Dependency Parsing)
神經(jīng)依存分析方法,是斯坦福團隊2014年的研究成果,主要就是利用了神經(jīng)網(wǎng)絡(luò)的方法代 替了傳統(tǒng)機器學(xué)習(xí)方法、用低維分布式表示來代替?zhèn)鹘y(tǒng)方法的復(fù)雜的高維稀疏特征表示。而 整個解析的過程,依然是根據(jù)之前的Transition-based方法。
首先明確,我們的預(yù)測任務(wù),是「根據(jù)當(dāng)前的狀態(tài),即Stack、Buffer、Set的當(dāng)前狀態(tài),來構(gòu)建特征,然后預(yù)測出下一步的動作」。
在神經(jīng)依存分析中,我們的特征是怎么構(gòu)建的呢?我們可以利用的信息包括詞(word)、詞性(postag)和依賴關(guān)系的標(biāo)簽(label)。我們對這三者,都進行低維分布式表示,即通過Embedding的方法,把離散的word、label、tag都轉(zhuǎn)化成低維向量表示。
對于一個狀態(tài),我們可以選取stack、Buffer、set中的某些詞和關(guān)系,構(gòu)成一個集合,然 后把他們所有的embedding向量都拼接起來,這樣就構(gòu)成了該狀態(tài)的特征表示。
至于選擇哪些詞、關(guān)系,這個就是一個「經(jīng)驗性」的東西了,在斯坦福的論文中可以詳細(xì)了 解。整個模型的網(wǎng)絡(luò)結(jié)構(gòu)也十分簡潔:
對于Dependency Parsing的簡單介紹就到此為止。依存分析,并不是我們NLP中最常見 的任務(wù)之一,我們也很少看到直接將依存分析做應(yīng)用的,我們更常見的是分類、實體識別、 閱讀理解、對話等任務(wù)。但是依存分析,作為自然語言處理的一項基礎(chǔ)技術(shù),試圖讓機器去 理解語言的內(nèi)部結(jié)構(gòu),理解了結(jié)構(gòu),NLU(Natural Language Understanding)才成為可能。
?CS224N的Assignment3就是Neural Dependency Parsing的實現(xiàn),代碼見github:https://github.com/beyondguo/CS
?
總結(jié)
以上是生活随笔為你收集整理的句法分析:依存分析(Dependency Parsing)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【特征工程】与【表示学习】
- 下一篇: DIET:Dual Intent and