1. 程式人生 > >系統學習NLP(五)--句法分析

系統學習NLP(五)--句法分析

轉自:https://www.jianshu.com/p/fb408b6a0904  真佩服作者的毅力,把基礎概念都敲出來了。。。

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

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

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

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

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

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

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

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

語法形式化屬於句法理論研究的範疇,目前在自然語言處理中廣泛使用的是上下文無關文法(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) 。(下面的推導我沒仔細看,不是我轉本文的目的,本文只是想記住基本概念,再說,我想PCFG現在已經很少用了

首先我們定義內向變數α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)。

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

確定性依存方法

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

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

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

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

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