NLP第九篇-句法分析

句法分析的基本任務是確定句子的語法結構或句子中詞匯之間的依存關系。句法分析不是一個自然語言處理任務的最終目標,但它往往是實現最終目標的關鍵環節。

句法分析分為句法結構分析依存關系分析兩種。以獲取整個句子的句法結構為目的的稱為完全句法分析,而以獲得局部成分為目的的語法分析稱為局部分析,依存關系分析簡稱依存分析

一般而言,句法分析的任務有三個:

判斷輸出的字符串是否屬于某種語言

消除輸入句子中詞法和結構等方面的歧義

分析輸入句子的內部結構,如成分構成、上下文關系等。

第二三個任務一般是句法分析的主要任務。

一般來說,構造一個句法分析器需要考慮兩部分工作:一部分是語法的形式化表示和詞條信息描述問題,形式化的語法規則構成了規則庫,詞條信息等由詞典或同義詞表等提供,規則庫與詞典或同義詞表構成了句法分析的知識庫;另一部分就是基于知識庫的解析算法了。

語法形式化屬于句法理論研究的范疇,目前在自然語言處理中廣泛使用的是上下文無關文法(CFG)和基于約束的文法,后者又稱合一文法。

簡單的講,句法結構分析方法可以分為基于規則的分析方法和基于統計的分析方法兩大類。

基于規則的句法結構分析方法的基本思路是,由人工組織語法規則,建立語法知識庫,通過條件約束和檢查來實現句法結構歧義的消除。

根據句法分析樹形成方向的區別,人們通常將這些方法劃分為三種類型:自頂向下的分析方法,自底向上的分析方法和兩者相結合的分析方法。自頂向下分析算法實現的是規則推導的過程,分析樹從根結點開始不斷生長,最后形成分析句子的葉結點。而自底向上分析算法的實現過程恰好想法,它是從句子符號串開始,執行不斷規約的過程,最后形成根節點。

基于規則的語法結構分析可以利用手工編寫的規則分析出輸入句子所有可能的句法結構;對于特定領域和目的,利用有針對性的規則能夠較好的處理句子中的部分歧義和一些超語法(extra-grammatical)現象。

但對于一個中等長度的輸入句子來說,要利用大覆蓋度的語法規則分析出所有可能的句子結構是非常困難的,而且就算分析出來了,也難以實現有效的消歧,并選擇出最有可能的分析結果;手工編寫的規則帶有一定的主觀性,還需要考慮到泛化,在面對復雜語境時正確率難以保證;手工編寫規則本身就是一件大工作量的復雜勞動,而且編寫的規則領域有密切的相關性,不利于句法分析系統向其他領域移植。

基于規則的句法分析算法能夠成功的處理程序設計語言的編譯,而對于自然語言的處理卻始終難以擺脫困境,是因為程序設計語言中使用的知識嚴格限制的上下文無關文法的子類,但自然語言處理系統中所使用的形式化描述方法遠遠超過了上下文無關文法的表達能力;而且人們在使用程序設計語言的時候,一切表達方式都必須服從機器的要求,是一個人服從機器的過程,這個過程是從語言的無限集到有限集的映射過程,而在自然語言處理中則恰恰相反,自然語言處理實現的是機器追蹤和服從人的語言,從語言的有限集到無限集推演的過程。

完全語法分析

基于PCFG的基本分析方法

基于概率上下文無關文法的短語結構分析方法,可以說是目前最成功的語法驅動的統計句法分析方法,可以認為是規則方法與統計方法的結合。

PCFG是CFG的擴展,舉個例子:

PCFG

當然,同一個符號不同生成式的概率之和為1。NP是名詞短語、VP是動詞短語、PP是介詞短語。

基于PCFG的句法分析模型,滿足以下三個條件:

位置不變性:子樹的概率不依賴于該子樹所管轄的單詞在句子中的位置

上下文無關性:子樹的概率不依賴于子樹控制范圍以外的單詞

祖先無關性:子樹的概率不依賴于推導出子樹的祖先節點

