資源鏈接:https://www.bilibili.com/video/BV1r4411,部分內容參考來自於碼農場 » CS224n筆記6 句法分析和https://zhuanlan.zhihu.com/p/110532288
補充內容
說實話,之前接觸過一點nlp,在第五課直接膝蓋都跪了,感覺這一章聽天書一樣,然後發現這一部分知識是我沒了解過的,所以看了各種博客和其他視頻先去了解了一下~(以下內容算是瞭解內容的一些搬運和整理吧,資源鏈接如下:https://zhuanlan.zhihu.com/p/51186364、https://blog.csdn.net/wwx123521/article/details/89636003)
句法分析/syntactic parsing
首先了解一下什麼是句法分析,也是我們經常容易忽略的一部分內容,句法分析是自然語言處理中的關鍵技術之一,它是對輸入的文本句子進行分析以得到句子的句法結構的處理過程。對句法結構進行分析,一方面是語言理解的自身需求,句法分析是語言理解的重要一環,另一方面也爲其它自然語言處理任務提供支持。例如句法驅動的統計機器翻譯需要對源語言或目標語言(或者同時兩種語言)進行句法分析;語義分析通常以句法分析的輸出結果作爲輸入以便獲得更多的指示信息。
根據句法結構的表示形式不同,最常見的句法分析任務可以分爲以下三種:句法結構分析/syntactic structure parsing(又稱短語結構分析/phrase structure parsing,也叫成分句法分析/constituent syntactic parsing。作用是識別出句子中的短語結構以及短語之間的層次句法關係)、依存關係分析(又稱依存句法分析/dependency syntactic parsing,簡稱依存分析,作用是識別句子中詞彙與詞彙之間的相互依存關係)和深層文法句法分析(即利用深層文法,例如詞彙化樹鄰接文法/Lexicalized Tree Adjoining Grammar, LTAG、詞彙功能文法/Lexical Functional Grammar, LFG、組合範疇文法/Combinatory Categorial Grammar, CCG等,對句子進行深層的句法以及語義分析)。
百度百科定義:依存句法是由法國語言學家L.Tesniere最先提出。它將句子分析成一顆依存句法樹,描述出各個詞語之間的依存關係。也即指出了詞語之間在句法上的搭配關係,這種搭配關係是和語義相關聯的。
語法分析的主要方法:
句法結構分析方法可以分爲基於規則的分析方法和基於統計的分析方法兩大類。(還有深度學習方法~)
基於規則的句法結構分析方法的基本思路是,由人工組織語法規則,建立語法知識庫,通過條件約束和檢查來實現句法結構歧義的消除。基於規則的語法結構分析可以利用手工編寫的規則分析出輸入句子所有可能的句法結構。
根據句法分析樹形成方向的區別,人們通常將這些方法劃分爲三種類型:自頂向下的分析方法,自底向上的分析方法和兩者相結合的分析方法。自頂向下分析算法實現的是規則推導的過程,分析樹從根結點開始不斷生長,最後形成分析句子的葉結點。而自底向上分析算法的實現過程恰好相反,它是從句子符號串開始,執行不斷規約的過程,最後形成根節點。
基於概率上下文無關文法的短語結構分析方法,可以說是目前最成功的語法驅動的統計句法分析方法,可以認爲是規則方法與統計方法的結合。
依存分析的一些重要概念
- 依存句法認爲“謂語”中的動詞是一個句子的中心,其他成分與動詞直接或間接地產生聯繫。
- 依存句法理論中,“依存”指詞與詞之間支配與被支配的關係,這種關係不是對等的,這種關係具有方向。確切的說,處於支配地位的成分稱之爲支配者(governor,regent,head),而處於被支配地位的成分稱之爲從屬者(modifier,subordinate,dependency)。
- 依存語法本身沒有規定要對依存關係進行分類,但爲了豐富依存結構傳達的句法信息,在實際應用中,一般會給依存樹的邊加上不同的標記。
- 依存語法存在一個共同的基本假設:句法結構本質上包含詞和詞之間的依存(修飾)關係。一個依存關係連接兩個詞,分別是核心詞(head)和依存詞(dependent)。依存關係可以細分爲不同的類型,表示兩個詞之間的具體句法關係。
依存分析方法的簡介
- 基於規則的方法: 早期的基於依存語法的句法分析方法主要包括類似CYK的動態規劃算法、基於約束滿足的方法和確定性分析策略等。
- 基於統計的方法:統計自然語言處理領域也湧現出了一大批優秀的研究工作,包括生成式依存分析方法、判別式依存分析方法和確定性依存分析方法,這幾類方法是數據驅動的統計依存分析中最爲代表性的方法。
- 基於深度學習的方法:近年來,深度學習在句法分析課題上逐漸成爲研究熱點,主要研究工作集中在特徵表示方面。傳統方法的特徵表示主要採用人工定義原子特徵和特徵組合,而深度學習則把原子特徵(詞、詞性、類別標籤)進行向量化,在利用多層神經元網絡提取特徵。
依存分析器的性能評價
通常使用的指標包括無標記依存正確率(unlabeled attachment score,UAS)、帶標記依存正確率(labeled attachment score, LAS)、依存正確率(dependency accuracy,DA)、根正確率(root accuracy,RA)、完全匹配率(complete match,CM)等。這些指標的具體意思如下:
- 無標記依存正確率(UAS):測試集中找到其正確支配詞的詞(包括沒有標註支配詞的根結點)所佔總詞數的百分比。
- 帶標記依存正確率(LAS):測試集中找到其正確支配詞的詞,並且依存關係類型也標註正確的詞(包括沒有標註支配詞的根結點)佔總詞數的百分比。
- 依存正確率(DA):測試集中找到正確支配詞非根結點詞佔所有非根結點詞總數的百分比。
- 根正確率(RA):有二種定義,一種是測試集中正確根結點的個數與句子個數的百分比。另一種是指測試集中找到正確根結點的句子數所佔句子總數的百分比。
- 完全匹配率(CM):測試集中無標記依存結構完全正確的句子佔句子總數的百分比。
(瞭解這部分內容後聽課就舒服多了...)
正課內容
語言學的兩種觀點
如何描述語法,有兩種主流觀點,其中一種是短語結構文法,英文術語是:Constituency = phrase structure grammar = context-free grammars (CFGs).
句子是使用逐步嵌套的單元構建的
- 短語結構將單詞組織成嵌套的成分
- 起步單元:單詞被賦予一個類別 (part of speech=pos 詞性)
- 單詞組合成不同類別的短語
- 短語可以遞歸地組合成更大的短語
其實就是這種短語語法用固定數量的rule分解句子爲短語和單詞、分解短語爲更短的短語或單詞
例如:(其實感覺和編譯原理中的語法樹很像)
另一種類似於下圖所示:(用單詞之間的依存關係來表達語法。如果一個單詞修飾另一個單詞,則稱該單詞依賴於另一個單詞)
視頻中的樣例:
- look是整個句子的根源,look依賴於crate
- in,the,large都是是crate的依賴
- in the kitchen是crate的修飾
- in,the都是kitchen的依賴
- by the door是crate的依賴
爲什麼我們需語法結構?
爲了能夠正確地解釋語言,我們需要理解句子結構
人類通過將單詞組合成更大的單元來傳達複雜的意思,從而交流複雜的思想
我們需要知道什麼與什麼相關聯
除非我們知道哪些詞是其他詞的參數或修飾詞,否則我們無法弄清楚句子是什麼意思
語法是有歧義的
下面將介紹各種歧義現象
介詞短語依附歧義
例如:
兩種解釋:
警察用刀殺了那個男子
- cops是kill的主語/subject
- man是kill的賓語/object
- knife是kill的修飾詞/modifier
警察殺了那個有刀的男子
- knife是man的修飾詞/modifier
再看一個例子:
from space到底修飾的是count還是whales?
這就是人類語言和編程語言中不同的地方,關鍵的解析決策是我們如何 “依存” 各種成分,介詞短語、狀語或分詞短語、不定式、協調等。
依附歧義
很難確定如何把一個短語(介詞短語、狀語短語、分詞短語、不定式)依附到其他成分上去,如下樣例:
每個括號中都是一個短語,它們依附的對象各不相同。對於n個短語來講,組成的樹形結構有Cn=(2n)!/[(n+1)!n!]。這是Catalan數,指數級增長。
具體解釋樣例:共有四個短語
- board 是 approved 的 主語,acquisition 是 approved 的謂語
- by Royal Trustco Ltd. 是修飾 acquisition 的,即董事會批准了這家公司的收購
- of Toronto 可以修飾 approved, acquisition, Royal Trustco Ltd. 之一,經過分析可以得知是修飾 Royal Trustco Ltd. 即表示這家公司的位置
- for $27 a share 修飾 acquisition
- at its monthly meeting 修飾 approved ,即表示批准的時間地點
協調範圍模糊
樣例:
- 一個人:[[Shuttle veteran and longtime NASA executive] Fred Gregory] appointed to board(長期擔任美國宇航局局長的航天飛機老兵弗雷德·格雷戈裏被任命爲航天飛機的成員)
- 兩個人:[Shuttle veteran] and [longtime NASA executive Fred Gregory] appointed to board(航天飛機老兵和長期擔任美國宇航局局長的弗雷德·格雷戈裏被任命爲航天飛機的成員)
再例如:
形容詞修飾語歧義
樣例:
Students get first hand job experience
兩種情況:
- first hand 表示 第一手的,直接的,即學生獲得了直接的工作經驗,first 是 hand 的形容詞修飾語(amod)
- first 修飾 experience, hand 修飾 job
動詞短語(VP)依存歧義
樣例:
Mutilated body washes up on Rio beach to be used for Olympic beach volleyball.
to be used for Olympic beach volleyball 是 動詞短語 (VP),修飾的是 body 還是 beach?
依賴路徑識別語義關係
依存語法與依存結構
關聯語法假設句法結構包括詞彙項之間的關係,通常是二元不對稱關係(“箭頭”),稱爲依賴關係
依存結構有兩種表現形式,如下圖所示:
(一種就是直接在句子上標出依存關係箭頭及語法關係,第二種則是做成樹/Dependency Tree Graph)
這節課以及練習用的都是依存句法樹,而不是短語結構樹。這並不是隨機選擇,而是由於前者的優勢。90年代的句法分析論文99%都是短語結構樹,但後來人們發現依存句法樹標註簡單,parser準確率高,所以後來(特別是最近十年)基本上就是依存句法樹的天下了(至少80%)。
不標註依存弧label的依存句法樹就是短語結構樹的一種:(關係(“箭頭”)稱爲依賴關係)
(感覺上述例子不是很明白)
下面來個例子(源自:https://www.jianshu.com/p/ea8a2ae1cc25,作者:柴柴總,大家也可以自己看看學習)
短語結構樹(constituent tree)與依存樹(dependency tree)是NLP中的兩種典型的樹結構
-
短語結構樹用來表達句子的句法結構,其只有葉子結點與輸入句子中的詞語相關聯,其他中間結點都是標記短語成分。
-
依存樹用來表達句子中詞與詞的依存關係,具體地,分析識別句子中的“主謂賓”、“定狀補”等語法成分。其每個結點都是一個詞語。
名詞解釋
- ROOT:要處理文本的語句
- IP:簡單從句
- NP:名詞短語
- VP:動詞短語
- PU:斷句符,通常是句號、問號、感嘆號等標點符號
- LCP:方位詞短語
- PP:介詞短語
- CP:由‘的’構成的表示修飾性關係的短語
- DNP:由‘的’構成的表示所屬關係的短語
- ADVP:副詞短語
- ADJP:形容詞短語
- DP:限定詞短語
- QP:量詞短語
- NN:常用名詞
- NR:固有名詞
- NT:時間名詞
- PN:代詞
- VV:動詞
- VC:是
- CC:表示連詞
- VE:有
- VA:表語形容詞
- AS:內容標記(如:了)
- VRD:動補複合詞
- CD: 表示基數詞
- DT: determiner 表示限定詞
- EX: existential there 存在句
- FW: foreign word 外來詞
- IN: preposition or conjunction, subordinating 介詞或從屬連詞
- JJ: adjective or numeral, ordinal 形容詞或序數詞
- JJR: adjective, comparative 形容詞比較級
- JJS: adjective, superlative 形容詞最高級
- LS: list item marker 列表標識
- MD: modal auxiliary 情態助動詞
- PDT: pre-determiner 前位限定詞
- POS: genitive marker 所有格標記
- PRP: pronoun, personal 人稱代詞
- RB: adverb 副詞
- RBR: adverb, comparative 副詞比較級
- RBS: adverb, superlative 副詞最高級
- RP: particle 小品詞
- SYM: symbol 符號
- TO:”to” as preposition or infinitive marker 作爲介詞或不定式標記
- WDT: WH-determiner WH限定詞
- WP: WH-pronoun WH代詞
- WP$: WH-pronoun, possessive WH所有格代詞
- WRB:Wh-adverb WH副詞
依賴語法/分析的歷史
依賴結構的概念可以追溯到很久以前
- Pāṇini的語法(公元前5世紀)
- 一千年 阿拉伯語的語法的基本方法
選區/上下文無關文法是一個新奇的發明
- 20世紀發明(R.S.Wells,1947; then Chomsky)
現代依賴工作經常源於 L. Tesnière(1959)
- 是20世紀“東方”的主導方法(俄羅斯,中國,…)
- 有利於更自由的語序語言
NLP中最早類型的解析器在美國
- David Hays 是美國計算語言學的創始人之一,他很早就(第一個嗎?)構建了依賴解析器(Hays 1962)。
(翻譯課件的內容,想詳細瞭解的可以自己瞭解瞭解)
依賴語法和依賴結構
人們對箭頭指向的方式不一致:有些人把箭頭朝一個方向畫;有人是反過來的
Tesnière 從頭開始指向依賴,本課使用此種方式
通常添加一個僞根指向整個句子的頭部,這樣每個單詞都精確地依賴於另一個節點
標註數據集的崛起:Universal Dependencies treebanks/通用依賴樹庫
雖然上下文無關文法(編譯原理中的上下文無關文法)中的語法集很容易寫,無非是有限數量的規則的集合而已,但人工費時費力標註的樹庫卻茁壯成長了起來。在1993年首次面世的Universal Dependencies treebanks如今在Google的贊助下發布了2.0,其授權大多是署名-相同方式共享,覆蓋了全世界絕大多數語言(不包括簡體中文)。
其官網是:http://universaldependencies.org/
樹庫的樣例:
課件解釋:
- 我們想要擁有一個統一的、並行的依賴描述,可用於任何人類語言
- 從前手工編寫語法然後訓練得到可以解析句子的解析器
- 用一條規則捕捉很多東西真的很有效率,但是事實證明這在實踐中不是一個好主意
- 語法規則符號越來越複雜,並且沒有共享和重用人類所做的工作
- 句子結構上的treebanks 支持結構更有效
某大佬文章中感覺更容易理解的說法:人們偏好樹庫多於規則的原因是顯而易見的,樹庫雖然標註難度高,但每一份勞動都可被複用(可以用於詞性標註命名實體識別等等任務);而每個人編寫的規則都不同,並且死板又醜陋。樹庫的多用性還是得其作爲評測的標杆數據,得到了越來越多的引用。
依賴項解析的信息來源是什麼?
-
雙詞彙親和/Bilexical affinities,比如discussion與issues。
-
詞語間距/Dependency distance ,因爲一般相鄰的詞語才具有依存關係
-
中間詞語/Intervening material ,如果中間詞語是動詞或標點,則兩邊的詞語不太可能有依存
-
詞語配價/Valency of heads,一個詞語最多有幾個依賴者。
放一個可以做nlp相關任務的平臺,挺好玩的喲http://ictclas.nlpir.org/nlpir/和一個哈工大的api(其中很多內容適合學習的時候看喲)http://www.ltp-cloud.com/intro#dp_how
依賴關係分析
一個句式是通過爲每個單詞選擇另一個單詞(包括詞根)來解析的。通常有如下的限制:
- 只有一個單詞是依賴於根的
- 不存在循環 [公式]
- 要使得依賴項能畫成爲樹
- 最後一個問題是箭頭是否可以交叉(可以交叉的就是 non-projective),沒有交叉的就是projectice
樣例:
是否可以將一個依存句法樹還原成句子?答案:否定的。(課堂問答)
投影性/projectice
上述瞭解了一下箭頭是否可以交叉,然後課程中具體說明了一下不可以交叉的情況。
定義:當單詞按線性順序排列時,沒有交叉的依賴弧,所有的弧都在單詞的上方
與CFG樹並行的依賴關係必須是投影的
- 通過將每個類別的一個子類別作爲頭來形成依賴關係
但是依賴理論通常允許非投射結構來解釋移位的成分
- 如果沒有這些非投射依賴關係,就不可能很容易獲得某些結構的語
依賴分析的方法
文獻中的依存句法分析方法有:
Dynamic programming/動態規劃
- Eisner(1996)提出了一種複雜度爲 O(n^3) 的聰明算法,它生成頭部位於末尾而不是中間的解析項
估計是找出以某head結尾的字串對應的最可能的句法樹。
Graph algorithms/圖算法
爲一個句子創建一個最小生成樹。其實就是生成最小生成樹。
- McDonald et al.’s (2005) MSTParser 使用ML分類器獨立地對依賴項進行評分(他使用MIRA進行在線學習,但它也可以是其他東西)
Constraint Satisfaction/約束滿足
- 去掉不滿足硬約束的邊 Karlsson(1990), etc.
估計是在某個圖上逐步刪除不符合要求的邊,直到成爲一棵樹。
“Transition-based parsing/基於轉換的分析” or “deterministic dependency parsing/確定性依賴解析”
- 良好的機器學習分類器 MaltParser(Nivreet al. 2008) 指導下的依存貪婪選擇。已證明非常有效。
主流方法,基於貪心決策動作拼裝句法樹。
Greedy transition-based parsing/基於貪婪轉換的句法分析
他是一種簡單的貪婪判別依賴分析器
基於Arc標準轉換的解析器/Arc-standard transition-based parser
附上一個大佬的相關鏈接(不是很明白的可以去看一看)https://www.hankcs.com/nlp/parsing/neural-network-based-dependency-parser.html/2#h2-6
MaltParser模型
我們需要解釋如何選擇下一步行動
- Answer:機器學習
每個動作都由一個有區別分類器(例如softmax classifier)對每個合法的移動進行預測
- 最多三種無類型的選擇,當帶有類型時,最多 [公式] 種
- Features:棧頂單詞,POS;buffer中的第一個單詞,POS;等等
在最簡單的形式中是沒有搜索的
- 但是,如果你願意,你可以有效地執行一個 Beam search 束搜索(雖然速度較慢,但效果更好):你可以在每個時間步驟中保留 k個好的解析前綴
該模型的精度略低於依賴解析的最高水平,但它提供了非常快的線性時間解析,性能非常好
傳統特徵表示/Conventional Feature Representation
傳統的特徵表示使用二元的稀疏向量,一個超長的稀疏01向量。
- 特徵模板:通常由配置中的1 ~ 3個元素組成
- Indicator features
依賴解析的評估:(標記)依賴精度/準確率評價
正確率平均應該包括標記的評價和依賴關係的評價~
其中,UAS (unlabeled attachment score) 指 無標記依存正確率 ,LAS (labeled attachment score) 指 有標記依存正確率
處理非投射性
(上面講述了投射性的,現在講解非投射性的~)
我們提出的弧標準算法只構建投影依賴樹
頭部可能的方向
- 在非投影弧上宣佈失敗
- 只具有投影表示時使用依賴形式
- CFG只允許投影結構
- 使用投影依賴項解析算法的後處理器來識別和解析非投影鏈接
- 添加額外的轉換,至少可以對大多數非投影結構建模(添加一個額外的交換轉換,冒泡排序)
- 轉移到不使用或不需要對投射性進行任何約束的解析機制(例如,基於圖的MSTParser)
(這一章沒怎麼講,大概意思就是:CFG轉換得到的依存樹一定是投射性的,但依存理論允許非投射性的依存句法樹,因爲一些語義需要通過非投射性表達;arc-standard算法只能拼裝投射性的句法樹,但換個體系,加上處理後再採用graph-based方法就能得到非投射的句法樹。)
爲什麼需要神經網絡句法分析器?
因爲:傳統特徵表示稀疏、不完全、計算代價大,SVM之類的線性分類器本身是很快的,但傳統parser的95%時間都花在拼裝查詢特徵上了。
從理論到代碼的分析參考:http://www.hankcs.com/nlp/parsing/neural-network-based-dependency-parser.html
斯坦福依賴關係的英語解析
(斯坦福大學很多東西確實很牛,這裏就不過多介紹了,下圖2014那個就是)
分佈式表示
- 我們將每個單詞表示爲一個d維稠密向量(如word2vec詞向量)
- 相似的單詞應該有相近的向量
- 同時,part-of-speech tags 詞性標籤(POS)和 dependency labels 依賴標籤也表示爲d維向量
- 較小的離散集也表現出許多語義上的相似性。
- NNS(複數名詞)應該接近NN(單數名詞)
- num(數值修飾語)應該接近amod(形容詞修飾語)。
(分佈式詞向量其實往往咱們也將成就是認爲是word2vec詞向量,之前我也是...,分佈式詞向量其實就是上述說的,維度不是特別高,然後能表示語義相似的,word2vec詞向量是一種分佈式詞向量,但是不等價)
對於Neural Dependency Parser,其輸入特徵通常包含三種:
- stack和buffer中的單詞及其dependent word
- 單詞的part-of-speech tag
- 描述語法關係的arc label
傳統方法拼接單詞、詞性、依存標籤,新方法拼接它們的向量表示:
我們將其轉換爲詞向量並將它們聯結起來作爲輸入層,再經過若干非線性的隱藏層,最後加入softmax layer得到shift-reduce解析器的動作
模型體系結構
句子結構的依存分析
神經網絡可以準確地確定句子的結構,支持解釋
Chen&Manning的工作被許多人繼續往前推進,走在最前沿的是Google。趨勢是:
- 更大、更深的且調參調得更好的神經網絡
- Beam Search 更多的探索動作序列的可能性,而不是隻考慮當前的最優
- 全局、條件隨機場(CRF)的推理出決策序列
這就引出了SyntaxNet和Parsey McParseFace模型
事實上,在深度學習調參數和更換結構中我們應該冷靜一些,花費了大量的人力物力卻僅有1%左右的提升~
基於圖的依賴關係分析器
- 爲每條邊的每一個可能的依賴關係計算一個分數
- 然後將每個單詞的邊緣添加到其得分最高的候選頭部
- 並對每個單詞重複相同的操作
- 在神經模型中爲基於圖的依賴分析注入活力
- 爲神經依賴分析設計一個雙仿射評分模型
- 也使用神經序列模型,我們將在下週討論
- 取得了非常棒的結果
- 但是比簡單的基於神經傳遞的解析器要慢
- 在一個長度爲 n 的句子中可能有n^2個依賴項
一個可以實現詞性標註和依賴分析的網站:https://hanlp.hankcs.com/?sentence=徐先生還具體幫助他確定了把畫雄鷹、松鼠和麻雀作爲主攻目標%E3%80%82