1. 程式人生 > >NLP學習記錄——句法分析

NLP學習記錄——句法分析

句法分析

一般而言,句法分析分為兩個主要的方向:
一是句法結構分析,或稱成分句法分析、短語句法分析,亦即context-free grammers(CFGs),將語句視為巢狀的短語組合:
Basic unit: words
the, cat, cuddly, by, door
det, N, Adj, P, N
Words combine into phrases
the cuddly cat, by the door
NP -> Det Adj N,PP -> P NP
Phrases can combine into bigger phrases
the cuddly cat by the door
NP -> NP PP
使用語法樹表示更為方便:
這裡寫圖片描述


一是依存分析,研究單詞之間的依賴關係:
這裡寫圖片描述
同樣,依存關係也適於用樹來表達:
這裡寫圖片描述
首先來看看CFGs。

CFGs

CFGs的定義包括四個集合:
N:有限的非終端語法標識的集合,亦即語法樹上非葉子結點的集合。
S:起始標識
E:有限的終端標識集合,也是語句中所有單詞的集合,位於句法樹的葉子結點。但是要注意,句法樹的葉子節點允許為空。
R:構建句法樹的有限個規則的集合,表述了句法樹的構建過程。
即G=(N,E,S,R)
例:
這裡寫圖片描述
基於以上集合可構建句法樹:
這裡寫圖片描述
但是,構建過程也可能會有歧義:
這裡寫圖片描述
left-most derivation是句法樹構建過程中的一串序列,例:
s1=S
s2=NP VP.(基於規則s->NP VP)
s3=DT NN VP(nP->DT NN)
s4=the NN VP(DT->the)
s5=the man VP(NN->man)
s6=the man Vi(VP->Vi)
s7=the man sleeps(vi->sleeps)
上述s1,s2…s7即為以下句法樹的left-most derivation:
這裡寫圖片描述


(left-most )derivation實際上是CFGs包含的某一種特定句法樹的構造過程,某CFGs有多少種可能的句法樹,就有多少種derivation。

PCFGs

Probabilistic Context-Free Grammars ,深度學習爆發前效能最優秀的CFGs分析方法。
設語句s的某個CFGs為G,定義T為G中包含的所有可能的句法樹(也可以說是left-most derivations)的集合,T中某一種deviration定義為t,且定義yield(t)=s。
若|T|>1,則語句s是有歧義的,若|T|>0,則語句s是合乎語法的。
RCFGs的核心思路是求T上的概率分佈,即求p(t),其中:
這裡寫圖片描述