根據上述文法,『He met Jenny with flowers』有兩種可能的語法結構:

而且我們可以通過將樹中的所有概率相乘,得到兩棵子樹的整體概率,從中選擇概率更大的子樹作為最佳結構。

與HMM類似,PCFG也有三個基本問題:

給定一個句子W=w1w2…wn和文法G,如何快速計算概率P(W|G)

給定一個句子W=w1w2…wn和文法G,如何選擇該句子的最佳結構?即選擇句法結構樹t使其具有最大概率

給定PCFG G和句子W=w1w2…wn,如何調節G的概率參數,使句子的概率最大

首先是第一個問題,HMM中我們用的是前向算法和后向算法來計算觀察序列O概率,相似的,這里我們用的是內向算法和外向算法來計算P(W|G) 。

首先我們定義內向變量αij(A),與前向變量相似但又有不同,αij(A)即非終結符A推導出W中字串wiw(i+1)…wj的概率。那P(W|G)自然就等于α1n(S)了,S是起始符號,計算的就是由起始符號S推導出整個句子W=w1w2…wn的概率。

所以只要有αij(A)的遞歸公式就能計算出P(W|G),遞歸公式如下:

根據定義,αii(A)自然就等同于符號A輸出wi的概率;而αij(A)的計算思路是,這個子串wiw(i+1)…wj可以被切成兩部分處理,前一部分wiw(i+1)…wk由非終結符號B生成,后一部分wkw(k+1)…wj由非終結符號C生成,而BC由A生成。這樣將概率依次相乘,即可將一個大問題劃分為兩個小問題處理,兩個小問題又可以進一步劃分直到不能劃分為止,然后遞歸回來得到結果。

這里給一張內向變量計算方法示意圖:

這個問題也可以用外向算法來解決。

首先定義外向變量,βij(A)是,初始符號S在推導出語句W=w1w2…wn的過程中,產生符號串w1w2…w(i-1)Aw(j+1)…wn的概率(隱含著A會生成wiw(i+1)…wj)。也就是說βij(A)是S推導出除了以A節點為根節點的子樹以外的其他部分的概率。

《統計自然語言處理(第二版)》這本書里講錯了,這里我給出我自己的理解,書里給的算法步驟如下:

很明顯的錯誤,初始化都把結果初始化了,那這個算法還算什么,直接等于1就完了唄。

這是作者對外向變量定義理解模糊的問題,上面給了外向變量的定義,里面有一句話『隱含著A會生成wiw(i+1)…wj』,那問題在于,A會生成wiw(i+1)…wj,這到底算是條件還是推論。

看這個算法的初始化的意思,說β1n(A),在A=S的時候,為1,不等于S為0,意思是什么?意思就是『隱含著A會生成wiw(i+1)…wj』這句話是條件,β1n(S)已經隱含了S生成W=w1w2…wn了,所謂的w1w2…w(i-1)Aw(j+1)…wn也就不存在了,只剩下一個S->S了,所以概率自然為1。

但是在第三步這個地方,作者理解成什么意思了呢?作者又把『隱含著A會生成wiw(i+1)…wj』這句話當成推論了,認為在β1n(S),里S會生成W=w1w2…wn是推論,那真是就正好了,要求的結果就是S生成W=w1w2…wn,這不就結束了嗎,結果就導致了這個算法第一步初始化都把結果初始化了。

那我的理解是什么呢,通過這個公式計算出來的β1n(S),確實是正確的,意義實際上也是包含了『隱含著A會生成wiw(i+1)…wj』這句話是推論,但是右側式子里由于不斷遞歸而產生的β1n(S),是把『隱含著A會生成wiw(i+1)…wj』這句話當條件的,所以計算上沒有問題。

我傾向于為第三步中的β1n(S)加一個星號,以表明意義的不同。

書中還給了個外向變量的計算方法示意圖,我覺得也是莫名其妙:

他說βij(A)是這兩種情況的概率和,這我們知道j比i大,那這圖里這個k既比i小又比j大,這不是搞笑嗎。只能說圖上這倆C就不是一個C,k也不是一個k。

