zoukankan      html  css  js  c++  java
  • 依存句法分析 Dependency Parsing

    任务介绍

    句子的依存结构表达了词与词之间的依赖关系,这种关系称依存关系。它是一种二元的非对称关系(binary asymmetric relation),从依存关系的支配者head指向从属者dependent。

    依存句法分析旨在将输入的句子转化成依存分析树(或图),依存树中自上而下任意父子结点之间用依存关系连接。在自然语言处理中,依存句法分析属于句法层次的任务,它一般需要词法层次的词性标注(POS)的结果作为辅助信息。

    有趣的是,词性标注这个任务又需要分词结果作为辅助信息,可通过分词和词性标注联合任务来规避分词带来错误传播,当然这是题外话。

    以LTP为例,依存句法分析中的依存关系包括:

    关系类型 标签 描述 样例
    主谓关系 SBV subject-verb 我送她一束花 (我 <-- 送)
    动宾关系 VOB 直接宾语,verb-object 我送她一束花 (送 --> 花)
    间宾关系 IOB 间接宾语,indirect-object 我送她一束花 (送 --> 她)
    前置宾语 FOB 前置宾语,fronting-object 他什么书都读 (书 <-- 读)
    兼语 DBL double 他请我吃饭 (请 --> 我)
    定中关系 ATT attribute 红苹果 (红 <-- 苹果)
    状中结构 ADV adverbial 非常美丽 (非常 <-- 美丽)
    动补结构 CMP complement 做完了作业 (做 --> 完)
    并列关系 COO coordinate 大山和大海 (大山 --> 大海)
    介宾关系 POB preposition-object 在贸易区内 (在 --> 内)
    左附加关系 LAD left adjunct 大山和大海 (和 <-- 大海)
    右附加关系 RAD right adjunct 孩子们 (孩子 --> 们)
    独立结构 IS independent structure 两个单句在结构上彼此独立
    标点 WP punctuation
    核心关系 HED head 指整个句子的核心

    实际上,也不必严格遵守这个表格,最终还是得按照语料的来,毕竟tag都是标注规范说了算。

    以“他叫汤姆去拿外衣。”为例,得到如下的依存句法分析结果:

    一般句子的核心都是谓词。

    依存句法分析可以帮助理解文本语义,并且具有可解释性。

    基于贪心的确定性转移的依存句法分析[1]

    将依存句法分析的分析过程看成状态机的状态转移过程。给定一个初始状态(init state)和一个终止状态(terminate state),状态机从初始状态出发,在每个时刻都贪心地选择一个转移方式,从而实现状态的转移。到达终止状态后,可根据整个过程中的转移序列可以还原出依存分析树。

    用三元组((sigma), (eta), A)表示状态,其中(sigma)是一个栈(ROOT位于栈底),(eta)是缓存(buffer),A表示解析的结果。对于句子(s=(w_1, w_2, ..., w_n)),起始状态为([ROOT], [(w_0) (w_1) (w_2) ... (w_n)], (emptyset)),终止状态为([ROOT], [], A)

    每个时刻的转移方式有三种,shift、left_arc和right_arc。

    • shift:将buffer中的一个词添加到栈顶;即 (sigma), (w_i)|(eta), A ( ightarrow) (sigma)|(w_i), (eta), A
    • Left-Arc(l):栈[ROOT w1 w2 ...]生成一个方向向左、依存关系标签为l的弧边((w_1 leftarrow w_2))加入到A中,然后将(w_1)移出栈;
    • Right-Arc(l):栈[ROOT w1 w2 ...]生成一个方向向右、依存关系标签为l的弧边((w_1 ightarrow w_2))加入到A中,然后将(w_2)移出栈;

    以“He has good control.”为例,整个转移过程为:

    最终可根据A得到如下解析树:

    于是每个时刻如何选择转移方式成为方法的关键。考虑到状态机在每个时刻的转移方式有(2*N_l+1)[2],其中(N_l)是依存关系的数量。而状态机在每个时刻都只贪心地做出选择,所以简单构建一个分类器即可实现整个系统。当然,在解码过程中也可以换成beam search。

    A Fast and Accurate Dependency Parser using Neural Networks中使用的是DNN模型,从stack和buffer中抽取出一些词,然后将这些词的词嵌入、POS标签嵌入、依存关系标签嵌入作为输入,输出则是预测状态转移的方式。考虑到2014年的模型拿到现在肯定不中用,无论是网络结构还是优化器,都过时了,所以这里不打算介绍了。

    度量

    度量包括两种,UAS(unlabeled attachment scores)和LAS(labeled attachment scores),其中LAS可参考CoNLL 2017 Shared Task: Multilingual Parsing from Raw Text to Universal Dependencies.

    后记

    相比于传统的语义理解,如今大数据+大算力直接训练端到端的模型成为主流,语义依存分析渐渐变得不再那么重要了。


    1. A Fast and Accurate Dependency Parser using Neural Networks. Danqi Chen, Christopher D. Manning. EMNLP 2014. ↩︎

    2. left-arc和right-arc各有(N_l)个转移方式,再加shift就是(2*N_l+1)了。 ↩︎

  • 相关阅读:
    MacOS下保护浏览器主页和默认搜索
    Tokyo Tyrant(TTServer)系列(一)-介绍和安装
    四:二叉树的镜像递归非递归求解
    Android 异常 android.os.NetworkOnMainThreadException
    Android开发学习之路--传感器之初体验
    Xcode真机调试失败:The identity used to sign the executable is no longer valid
    hdu 3068 最长回文(manacher&amp;最长回文子串)
    bzoj1030【JSOI2007】文本生成器
    HDU2082母函数模板题
    Oracle数据库远程连接配置教程
  • 原文地址:https://www.cnblogs.com/YoungF/p/13827660.html
Copyright © 2011-2022 走看看