句子的依赖结构表如今哪些单词依赖哪些单词。单词之间的这种关系及能够表示为优先级之间的关系等。缓存
一般状况下,对于一个输入句子:\(S=w_{0} w_{1} \dots w_{n}\)。 咱们用 \(w_{0}\) 来表示 ROOT,咱们将这个句子转换成一个图 G。网络
依赖性解析一般分为训练与预测两步:编码
该方法就是经过训练数据训练一个状态机,经过状态机转换对源语句进行解析。spa
这个转换的系统本质也是一个状态机,可是不一样的是,对于一个初始状态,会有多个终止状态。code
对于每个源语句 \(S=w_{0} w_{1} \dots w_{n}\) 每一个状态能够表示成三部分 \(c=(\sigma, \beta, A)\) 。blog
神经以来解析的效果要好于传统的方法。主要区别是神经依赖解析的特征表示。io
咱们描述的模型使用 arc 系统做为变换,咱们的目的就是将原序列变成一个目的序列。就是完成解析树。这个过程能够看做是一个 encode 的过程。class
第一步就是要进行特征的选择,对于神经网络的输入,咱们须要定义一些特征,通常有如下这些:select
\(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\)。而后咱们通过一个隐含层,这个比较好理解:
\[ h=\left(W_{1}^{w} x^{w}+W_{1}^{t} x^{t}+W_{1}^{l} x^{l}+b_{1}\right)^{3} \]
而后再通过一个 \(softmax\) 的输出层 \(p=\operatorname{softmax}\left(W_{2} h\right)\), 其中 \(W_2\) 是一个输出的矩阵,\(W_{2} \in \mathbb{R}|\mathcal{T}| \times d_{h}\)。
就像单词的词典同样,咱们对 POS 与 ARC 也有一个集合,其中 \(\mathcal{P}=\{\mathrm{NN}, \mathrm{NNP} ,\mathrm{NNS}, \mathrm{DT}, J J, \ldots \}\) 表示单词的一些性质, 例如 \(NN\) 表示单数名词。对于 \(\mathcal{L}=\{\)$ amod, tmod, nsubj, csubj, dobj$, \(\ldots\}\)表示单词间的关系。