那我為什么會理解成一個呢,除了字母相同,他前面還這么講『必定運用了形如B->AC或者B->CA的規則』、『運用B->AC或者B->CA兩種規則的情況』,這明顯就是給人以順序交換的誤解。

另外,還在內向變量的使用上前后不一,可以說這本書里對外向算法的講解是非常失敗的。而且對外向算法的計算仍然需要用到內向算法的遞歸,那真的直接用內向算法就好了,外向算法還要多定義變量。

然后是第二個問題,選擇句子的最佳結構,也即給定一個句子W=w1w2…wn和文法G,

選定擁有最大概率的語法結構樹。這一問題與HMM中類似,仍然采用動態規劃的思想去解決。最后利用CYK算法去生成擁有最大概率的語法結構樹。

第三個問題是給定PCFG G和句子W=w1w2…wn,如何調節G的概率參數,使句子的概率最大,與HMM相對的,PCFG這里采用的算法名叫內外向算法。與前后向算法相同,也屬于一種EM算法,其基本思想是,首先給G的產生式隨機地賦予一個概率值(滿足歸一化條件),得到文法G0,然后根據G0和訓練數據,可以計算出每條規則使用次數的期望值,用期望值進行最大似然估計,得到語法G的新參數值,新的語法記作G1,然后循環執行該過程,G的參數概率將收斂于最大似然估計值。

PCFG只是一種特殊的上下文無關文法模型,根據PCFG的模型和句子,具體去對句子做語法分析,生成語法結構樹,靠的是還是CYK算法。CYK算法是一個用來判定任意給定的字符串W是否屬于一個上下文無關文法的算法。

基于PCFG的句法分析模型存在有許多問題,比如因為PCFG沒有對詞匯進行建模,所以存在對詞匯信息不敏感的問題。因此人們提出了詞匯化的短語結構分析器,有效的提升了基于PCFG的句法分析器的能力。

而且,我們上面也提到了PCFG的三個獨立性假設,這也導致了規則之間缺乏結構依賴關系(就像HMM的三個假設也不完全合理一樣),而在自然語言中,生成每個非終結符的概率往往是與其上下文結構有關系的,所以有人提出了一種細化非終結符的方法,為每個非終結符標注上其父節點的句法標記信息。

D. Klein提出了帶有隱含標記的上下文無關文法(PCFG with latent annotations,PCFG-LA),使得非終結符的細化過程可以自動進行,并且在使用EM算法優化時,為避免到達局部最優,對其進行了改進,提出了一種層次化的『分裂-合并』策略,以期獲取一個準確并且緊湊的PCFG-LA模型。基于PCFG-LA的Berkeley Parser作為非詞匯化句法分析器的代表,無論是性能表現還是運行速度,都是目前開源的短語結構分析器中最好的。其語法樹如下圖:

普通句法樹與PCFG-LA句法樹對照實例

這個x就是隱含標記,xi的取值范圍一般是人為設定的,一般取1~16之間的整數。而且PCFG-LA也類似于HMM模型,原始非終結符對應HMM模型中的觀察輸出,而隱含標記對應HMM模型中的隱含狀態。

淺層語法分析(局部語法分析)

由于完全語法分析要確定句子所包含的全部句法信息,并確定句子中各成分之間的關系,這是一項十分苦難的任務。到目前為止,句法分析器的各方面都難以達到令人滿意的程度,為了降低問題的復雜度,同時獲得一定的句法結構信息,淺層句法分析應運而生。

淺層語法分析只要求識別句子中的某些結構相對簡單的獨立成為,例如非遞歸的名詞短語、動詞短語等,這些被識別出來的結構通常稱為語塊(chunk)。

淺層句法分析將句法分析分解為兩個主要子任務,一個是語塊的識別和分析,另一個是語塊之間的依附關系分析。其中,語塊的識別和分析是主要任務。在某種程度上說,淺層句法分析使句法分析的任務得到了簡化,同時也有利于句法分析系統在大規模真實文本處理系統中迅速得到應用。

