• Dependency Parsing


    句子的依赖结构表现在哪些单词依赖哪些单词。单词之间的这种关系及可以表示为优先级之间的关系等。

    Dependency Parsing

    通常情况下,对于一个输入句子:(S=w_{0} w_{1} dots w_{n})。 我们用 (w_{0}) 来表示 ROOT,我们将这个句子转换成一个图 G。

    依赖性解析通常分为训练与预测两步:

    1. 使用已经解析的注释库训练模型 M
    2. 得到模型 M之后,对于句子 S,通过模型解析出图 G。

    基于转换的依赖性解析

    该方法就是通过训练数据训练一个状态机,通过状态机转换对源语句进行解析。

    基于贪心确定性过渡的解析

    这个转换的系统本质也是一个状态机,但是不同的是,对于一个初始状态,会有多个终止状态。

    对于每一个源语句 (S=w_{0} w_{1} dots w_{n}) 每个状态可以表示成三部分 (c=(sigma, eta, A))

    1. 第一部分 (sigma) 用来存储来自 S 的 (w_i) ,使用栈存储
    2. (eta) 表示一个来自 S 的缓冲
    3. A 表示 (left(w_{i}, r, w_{j} ight)) 的集合,其中 (w_{i}, w_{j}) 来自 S,然后 r 表示 (w_{i}, w_{j})之间的关系。

    状态初始化:

    1. 初始状态是 (C_0) 可以表示为 (left[w_{0} ight]_{sigma},left[w_{1}, ldots, w_{n} ight]_{eta}, varnothing)。可以看到只有 (w_0)(sigma) 中,其它的 (w_i) 都在 (eta) 中。还没有任何关系。
    2. 终止状态就是 (sigma,[ ]_{eta}, A) 形式。

    状态转换的方法:

    1. 从缓存中移除一个单词兵放在 (sigma) 栈顶,
    2. (mathrm{L} mathrm{EFT}-mathrm{A} mathrm{RC}_{r}(l)):将 (left(w_{j}, r, w_{i} ight)) 添加至集合 A,(w_{i}) 是栈 (sigma) 的第二个数据,(w_{j}) 是栈顶的单词,将 (w_{i}) 从栈中移除,这个 ARC 关系用 (l) 表示。
    3. (mathrm{RIGHT}-mathrm{ARC}_{r}(l)):将 (left(w_{i}, r, w_{j} ight)) 添加到集合 A, (w_{i})是栈的第二个单词,

    神经依赖性解析

    神经以来解析的效果要好于传统的方法。主要区别是神经依赖解析的特征表示。

    我们描述的模型使用 arc 系统作为变换,我们的目的就是将原序列变成一个目的序列。就是完成解析树。这个过程可以看作是一个 encode 的过程。

    Feature Selection:

    第一步就是要进行特征的选择,对于神经网络的输入,我们需要定义一些特征,一般有以下这些:

    (S_{w o r d}):S 中一些单词的向量表示

    (S_{ ext {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 imes N_{w}})。其中 (N_w) 表示字典的大小。(e_{i}^{t}, e_{j}^{l} in mathbb{R}^{d}) 分别表示第 (i) 个POS标签与第 (j) 个ARC 标签。对应的矩阵就是 (E^{t} in mathbb{R}^{d imes N_{t}}) and (E^{l} in mathbb{R}^{d imes 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} ight) . t, s_{2} .t, r c_{1}left(s_{2} ight) . t, s_{1} .t ight})。然后我们将这些信息变成输入层的向量,比如对于单词来说,(x^{w}=left[e_{w_{1}}^{w} ; e_{w_{2}}^{w} ; ldots e_{w_{n} w}^{w} ight])。其中 (S_{word}=left{w_{1}, ldots, w_{n_w} ight}),表示输入层的信息。同样的方式,我们可以获取到 (x^t)(x^l)。然后我们经过一个隐含层,这个比较好理解:

    [h=left(W_{1}^{w} x^{w}+W_{1}^{t} x^{t}+W_{1}^{l} x^{l}+b_{1} ight)^{3} ]

    然后再经过一个 (softmax) 的输出层 (p=operatorname{softmax}left(W_{2} h ight)), 其中 (W_2) 是一个输出的矩阵,(W_{2} in mathbb{R}|mathcal{T}| imes 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})表示单词间的关系。

  • 相关阅读:
    www.a.shifen.com
    gstack pstack strace
    性能分析 函数粒度 函数里的一条语句 汇编 反编译 机器指令 %rbx,%rbp
    taocrypt
    sign
    Python 3.8.0 final¶ Release date: 2019-10-14
    超线程
    Python classes to extract information from the Linux kernel /proc files.
    借助中间件优化代码 将请求RequestId在服务端接收到请求在处理业务逻辑之前生成
    JVM CPU Profiler技术原理及源码深度解析
  • 原文地址:https://www.cnblogs.com/wevolf/p/10843283.html
Copyright © 2020-2023  润新知