作者:韓信子@ShowMeAI
教程地址:http://www.showmeai.tech/tutorials/36
本文地址:http://www.showmeai.tech/article-detail/237
宣告:版權所有,轉載請聯絡平臺與作者並註明出處
收藏ShowMeAI檢視更多精彩內容
本系列為史丹佛CS224n《自然語言處理與深度學習(Natural Language Processing with Deep Learning)》的全套學習筆記,對應的課程視訊可以在 這裡 檢視。
ShowMeAI為CS224n課程的全部課件,做了中文翻譯和註釋,並製作成了 GIF動圖!點選 第5講-句法分析與依存解析 檢視的課件註釋與帶學解讀。更多資料獲取方式見文末。
概述
CS224n是頂級院校史丹佛出品的深度學習與自然語言處理方向專業課程,核心內容覆蓋RNN、LSTM、CNN、transformer、bert、問答、摘要、文字生成、語言模型、閱讀理解等前沿內容。
筆記核心詞
- Dependency Grammar
- Dependency Structure
- Neural Dependency Parsing
- 依存解析
- 依存句法
- 語法依賴
1.依存語法與依存結構
與編譯器中的解析樹類似,NLP中的解析樹是用於分析句子的句法結構。使用的結構主要有兩種型別——短語結構 和 依存結構。
短語結構文法使用短語結構語法將片語織成巢狀成分。後面的內容會展開對它做更詳細的說明。我們現在關注依存語法。
句子的依存結構展示了單詞依賴於另外一個單詞 (修飾或者是引數)。詞與詞之間的二元非對稱關係稱為依存關係,描述為從head (被修飾的主題) 用箭頭指向dependent (修飾語)。一般這些依存關係形成樹結構,他們通常用語法關係的名稱 (主體,介詞賓語,同位語等)。
Bills on ports and immigration were submitted by Senator Brownback, Republican of Kansas.
依存樹的例子如下圖所示:
有時,在依存樹的頭部增加一個假的ROOT節點,這樣每個單詞都依存於唯一一個節點。
1.1 依存分析
依存語法是給定一個輸入句子 \(S\),分析句子的句法依存結構的任務。依存句法的輸出是一棵依存語法樹,其中輸入句子的單詞是通過依存關係的方式連線。
正式一點定義,依存語法問題就是建立一個輸入句子的單詞 \(S=w_{0}w_{1} \cdots w_{n}\) (其中 \(w_{0}\) 是 ROOT) 到它的依存語法樹的對映圖 \(G\)。最近幾年提出了很多以依存句法為基礎的的變體,包括基於神經網路的方法,我們將會在後面介紹。
確切地說,在依存語法中有兩個子問題:
- 學習:給定用依賴語法圖示註的句子的訓練集 \(D\),建立一個可以用於解析新句子的解析模型 \(M\)
- 解析:給定解析模型 \(M\) 和句子 \(S\),根據 \(M\) 得到 \(S\) 的最優依存語法圖
1.2 基於轉移的依存分析
Transition-based 依存語法依賴於定義可能轉換的狀態機,以建立從輸入句到依存句法樹的對映。
- 「學習」問題是建立一個可以根據轉移歷史來預測狀態機中的下一個轉換的模型。
- 「解析」問題是使用在學習問題中得到的模型對輸入句子構建一個最優的轉移序列。
大多數 Transition-based 系統不會使用正式的語法。
1.3 Greedy Deterministic Transition-Based Parsing
這個系統是由 Nivre 在 2003 年提出,與當時的常用方法截然不同。
這個轉換系統是一個狀態機,它由狀態和這些狀態之間的轉換組成。該模型匯出了從初始狀態到幾種終端狀態之一的一系列轉換。
1) 狀態
對任意句子 \(S=w_{0}w_{1} \cdots w_{n}\),一個狀態可以描述為一個三元組 \(c=(\sigma, \beta,A)\):
-
① 來自 \(S\) 的單詞 \(w_{i}\) 的堆 \(\sigma\)
-
② 來自 \(S\) 的單詞 \(w_{i}\) 的緩衝區 \(\beta\)
-
③ 一組形式為 \((w_{i},r,w_{j})\) 的依存弧,其中 \(w_{i},w_{j}\) 是來自 \(S\),和 \(r\) 描述依存關係。
因此,對於任意句子 \(S=w_{0}w_{1} \cdots w_{n}\):
-
① 一個形式為 \(([w_{0}]_{\sigma},[w_{1}, \cdots ,w_{n}]_{\beta},\varnothing)\) 的初始狀態 \(c_{0}\) (現在只有 ROOT 在堆 \(\sigma\) 中,沒有被選擇的單詞都在緩衝區 \(\beta\) 中。
-
② 一個形式為 \((\sigma,[]_{\beta},A)\) 的終點狀態。
2) 轉移
在狀態之間有三種不同型別的轉移:
-
① \(SHIFT\):移除在緩衝區的第一個單詞,然後將其放在堆的頂部 (前提條件:緩衝區不能為空)。
-
② \(Left\text{-}Arc_{r}\):向依存弧集合 \(A\) 中加入一個依存弧 \((w_{j},r,w_{i})\),其中 \(w_{i}\) 是堆頂的第二個單詞, \(w_{j}\) 是堆頂部的單詞。從棧中移除 \(w_{i}\) (前提條件:堆必須包含兩個單詞以及 \(w_{i}\) 不是 ROOT )
-
③ \(Right\text{-}Arc_{r}\):向依存弧集合 \(A\) 中加入一個依存弧 \((w_{i},r,w_{j})\),其中 \(w_{i}\) 是堆頂的第二個單詞, \(w_{j}\) 是堆頂部的單詞。從棧中移除 \(w_{j}\) (前提條件:堆必須包含兩個單詞)
下圖給出了這三個轉換的更正式的定義:
1.4 神經網路依存解析器
雖然依賴項解析有很多深層模型,這部分特別側重於貪心,基於轉移的神經網路依存語法解析器。與傳統的基於特徵的判別依存語法解析器相比,神經網路依存語法解析器效能和效果更好。與以前模型的主要區別在於這類模型依賴稠密而不是稀疏的特徵表示。
我們將要描述的模型採用上一部分中講述的標準依存弧轉換系統。最終,模型的目標是預測從一些初始狀態 \(c\) 到一個終點狀態的轉換序列,對模型中的依存語法樹進行編碼的。
由於模型是貪心的,它基於從當前的狀態 \(c=(\sigma, \beta, A)\) 提取特徵,然後嘗試一次正確地預測一次轉移 \(T\in \{SHIFT, Left\text{-}Arc_{r},Right\text{-}Arc_{r}\}\)。回想一下, \(\sigma\) 是棧,\(\beta\) 是快取, \(A\) 是對於一個給定的句子的依賴弧的集合。
1) 特徵選擇
根據該模型所需的複雜性,定義神經網路的輸入是靈活的。對給定句子 \(S\) 的特徵包含一些子集:
-
① \(S_{word}\):在堆 \(\sigma\) 的頂部和緩衝區 \(\beta\) 的 \(S\) 中一些單詞的詞向量 (和它們的依存)。
-
② \(S_{tag}\):在 \(S\) 中一些單詞的詞性標註 ( POS )。詞性標註是由一個離散集合組成:\(\mathcal{P}=\{NN,NNP,NNS,DT,JJ, \cdots \}\)。
-
③ \(S_{label}\):在 \(S\) 中一些單詞的依存標籤。依存標籤是由一個依存關係的離散集合組成:\(\mathcal{L}=\{amod,tmod,nsubj,csubj,dobj, \cdots \}\)。
對每種特徵型別,我們都有一個對應的將特徵的 one-hot 編碼對映到一個 \(d\) 維的稠密的向量表示的嵌入矩陣。
-
\(S_{word}\) 的完全嵌入矩陣是 \(E^{w}\in \mathbb{R}^{d\times N_{w}}\),其中 \(N_{w}\) 是字典/詞彙表的大小。
-
POS 和依存標籤的嵌入矩陣分別為 \(E^{t}\in \mathbb{R}^{d\times N_{t}}\) 和 \(E^{l}\in \mathbb{R}^{d\times N_{l}}\),其中 \(N_{t}\) 和 \(N_{l}\) 分別為不同詞性標註和依存標籤的個數。
最後,定義從每組特徵中選出的元素的數量分別為 \(n_{word}\),\(n_{tag}\),\(n_{label}\)。
2) 特徵選擇的例子
作為一個例子,考慮一下對 \(S_{word}\),\(S_{tag}\) 和 \(S_{label}\) 的選擇:
-
① \(S_{word}\):在堆和緩衝區的前三個單詞:\(s_{1},s_{2},s_{3},b_{1},b_{2},b_{3}\)。棧頂部兩個單詞的第一個和第二個的 leftmost / rightmost 的子單詞:\(lc_{1}(s_{i}),rc_{1}(s_{i}),lc_{2}(s_{i}),rc_{2}(s_{i}),i=1,2\)。棧頂部兩個單詞的第一個和第二個的 leftmost of leftmost / rightmost of rightmost 的子單詞:\(lc_{1}(lc_{1}(s_{i})),rc_{1}(rc_{1}(s_{i})),i=1,2\)。\(S_{word}\) 總共含有 \(n_{word}=18\) 個元素。
-
② \(S_{tag}\):相應的詞性標註,則 \(S_{tag}\) 含有 \(n_{tag}=18\) 個元素。
-
③ \(S_{label}\):單詞的對應的依存標籤,不包括堆/緩衝區上的 \(6\) 個單詞,因此 \(S_{label}\) 含有 \(n_{label}=12\) 個元素。
注意我們使用一個特殊的 \(NULL\) 表示不存在的元素:當堆和緩衝區為空或者還沒有指定依存關係時。
對一個給定句子例子,我們按照上述的方法選擇單詞,詞性標註和依存標籤,從嵌入矩陣 \(E^{w},E^{t},E^{l}\) 中提取它們對應的稠密的特徵的表示,然後將這些向量連線起來作為輸入 \([x^{w},x^{t},x^{l}]\)。
在訓練階段,我們反向傳播到稠密的向量表示,以及後面各層的引數。
3) 前饋神經網路模型
(關於前饋神經網路的內容也可以參考ShowMeAI的對吳恩達老師課程的總結文章深度學習教程 | 神經網路基礎,深度學習教程 | 淺層神經網路和深度學習教程 | 深層神經網路)
這個神經網路包含一個輸入層 \([x^{w},x^{t},x^{l}]\),一個隱藏層,以及具有交叉熵損失函式的最終 softmax 層。
我們可以在隱藏層中定義單個權值矩陣,與 \([x^{w},x^{t},x^{l}]\) 進行運算,我們可以使用三個權值矩陣 \([W^{w}_{1},W^{t}_{1},W^{l}_{1}]\),每個矩陣對應著相應的輸入型別,如下圖所示。
然後我們應用一個非線性函式並使用一個額外的仿射層 \([W_{2}]\),使得對於可能的轉移次數 (輸出維度) ,有相同數量的 softmax 概率。
- Softmax layer: \(p=\operatorname{softmax}\left(W_{2} h\right)\)
- Hidden layer: \(h=\left(W_{1}^{w} x^{w}+W_{1}^{t} x^{t}+W_{1}^{l} x^{l}+b_{1}\right)^{3}\)
- Input layer:\(\left[x^{w}, x^{t}, x^{l}\right]\)
注意在上圖中,使用的非線性函式是 \(f(x)=x^{3}\)。
有關 greedy transition-based 神經網路依存語法解析器的更完整的解釋,請參考論文:[A Fast and Accurate Dependency Parser using Neural Networks](https://cs.stanford.edu/~danqi/papers/emnlp2014.pdf)。
2.參考資料
- 本教程的線上閱讀版本
- 《史丹佛CS224n深度學習與自然語言處理》課程學習指南
- 《史丹佛CS224n深度學習與自然語言處理》課程大作業解析
- 【雙語字幕視訊】史丹佛CS224n | 深度學習與自然語言處理(2019·全20講)
ShowMeAI 系列教程推薦
- 大廠技術實現 | 推薦與廣告計算解決方案
- 大廠技術實現 | 計算機視覺解決方案
- 大廠技術實現 | 自然語言處理行業解決方案
- 圖解Python程式設計:從入門到精通系列教程
- 圖解資料分析:從入門到精通系列教程
- 圖解AI數學基礎:從入門到精通系列教程
- 圖解大資料技術:從入門到精通系列教程
- 圖解機器學習演算法:從入門到精通系列教程
- 機器學習實戰:手把手教你玩轉機器學習系列
- 深度學習教程 | 吳恩達專項課程 · 全套筆記解讀
- 自然語言處理教程 | 史丹佛CS224n課程 · 課程帶學與全套筆記解讀
NLP系列教程文章
- NLP教程(1)- 詞向量、SVD分解與Word2vec
- NLP教程(2)- GloVe及詞向量的訓練與評估
- NLP教程(3)- 神經網路與反向傳播
- NLP教程(4)- 句法分析與依存解析
- NLP教程(5)- 語言模型、RNN、GRU與LSTM
- NLP教程(6)- 神經機器翻譯、seq2seq與注意力機制
- NLP教程(7)- 問答系統
- NLP教程(8)- NLP中的卷積神經網路
- NLP教程(9)- 句法分析與樹形遞迴神經網路
史丹佛 CS224n 課程帶學詳解
- 史丹佛NLP課程 | 第1講 - NLP介紹與詞向量初步
- 史丹佛NLP課程 | 第2講 - 詞向量進階
- 史丹佛NLP課程 | 第3講 - 神經網路知識回顧
- 史丹佛NLP課程 | 第4講 - 神經網路反向傳播與計算圖
- 史丹佛NLP課程 | 第5講 - 句法分析與依存解析
- 史丹佛NLP課程 | 第6講 - 迴圈神經網路與語言模型
- 史丹佛NLP課程 | 第7講 - 梯度消失問題與RNN變種
- 史丹佛NLP課程 | 第8講 - 機器翻譯、seq2seq與注意力機制
- 史丹佛NLP課程 | 第9講 - cs224n課程大專案實用技巧與經驗
- 史丹佛NLP課程 | 第10講 - NLP中的問答系統
- 史丹佛NLP課程 | 第11講 - NLP中的卷積神經網路
- 史丹佛NLP課程 | 第12講 - 子詞模型
- 史丹佛NLP課程 | 第13講 - 基於上下文的表徵與NLP預訓練模型
- 史丹佛NLP課程 | 第14講 - Transformers自注意力與生成模型
- 史丹佛NLP課程 | 第15講 - NLP文字生成任務
- 史丹佛NLP課程 | 第16講 - 指代消解問題與神經網路方法
- 史丹佛NLP課程 | 第17講 - 多工學習(以問答系統為例)
- 史丹佛NLP課程 | 第18講 - 句法分析與樹形遞迴神經網路
- 史丹佛NLP課程 | 第19講 - AI安全偏見與公平
- 史丹佛NLP課程 | 第20講 - NLP與深度學習的未來