基本名詞短語(base NP)是語塊中的一個重要類別,它指的是簡單的、非嵌套的名詞短語,不含有其他子項短語,并且base NP之間結構上是獨立的。示例如下:

base NP識別就是從句子中識別出所有的base NP,根據這種理解,一個句子中的成分和簡單的分為baseNP和非base NP兩類,那么base NP識別就成了一個分類問題。

base NP的表示方法有兩種,一種是括號分隔法,一種是IOB標注法。括號分隔法就是將base NP用方括號界定邊界,內部的是base NP,外部的不屬于base NP。IOB標注法中,字母B表示base NP的開端,I表示當前詞語在base NP內,O表示詞語位于base NP之外。

基于SVM的base NP識別方法

由于base NP識別是多值分類問題,而基礎SVM算法解決的是二值分類問題,所以一般可以采用配對策略(pairwise method)和一比其余策略(one vs. other method)。

SVM一般要從上下文的詞、詞性、base NP標志中提取特征來完成判斷。一般使用的詞語窗口的長度為5(當前詞及其前后各兩個詞)時識別的效果最好。

基于WINNOW的base NP識別方法

WINNOW是解決二分問題的錯誤驅動的機器學習方法,該方法能從大量不相關的特征中快速學習。

WINNOW的稀疏網絡(SNoW)學習結構是一種多類分類器,專門用于處理特征識別領域的大規模學習任務。WINNOW算法具有處理高維度獨立特征空間的能力,而在自然語言處理中的特征向量恰好具有這種特點,因此WINNOW算法也常用于詞性標注、拼寫錯誤檢查和文本分類等等。

簡單WINNOW的基本思想是,已知特征向量和參數向量和實數閾值θ,先將參數向量均初始化為1,將訓練樣本代入,求特征向量和參數向量的內積,將其與θ比較,如果大于θ,則判定為正例,小于θ則判定為反例,將結果與正確答案作比較,依據結果來改變權值。

如果將正例估計成了反例,那么對于原來值為1的x,把它的權值擴大。如果將反例估計成了正例,那么對于原來值為1的x,把它的權值縮小。然后重新估計重新更改權重,直到訓練完成。

這其實讓我想到了LR算法,因為LR算法也是特征向量與參數向量的內積,最后將其送到Sigmoid函數中去拿到判定結果,然后大于0.5的為正例,小于0.5的為反例,實際上只要反過來,Sigmod函數輸出0.5時候的輸入就是WINNOW算法里的那個實數閾值θ。但是區別在于WINNOW算法只判定大小,不判定概率,而LR利用Sigmoid函數給出了概率。LR利用這給出的概率,通過使訓練集的生成概率最大化來調整參數,而WINNOW則是直接樸素的錯誤情況來增大或縮小相關參數。目測LR因為使用了梯度下降,它的收斂速度要快于WINNOW,而WINNOW的優勢則在于可以處理大量特征。

基于CRF的base NP識別方法

基于CRF的base NP識別方法擁有與SVM方法幾乎一樣的效果,優于基于WINNOW的識別方法、基于MEMM的識別方法和感知機方法,而且基于CRF的base NP識別方法在運行速度上較其他方法具有明顯優勢。

依存語法理論

在自然語言處理中,我們有時不需要或者不僅僅需要整個句子的短語結構樹,而且要知道句子中詞與詞之間的依存關系。用詞與詞之間的依存關系來描述語言結構的框架成為依存語法,又稱從屬關系語法。利用依存語法進行句法分析也是自然語言理解的重要手段之一。

有人認為,一切結構語法現象可以概括為關聯、組合和轉位這三大核心。句法關聯建立起詞與詞之間的從屬關系,這種從屬關系由支配詞從屬詞聯結而成,謂語中的動詞是句子的中心并支配別的成分,它本身不受其他任何成分支配

依存語法的本質是一種結構語法,它主要研究以謂詞為中心而構句時由深層語義結構映現為表層語法結構的狀況及條件,謂詞與體詞之間的同現關系,并據此劃分謂詞的詞類。

