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