句法分析是自然語言處理(NLP)中的關鍵技術之一,其基本任務是確定句子的句法結構或者句子中詞彙之間的依存關係。主要包括兩方面的內容:一是確定語言的語法體系,即對語言中合法句子的語法結構給予形式化的定義;另一方面是句法分析技術,即根據給定的語法體系,自動推導出句子的句法結構,分析句子所包含的句法單位和這些句法單位之間的關係。
句法分析被用在很多場景中,比如搜索引擎用戶日誌分析和關鍵詞識別,比如信息抽取、自動問答、機器翻譯等其他自然語言處理相關的任務。
語法體系
用可視化的工具 Stanford Parser 來看看句法分析的整個過程:
短語結構樹由終節點、非終結點以及短語標記三部分組成。句子分裂的語法規則爲若干終結點構成一個短語,作爲非終結點參與下一次規約,直至結束。如下圖:
句法分析技術
依存句法分析
依存句法
依存句法(Dependency Parsing, DP)通過分析語言單位內成分之間的依存關係揭示其句法結構。
直觀來講,依存句法的目的在於分析識別句子中的“主謂賓”、“定狀補”這些語法成分,並分析各成分之間的關係。
依存句法的結構沒有非終結點,詞與詞之間直接發生依存關係,構成一個依存對,其中一個是核心詞,也叫支配詞,另一個叫修飾詞,也叫從屬詞。
依存關係用一個有向弧表示,叫做依存弧。依存弧的方向爲由從屬詞指向支配詞,當然反過來也是可以的,按個人習慣統一表示即可。
依存關係
依存句法通過分析語言單位內成分之前的依存關係解釋其句法結構,主張句子中核心動詞是支配其他成分的中心成分。而它本身卻不受其他任何成分的支配,所有受支配成分都以某種關係從屬於支配者。
在20世紀70年代,Robinson 提出依存句法中關於依存關係的四條公理,在處理中文信息的研究中,中國學者提出了依存關係的第五條公理,分別如下:
- 一個句子中只有一個成分是獨立的;
- 句子的其他成分都從屬於某一成分;
- 任何一個成分都不能依存於兩個或兩個以上的成分;
- 如果成分 A 直接從屬成分 B,而成分 C 在句子中位於 A 和 B 之間,那麼,成分 C 或者從屬於 A,或者從屬於 B,或者從屬於 A 和 B 之間的某一成分;
- 中心成分左右兩邊的其他成分相互不發生關係。
句子成分之間相互支配與被支配、依存與被依存的現象,普遍存在於漢語的詞彙(合成語)、短語、單句、段落、篇章等能夠獨立運用和表達的語言之中,這一特點體現了依存關係的普遍性。依存句法分析可以反映出句子各成分之間的語義修飾關係,它可以獲得長距離的搭配信息,並與句子成分的物理位置無關。
依存句法分析標註關係(共14種)及含義如下表所示:
語義依存分析
語義依存分析(Semantic Dependency Parsing, SDP),分析句子各個語言單位之間的語義關聯,並將語義關聯以依存結構呈現。使用語義依存刻畫句子語義,好處在於不需要去抽象詞彙本身,而是通過詞彙所承受的語義框架來描述該詞彙,而論元的數目相對詞彙來說數量總是少了很多。
語義依存分析目標是跨越句子表層句法結構的束縛,直接獲取深層的語義信息。例如以下三個句子,用不同的表達方式表達了同一個語義信息,即張三實施了一個吃的動作,吃的動作是對蘋果實施的。
語義依存分析不受句法結構的影響,將具有直接語義關聯的語言單元直接連接依存弧並標記上相應的語義關係。這也是語義依存分析與依存句法分析的重要區別。
語義依存關係分爲三類,分別是主要語義角色,每一種語義角色對應存在一個嵌套關係和反關係;事件關係,描述兩個事件間的關係;語義依附標記,標記說話者語氣等依附性信息。
Pyhanlp 實戰依存句法
通過 Pyhanlp 庫實現依存句法的實戰練習。選用 Dependency Viewer 工具進行可視化展示。可視化時, txt 文檔需要採用 UTF-8 編碼。
首先,引入包,然後可直接進行分析:
from pyhanlp import *
sentence = "徐先生還具體幫助他確定了把畫雄鷹、松鼠和麻雀作爲主攻目標。"
print(HanLP.parseDependency(sentence))
得到的結果:
然後,將結果保存在 txt 文件中:
f = open("D://result.txt",'a+')
print((HanLP.parseDependency(sentence )),file = f)
最後,通過 Dependency Viewer 工具進行可視化,如果出現亂碼,記得把 txt 文檔保存爲 UTF-8 式即可,得到的可視化結果如下圖所示: