自然語言處理NLP(7)——句法分析a:Chomsky(喬姆斯基)形式文法
在上一部分中,我們介紹了NLP領域最基本的問題:詞法分析,現階段解決該問題最常用的方法就是將其轉化為序列標註問題,根據解決序列標註問題的方法對其進行解決。
詞的問題解決了,那麼下一步,就是句法分析。
在這一部分中,我們介紹完全句法分析的基礎——Chomsky形式文法。
句法分析的任務是確定句子的句法結構或句子中詞彙之間的依存關係,主要包括三種:完全句法分析、區域性句法分析、依存關係分析。
其中,前兩種句法分析是對句子的句法結構進行分析(也稱為短語結構分析),而後一種是對句子中詞彙間的依存關係進行分析,我們在後文中將有所介紹。
【一】完全句法分析
在完全句法分析任務中,我們手中已經得到了曾進行過詞法分析的句子,目的是得到句子的句法結構,通常用短語結構樹來表示。
(對詞法分析不熟悉的朋友們可以參看部落格:自然語言處理NLP(6)——詞法分析)
也就是說,完全句法分析的任務可以描述如下:
解決該任務的方法依然是我們曾經提到過的三種方法:規則法、概率統計法、深度學習法(多數NLP問題的解決方法都是這三種)。
那麼,在上圖中,我們通過一個叫做“層次分析法”的方法將已經進行過詞法分析的句子處理為一棵短語結構樹。
【二】層次分析法
那麼,什麼是層次分析法呢?
層次分析法就是利用語言學,從句子結構層面對句子進行分析:
1.將句子分為主語、謂語、賓語、定語、狀語、補語六個成分;
2.以詞或片語作為劃分成分的基本單位;
3.根據六個成分的搭配排列按層次順序確定句子的格局。
一般來說,以樹結構表示結果,我們將其稱為句法分析樹(也就是上文提到的短語結構樹)。
分析的時候,往往找出主語和謂語作為句子的主幹,以其他成分作為枝葉,描述整個句子的結構。
舉個例子:“我弟弟已經準備好了一切用品。”
由此我們可以得到一棵句法分析樹:
由此可見,層次分析法枝幹分明,便於歸納句型。然而,這種方法會遇到大量的歧義,比如對於“新桌子和椅子”,它會產生如下歧義:
此外,層次分析法還面臨著很多困難:
1.在漢語中,詞類跟句法成分之間的關係比較複雜,除了副詞只能作狀語(一對一)之外,其餘的都是一對多,即一種詞類可以作多種句法成分:
圖中黑線表示詞類的主要功能,藍線表示次要功能,紅線表示區域性功能。
2.詞存在兼類
例如:“每次他都會在會上製造新聞。”
其中第一個“會”是名詞,表示會議;而第二個“會”是動詞,表示能夠。
3.短語存在多義
例如:
【三】Chomsky形式文法
在完全句法分析中,Chomsky形式文法是極為重要的理論。
Chomsky形式語言自誕生之日起至今,歷經古典理論、標準理論、擴充式標準理論、管轄約束理論和最簡理論五個階段的發展變化。它在語言學界產生了重大影響,被譽為一場Chomsky式的革命。其影響力波及到語言學之外的心理學、哲學、教育學、邏輯學、翻譯理論、通訊技術、電腦科學等領域。
Chomsky文法
Chomsky文法用 表示形式語法,將其表示為四元組:
其中各變數定義如下:
:非終結符的有限集合,不能處於生成過程的終點,即
在實際句子中不出現。在推導中起變數作用,相當於語言中的語法範疇;
:終結符的有限集合,只處於生成過程的終點,是句子中實
際出現的符號,相當於單詞表。
:中的初始符號,相當於語法範疇中的句子。
:重寫規則,也成為生成規則,一般形式為,其中都是符號串, 至少含有一個中的符號。
語法 的不含非終結符的句子形式稱為 生成的句子;
由語法 生成的語言,記做 ,指 生成的所有句子的集合。
舉個例子:
假設有一種語言 ,如何用Chomsky形式文法表示?
從語言句子集合中我們可以看出,只有兩種字元出現在句子集中,所以,終結符集合
我們有非終結初始符 ,假設非終結符集合(中的元素個數、表示方法可以自己定義),我們可以將上述句子描述為:
也就是重寫規則 。
於是我們有語法:
其中,
(| 表示或)
於是,我們可以用有限的規則生成無限的語句。
值得注意的是, 的表示方法可能不唯一,以上例為例,將重寫規則 改為:
這種語法也可以對該語言進行表示,大家可以自己推推看。
Chomsky根據重寫規則的形式,將形式文法分為4級:
在這裡,先加深一下集合的閉包這個概念:
表示符號串集合的閉包,定義為:
舉個例子:假設,那麼
瞭解了這個概念之後,我們來介紹各級文法。
0型文法(無約束文法):重寫規則為 ,其中,。該文法對規則形式沒有任何限制,因此也稱為無約束文法或無限制重寫文法。
1型文法(上下文相關文法):重寫規則為 ,其中,,且 非空。在上下文中,單個非終結符被重寫為符號串 ,因此是上下文相關的。
舉個例子:
容易判斷,該文法屬於1型文法,且
2型文法(上下文無關文法CFG):重寫規則為 ,其中,, 重寫為 時沒有上下文限制。
舉個例子:
容易判斷,該文法屬於2型文法,且 ,若,則;若,則
3型文法(正則文法RG):重寫規則為 或 ,其中,; 是將 中的 看作空符號的一種特殊情況。如果把 看作不同的狀態,那麼由重寫規則可知,由狀態 轉入狀態 時,可生成一個終結符 ,因此正則文法也稱作有限狀態文法。
上述定義的是左線性正則文法,如果,則是右線性正則文法。
舉個例子:
容易判斷,該文法屬於3型文法,且
對上述4級文法有疑問的朋友可以私信給我,一同進行交流討論~
此外,4級文法之間還有如圖所示的關係:
即,每一個正則文法都是上下文無關文法,每一個上下文無關文法都是上下文有關文法,每一個上下文有關文法都是0型文法。
Chomsky把0型文法生成的語言叫0型語言,把由上下文有關文法、上下文無關文法、正則文法生成的語言分別叫作上下文有關語言、上下文無關語言、正則語言(或有限狀態語言)。
一般來說,如果一種語言能由幾種文法所產生,則把這種語言稱為在這幾種文法中受限制最多的那種文法所產生的語言。
【四】自然語言形式文法
在NLP領域中,採用Chomsky形式文法作為刻畫語言規律、表示語言的形式文法。
那麼問題來了:用幾型文法對自然語言進行刻畫比較合適呢?
從描述能力上來說,正則文法描述能力太弱,上下文無關文法也不足以表述自然語言,因為自然語言中上下文相關情況非常常見。
然而,上下文有關文法的計算複雜度為NP完全,而上下文無關文法的複雜度為多項式複雜度,可以接受。
因此,用上下文無關文法來描述自然語言最為普遍,此外需要用一些其它手段來增強其描述能力。
上下文無關文法會產生二義性問題。
我們一定還記得這樣一張歧義圖:
對一個文法 ,如果存在某個句子有不只一棵分析樹與其對應,那麼稱這個文法是二義的。
很明顯,上下文無關文法處理語言會產生二義性。
Chomsky證明,任何由上下文無關文法生成的語言,均可由重寫規則為 或者 的文法生成,其中。
具有這樣重寫規則的上下文無關文法,它的推導樹均可簡化為二元形式,這樣就可以用二分法來分析自然語言,採用二叉樹來表示自然語言的句子結構。
上述重寫規則就稱為 Chomsky正規化 。
之前我們提到過,Chomsky形式語言可以形式化表示為四元組:
那麼,用它來表示自然語言,各部分究竟對應著什麼呢?
:非終結符的有限集合,對應語言語法單位(一般為“詞” 戒“片語”的詞性)。
:終結符的有限集合,對應語言基本組成單位 (一般為“詞” )
: 中的初始符號,相當於語法範疇中的句子。
:生成規則,對應語法結構規則(不同的語言有不同的規則),一般情況下由人工編寫。
舉個例子:
假設有如下語句:
{我吃飯,我洗衣,我喝水,我看書,
你吃飯,你洗衣,你喝水,你看書,
他吃飯,他洗衣,他喝水,他看書}
如何用形式文法表示?
={我,你,他,吃,洗,喝,看,飯,衣,書,水}
很明顯,這是一個2型文法。
由此文法生成句子的過程圖如下:
句子分析過程是生成過程的逆過程,由於形式文法中的生成規則是根據語法規則制定,所以在分析句子是否由某文法產生的同時就等同於對句子進行語法結構分析。
但是很明顯的是,該種方法有很大的侷限性:它侷限於規則。
有很多句子無法由規則集生成(例如,我看你喝水),也有很多不合邏輯的句子可以由規則集生成(例如,我吃衣)。
在這一部分中,我們主要介紹了Chomsky形式文法,瞭解瞭如何利用它對自然語言進行表示;此外,我們還簡單介紹了完全句法分析的概念。
在下一部分的內容中,我們將會對完全句法分析進行詳細介紹,包括其所面臨的問題和解決方法。
如果本文中某些表述或理解有誤,歡迎各位大神批評指正。
謝謝!
相關文章
- 自然語言處理NLP(8)——句法分析b:完全句法分析自然語言處理
- 自然語言處理NLP(四)自然語言處理
- 自然語言處理(NLP)概述自然語言處理
- 自然語言處理(NLP)系列(一)——自然語言理解(NLU)自然語言處理
- 自然語言處理(NLP)簡介 | NLP課程自然語言處理
- Pytorch系列:(六)自然語言處理NLPPyTorch自然語言處理
- 自然語言處理NLP快速入門自然語言處理
- 2023nlp影片教程大全 NLP自然語言處理教程 自然語言處理NLP從入門到專案實戰自然語言處理
- 自然語言處理(NLP)路線圖 - kdnuggets自然語言處理
- 自然語言處理NLP(6)——詞法分析自然語言處理詞法分析
- python自然語言處理學習筆記(八)—— 句法分析Python自然語言處理筆記
- Python自然語言處理實戰(1):NLP基礎Python自然語言處理
- 中文和英文NLP自然語言處理異同點分析自然語言處理
- NLP自然語言處理中的hanlp分詞例項自然語言處理HanLP分詞
- NLP神經語言學的12條假設(不是自然語言處理哪個NLP哈)自然語言處理
- 《NLP漢語自然語言處理原理與實踐》學習四自然語言處理
- 「NLP」一文彙總自然語言處理主要研究方向自然語言處理
- 自然語言處理(NLP)- 一個英文拼寫糾錯系統自然語言處理
- 史丹佛NLP團隊釋出最新自然語言處理Python庫自然語言處理Python
- Pytext 簡介——Facebook 基於 PyTorch 的自然語言處理 (NLP) 框架PyTorch自然語言處理框架
- HanLP 自然語言處理 for nodejsHanLP自然語言處理NodeJS
- 自然語言處理 NLP 基本概念大全,讓非技術也能看懂 NLP自然語言處理
- NLP漢語自然語言處理入門基礎知識自然語言處理
- [譯] 自然語言處理真是有趣!自然語言處理
- 自然語言處理:分詞方法自然語言處理分詞
- NLP 與 NLU:從語言理解到語言處理
- NLP入門之語言模型以及n元文法模型
- 如何將Python自然語言處理速度提升100倍:用spaCy/Cython加速NLPPython自然語言處理
- 什麼是NLP,NLP主要有什麼用,為什麼要學自然語言處理?自然語言處理
- 自然語言處理與情緒智慧自然語言處理
- 自然語言處理的最佳實踐自然語言處理
- 自然語言處理之jieba分詞自然語言處理Jieba分詞
- 人工智慧 (06) 自然語言處理人工智慧自然語言處理
- 配置Hanlp自然語言處理進階HanLP自然語言處理
- 精通Python自然語言處理 2 :統計語言建模Python自然語言處理
- 掌握BERT:從初學者到高階的自然語言處理(NLP)全面指南自然語言處理
- 中國語文(自然語言處理)作業自然語言處理
- NLP漢語自然語言處理入門基礎知識介紹自然語言處理