NLP | 天然語言處理 - 解析(Parsing, and Context-Free Grammars)

什麼是解析?

在天然語言的學習過程,我的必定都學過語法,好比句子可以用主語、謂語、賓語來表示。在天然語言的處理過程當中。有不少應用場景都需要考慮句子的語法,所以研究語法解析變得很重要。

語法解析有兩個基本的問題,其一是句子語法在計算機中的表達與存儲方法。以及語料數據集;其二是語法解析的算法。

對於第一個問題,咱們可以用樹狀結構圖來表示,例如如下圖所看到的。S表示句子;NP、VP、PP是名詞、動詞、介詞短語(短語級別);N、V、P各自是名詞、動詞、介詞。


實際存儲的時候上述的樹可以表示爲(S (NP (N Boeing)) (VP (V is) (VP (V located) (PP (P in) (NP (N Seattle))))))。互聯網上已經有成熟的、手工標註的語料數據集。好比 The Penn Treebank Project ( Penn Treebank II Constituent Tags)。

對於第二個問題,咱們需要有合適的算法來處理。這也是咱們本章將要討論的內容。

上下文無關語法(Context-Free Grammer)

爲了生成句子的語法樹,咱們可以定義例如如下的一套上下文無關語法。

1)N表示一組非葉子節點的標註。好比{S、NP、VP、N...}
2)Σ表示一組葉子結點的標註。好比{boeing、is...}
3)R表示一組規則,每條規則可以表示爲X->Y1Y2...Yn,X∈N。Yi∈(N∪Σ)
4)S表示語法樹開始的標註

舉例來講,語法的一個語法子集可以表示爲下圖所看到的。當給定一個句子時,咱們便可以依照從左到右的順序來解析語法。好比。句子the man sleeps就可以表示爲(S (NP (DT the) (NN man)) (VP sleeps))。



這種上下文無關的語法可以很是easy的推導出一個句子的語法結構,但是缺點是推導出的結構可能存在二義性。好比如下兩張圖中的語法樹都可以表示同一個句子。

常見的二義性問題有:1)單詞的不一樣詞性,如can通常表示「可以」這個情態動詞。有時表示罐子;2)介詞短語的做用範圍。如VP PP PP這種結構,第二個介詞短語可能形容VP,也可能形容第一個PP;3)連續的名字,如NN NN NN。html

  

機率分佈的上下文無關語法(Probabilistic Context-Free Grammar)

由於語法的解析存在二義性,咱們就需要找到一種方法從多種可能的語法樹種找出最可能的一棵樹。一種常見的方法既是PCFG (Probabilistic Context-Free Grammar)。例如如下圖所看到的。除了常規的語法規則之外,咱們還對每一條規則賦予了一個機率。

對於每一棵生成的語法樹,咱們將當中因此規則的機率的乘積做爲語法樹的出現機率。算法



綜上所述,當咱們或得多顆語法樹時,咱們可以分別計算每顆語法樹的機率p(t)。出現機率最大的那顆語法樹就是咱們但願獲得的結果,即arg max p(t)。

訓練算法

咱們已經定義了語法解析的算法,而這個算法依賴於CFG中對於N、Σ、R、S的定義以及PCFG中的p(x)。上文中咱們提到了Penn Treebank經過手工的方法已經提供了一個很大的語料數據集,咱們的任務就是從語料庫中訓練出PCFG所需要的參數。

1)統計出語料庫中所有的N與Σ;
2)利用語料庫中的所有規則做爲R;
3)針對每個規則A -> B。從語料庫中估算p(x) = p(A -> B) / p(A);

在CFG的定義的基礎上,咱們又一次定義一種叫Chomsky的語法格式。

這樣的格式要求每條規則僅僅能是X -> Y1 Y2或者X -> Y的格式。實際上Chomsky語法格式保證生產的語法樹老是二叉樹的格式,同一時候隨意一棵語法樹老是能夠轉化成Chomsky語法格式。學習


語法樹預測算法

若是咱們已經有一個PCFG的模型,包括N、Σ、R、S、p(x)等參數,並且語法樹總數Chomsky語法格式。當輸入一個句子x1, x2, ... , xn時。咱們要怎樣計算句子相應的語法樹呢?
第一種方法是暴力遍歷的方法。每個單詞x可能有m = len(N)種取值,句子長度是n,每種狀況至少存在n個規則,因此在時間複雜度O(m*n*n)的狀況下。咱們可以推斷出所有可能的語法樹並計算出最佳的那個。

另一種方法固然是動態規劃,咱們定義w[i, j, X]是第i個單詞至第j個單詞由標註X來表示的最大機率。直觀來說。好比xi, xi+1, ... , xj,當X=PP時。子樹多是多種解釋方式。如(P NP)或者(PP PP)。但是w[i, j, PP]表明的是繼續往上一層遞歸時,咱們僅僅選擇當前機率最大的組合方式。特殊狀況下。w[i, i, X] = p(X -> xi)。所以,動態規劃的方程可以表示爲w[i, j, X] = max (p(X -> Y Z) * w(i, s, Y) * w(s+1, j, Z))。關於動態規劃方法。 leetcode裏有很多案例可以說明。

語法解析依照上述的算法過程便完畢了。雖然說PCFG也有一些缺點,好比:1)缺少詞法信息。2)連續短語(如名詞、介詞)的處理等。但總體來說它給語法解析提供了一種頗有效的實現方法。


版權聲明:本文博主原創文章。博客,未經贊成不得轉載。.net

相關文章
相關標籤/搜索