所以,我們的語句分析器就有了一個合理的輸出:
這裡寫圖片描述
定義q(a->b)為R中規則a->b在對非終端a作延伸時的條件概率,即:
這裡寫圖片描述
當然,q(a->b)>0。
若T中某個t包含n條規則,則有:
這裡寫圖片描述
這樣,上例對應的PCFGs為(q暫時是假設的):
這裡寫圖片描述
可以看到,從相同的語法標識出發的規則的概率和為1,每次選擇規則時遵從一定的概率分佈。
那麼如何求得q呢?
假設我們的訓練集包含句法樹t1,t2…tm,其實也是m個devitations,m個規則串,定義訓練集的RCFGs:
N為t1,t2…tm中出現過的所有非終端語法標識。
E為t1,t2…tm中所有的單詞,即m個yield(t)語句中的單詞的集合。
S為起始標識S。
R為t1,t2…tm中所有的規則a->b的集合。
依然利用頻率估計:
這裡寫圖片描述
count(a->b)為規則a->b出現的次數,count(a)為a出現的次數。
最後使用CKY演算法做以下決策:
這裡寫圖片描述
CKY演算法是一種動態規劃演算法,設語句為s=x1,x2…xn,定義T(i,j,X)為基於詞序列xi…xj的所有句法樹,X∈N是樹的根結點。定義:
這裡寫圖片描述
且當T(i,j,X)為空時π(i, j, X) =0。
顯然,
這裡寫圖片描述
即為所求。
接下來利用遞迴思想求解。
起始狀態:
這裡寫圖片描述
找到一個不為0的π後開始遞迴拓展:
這裡寫圖片描述
直到i=1,j=n。
以下為演算法全貌:
這裡寫圖片描述
目前這個PCFGs有兩個主要的問題。
一是詞法資訊不敏感,單詞的選取僅僅依賴最底層的句法標識,而不是跟整個句法樹相關,這顯然是不合理的。例如,統計顯示,單詞into直連PPs句法標識時繼續向上連線VP的概率是連線NP概率的九倍,但是此模型並沒有這種跨層的概率資訊。
一是缺乏對結構偏好的敏感度。例如,對於”president of a company in Africa”,句法標識為PP的短語”in Africa”更傾向於修飾離他最近的NP”a company”,而不是遠一些的”president”,這種結構偏好未在模型中體現。
針對第一個問題,提出了lexicalized PCFGs ,將非終端句法標識換成帶單詞的句法標識,即:
這裡寫圖片描述
當然,句法標識上的單詞並不是隨便選擇的,而是要選擇規則的中心詞,例如,”the lawyer”中的中心詞顯然是”lawyer”,在上例中,所有的中心詞的句法標識都加上了橫槓。
選擇中心詞的規則有很多,下面是一個從NP出發的中心詞選擇規則例子:
這裡寫圖片描述
那麼,現在可以給出lexicalized PCFGs的完整定義:
G=(N,E,R,S,q,y)
N:有限的非終端句法標識集合
E:有限的終端單詞集合
S:起始標識
R:規則集合,此時規則有三種情況(X,Y1,Y2∈ N,h,m∈ E,h為中心詞):
1.X(h)->Y1(h)Y2(m)
2.X(h)->Y1(m)Y2(h)
3.X(h)->h
q(r)為規則r在確定的規則起點的條件下的概率。
y為X∈ N和h∈ E的聯合概率分佈,y(X,h)>0且
這裡寫圖片描述
這裡要考慮到,一但起始標識S處的單詞確定了,整棵句法樹上的單詞也就確定了,所以,對於deviration為r1,r2…rN的句法樹,其概率為:
這裡寫圖片描述
其中LHS(r1)指r1的起點。
句法樹的起點單詞可看作為整個語句的中心詞,代表著語句的某種語義或者特徵,這也是句法分析的一個作用,即提取語句的資訊。
接下來以規則S(examined) →NP(lawyer) VP(examined))為例說明q的計算。
q(S(examined)→NP(lawyer) VP(examined))
=p(r=s->NP VP,m=lawyer|X=S,h=examined)
=p(r=s->NP VP|X=S,h=examined)*p(m=lawyer|r=s->NP VP,X=S,h=examined)
對於前一項概率,有:
這裡寫圖片描述
與語言模型中的平滑方法類似,所求概率利用
這裡寫圖片描述
進行估計。
對於後一項概率,有:
這裡寫圖片描述
同樣。利用
這裡寫圖片描述
進行估計。
同樣使用CKY演算法,定義π(i,j,h,X)為基於詞序列xi…xj的,以X為根節點且xh為根節點的單詞的條件下,概率最大的句法樹。
那麼,所求為:
這裡寫圖片描述
以下為lexicalized PCFGs的演算法全貌:
這裡寫圖片描述
其中figure 8指:
這裡寫圖片描述
目前出現了很多基於句法樹構建神經網路的方法,可以有效利用句法生成單詞之上的更高層次的語義向量,例如短語向量和語句向量。

transition-based dependency parser

接下來介紹一種目前最高效的依存分析方法——基於轉移的依存分析。
首先定義一個棧σ和一個佇列β,棧σ初始化後僅含[ROOT]標記,即依存關係樹的根結點標記,佇列β初始化為輸入詞序列。
然後定義一個集合A:表現依存關係的箭頭,即依存弧的集合,初始為空。
以wi表示棧或佇列中的某個單詞,最後定義三種操作:
這裡寫圖片描述
例:
這裡寫圖片描述
這裡寫圖片描述
這樣就成功建立了依存關係樹,那麼核心問題就來到如何預測三種操作。
14年提出了一個非常簡單高效的神經網路預測方法,模型如下:
這裡寫圖片描述
原方法中,輸入是棧頂的兩個單詞和他們的四個子結點單詞,加上佇列頭部的一個單詞,以此貪心地預測下一個操作。
不過,輸入中每個單詞的並不是單純以詞向量表示,還包括句法標記和已有的依存弧資訊,均已向量化:
這裡寫圖片描述