常用的依存于法結構圖示有三種:

計算機語言學家J. Robinson提出了依存語法的四條公理:

一個句子只有一個獨立的成分

句子的其他成分都從屬于某一成分

任何一個成分都不能依存于兩個或兩個以上的成分

如果成分A直接從屬于成分B,而成分C在句子中位于A和B之間,那么,成分C或者屬于成分A,或者從屬于B,或者從屬于A和B之間的某一成分。

這四條公理相當于對依存圖和依存樹的形式約束:單一父節點、連通、無環和可投射,由此來保證句子的依存分析結果是一棵有根的樹結構。

這里提一下可投射,如果單詞之間的依存弧畫出來沒有任何的交叉,就是可投射的(參考上面的兩個有向圖)。

為了便于理解,我國學者提出了依存結構樹應滿足的5個條件:

單純結點條件:只有終結點,沒有非終結點

單一父結點條件:除根節點沒有父結點外,所有的結點都只有一個父結點

獨根結點條件:一個依存樹只能有一個根結點,它支配其他結點

非交條件:依存樹的樹枝不能彼此相交

互斥條件:從上到下的支配關系和從左到右的前于關系之間是相互排斥的,如果兩個結點之間存在著支配關系,它們就不能存在于前于關系

這五個條件是有交集的,但它們完全從依存表達的空間結構出發,比四條公理更直觀更實用。

Gaifman 1965年給出了依存語法的形式化表示,證明了依存語法與上下文無關文法沒有什么不同..

類似于上下文無關文法的語言形式對被分析的語言的投射性進行了限制,很難直接處理包含非投射現象的自由語序的語言。20世紀90年代發展起來了約束語法和相應的基于約束滿足的依存分析方法,可以處理此類非投射性語言問題。

基于約束滿足的分析方法建立在約束依存語法之上,將依存句法分析看做可以用約束滿足問題來描述的有限構造問題。

約束依存語法用一系列形式化、描述性的約束將不符合約束的依存分析去掉,直到留下一棵合法的依存樹。

生成式依存分析方法、判別式依存分析方法和確定性依存分析方法是數據驅動的統計依存分析中具有代表性的三種方法。

生成性依存分析方法

生成式依存分析方法采用聯合概率模型生成一系列依存語法樹并賦予其概率分值,然后采用相關算法找到概率打分最高的分析結果作為最后輸出。

生成式依存分析模型使用起來比較方便,它的參數訓練時只在訓練集中尋找相關成分的計數,計算出先驗概率。但是,生成式方法采用聯合概率模型,再進行概率乘積分解時做了近似性假設和估計,而且,由于采用全局搜索,算法的復雜度較高,因此效率較低,但此類算法在準確率上有一定優勢。但是類似于CYK算法的推理方法使得此類模型不易處理非投射性問題。

判別式依存分析方法

判別式依存分析方法采用條件概率模型,避開了聯合概率模型所要求的獨立性假設(考慮判別模型CRF舍棄了生成模型HMM的獨立性假設),訓練過程即尋找使目標函數(訓練樣本生成概率)最大的參數θ(類似Logistic回歸和CRF)。

判別式方法不僅在推理時進行窮盡搜索,而且在訓練算法上也具有全局最優性,需要在訓練實例上重復句法分析過程來迭代參數,訓練過程也是推理過程,訓練和分析的時間復雜度一致。

確定性依存方法

確定性依存分析方法以特定的方向逐次取一個待分析的詞,為每次輸入的詞產生一個單一的分析結果,直至序列的最后一個詞。

這類算法在每一步的分析中都要根據當前分析狀態做出決策(如判斷其是否與前一個詞發生依存關系),因此,這種方法又稱決策式分析方法。

通過一個確定的分析動作序列來得到一個唯一的句法表達,即依存圖(有時可能會有回溯和修補),這是確定性句法分析方法的基本思想。

短語結構與依存結構之間的關系

短語結構樹可以被一一對應地轉換成依存關系樹,反之則不然。因為一棵依存關系樹可能會對應多棵短語結構樹。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內容