句子的依賴結構表現在哪些單詞依賴哪些單詞。單詞之間的這種關系及可以表示為優先級之間的關系等。
Dependency Parsing
通常情況下,對於一個輸入句子:\(S=w_{0} w_{1} \dots w_{n}\)。 我們用 \(w_{0}\) 來表示 ROOT,我們將這個句子轉換成一個圖 G。
依賴性解析通常分為訓練與預測兩步:
- 使用已經解析的注釋庫訓練模型 M
- 得到模型 M之后,對於句子 S,通過模型解析出圖 G。
基於轉換的依賴性解析
該方法就是通過訓練數據訓練一個狀態機,通過狀態機轉換對源語句進行解析。
基於貪心確定性過渡的解析
這個轉換的系統本質也是一個狀態機,但是不同的是,對於一個初始狀態,會有多個終止狀態。
對於每一個源語句 \(S=w_{0} w_{1} \dots w_{n}\) 每個狀態可以表示成三部分 \(c=(\sigma, \beta, A)\) 。
- 第一部分 \(\sigma\) 用來存儲來自 S 的 \(w_i\) ,使用棧存儲
- \(\beta\) 表示一個來自 S 的緩沖
- A 表示 \(\left(w_{i}, r, w_{j}\right)\) 的集合,其中 \(w_{i}, w_{j}\) 來自 S,然后 r 表示 \(w_{i}, w_{j}\)之間的關系。
狀態初始化:
- 初始狀態是 \(C_0\) 可以表示為 \(\left[w_{0}\right]_{\sigma},\left[w_{1}, \ldots, w_{n}\right]_{\beta}, \varnothing\)。可以看到只有 \(w_0\) 在 \(\sigma\) 中,其它的 \(w_i\) 都在 \(\beta\) 中。還沒有任何關系。
- 終止狀態就是 \(\sigma,[ ]_{\beta}, A\) 形式。
狀態轉換的方法:
- 從緩存中移除一個單詞兵放在 \(\sigma\) 棧頂,
- \(\mathrm{L} \mathrm{EFT}-\mathrm{A} \mathrm{RC}_{r}(l)\):將 \(\left(w_{j}, r, w_{i}\right)\) 添加至集合 A,\(w_{i}\) 是棧 \(\sigma\) 的第二個數據,\(w_{j}\) 是棧頂的單詞,將 \(w_{i}\) 從棧中移除,這個 ARC 關系用 \(l\) 表示。
- \(\mathrm{RIGHT}-\mathrm{ARC}_{r}(l)\):將 \(\left(w_{i}, r, w_{j}\right)\) 添加到集合 A, \(w_{i}\)是棧的第二個單詞,
神經依賴性解析
神經以來解析的效果要好於傳統的方法。主要區別是神經依賴解析的特征表示。
我們描述的模型使用 arc 系統作為變換,我們的目的就是將原序列變成一個目的序列。就是完成解析樹。這個過程可以看作是一個 encode 的過程。
Feature Selection:
第一步就是要進行特征的選擇,對於神經網絡的輸入,我們需要定義一些特征,一般有以下這些:
\(S_{w o r d}\):S 中一些單詞的向量表示
\(S_{\text {tag}}\):S 中一些單詞的 Part-of-Speech (POS) 標簽,POS 標簽包含一個小的離散的集合:\(\mathcal{P}=\{N N, N N P, N N S, D T, J J, \dots\}\)
\(S_{l a b el}\):S 中一些單詞的 arc-labels ,這個標簽包含一個小的離散集合,描述依賴關系:\(\mathcal{L}=\{\) $amod, tmod $, \(n s u b j, c s u b j, d o b j\), \(\ldots\}\)
在神經網絡中,我們還是首先會對這個輸入處理,將這些編碼從 one-hot 編碼變成稠密的向量編碼
對於單詞的表示我們使用 \(e_{i}^{w} \in \mathbb{R}^{d}\)。使用的轉換矩陣就是 \(E^{w} \in \mathbb{R}^{d \times N_{w}}\)。其中 \(N_w\) 表示字典的大小。\(e_{i}^{t}, e_{j}^{l} \in \mathbb{R}^{d}\) 分別表示第 \(i\) 個POS標簽與第 \(j\) 個ARC 標簽。對應的矩陣就是 \(E^{t} \in \mathbb{R}^{d \times N_{t}}\) and \(E^{l} \in \mathbb{R}^{d \times N_{l}}\)。其中 \(N_t\) 和 \(N_L\) 分別表示所有的 POS標簽 與 ARC標簽的個數。我們用 \(S^{w}, S^{t}, S^{l}\) 來表示 word, POS,ARC 的信息。
例如對於上面的這個圖:
\(S_{tag}= \left\{l c_{1}\left(s_{2}\right) . t, s_{2} .t, r c_{1}\left(s_{2}\right) . t, s_{1} .t\right\}\)。然后我們將這些信息變成輸入層的向量,比如對於單詞來說,\(x^{w}=\left[e_{w_{1}}^{w} ; e_{w_{2}}^{w} ; \ldots e_{w_{n} w}^{w}\right]\)。其中 \(S_{word}=\left\{w_{1}, \ldots, w_{n_w}\right\}\),表示輸入層的信息。同樣的方式,我們可以獲取到 \(x^t\) 與 \(x^l\)。然后我們經過一個隱含層,這個比較好理解:
然后再經過一個 \(softmax\) 的輸出層 \(p=\operatorname{softmax}\left(W_{2} h\right)\), 其中 \(W_2\) 是一個輸出的矩陣,\(W_{2} \in \mathbb{R}|\mathcal{T}| \times d_{h}\)。
POS and label embeddings
就像單詞的詞典一樣,我們對 POS 與 ARC 也有一個集合,其中 \(\mathcal{P}=\{\mathrm{NN}, \mathrm{NNP} ,\mathrm{NNS}, \mathrm{DT}, J J, \ldots \}\) 表示單詞的一些性質, 例如 \(NN\) 表示單數名詞。對於 \(\mathcal{L}=\{\)$ amod, tmod, nsubj, csubj, dobj$, \(\ldots\}\)表示單詞間的關系。