《自然语言处理入门》12.依存句法分析--提取用户评论

本文介绍了依存句法分析在自然语言处理中的重要性,对比了短语结构树和依存句法树,重点讲解了依存句法分析的原理、基于转移的分析方法,并通过案例展示了如何利用依存句法分析进行意见抽取,提高信息提取的准确性。
摘要由CSDN通过智能技术生成

笔记转载于GitHub项目https://github.com/NLP-LOVE/Introduction-NLP

12. 依存句法分析

语法分析(syntactic parsing )是自然语言处理中一个重要的任务,其目标是分析句子的语法结构并将其表示为容易理解的结构(通常是树形结构)。同时,语法分析也是所有工具性NLP任务中较为高级、较为复杂的一种任务。 通过掌握语法分析的原理、实现和应用,我们将在NLP工程师之路上跨越一道分水岭。 本章将会介绍短语结构树依存句法树两种语法形式,并且着重介绍依存句法分析的原理和实现。

12.1 短语结构树

语言其实具备自顶而下的层级关系,固定数量的语法结构能够生成无数句子。比如,仅仅利用下列两个语法规律,我们就能够生成所有名词短语。

  • 名词短语可以由名词和名词短语组成。
  • 名词短语还可以由名词和名词组成。

例如,“上海+浦东+机场+航站楼”,所以,汉语中大部分句子都可以通过这样的语法来生成。

在语言学中,这样的语法被称为上下文无关文法,它由如下组件构成:

  • 终结符结合 Σ,比如汉语的一个词表。
  • 非终结符集合 V,比如“名词短语”“动词短语”等短语结构组成的集合。V 中至少包含一个特殊的非终结符,即句子符或初始符,计作 S。
  • 推到规则 R,即推到非终结符的一系列规则: V -> V U Σ。

基于上下文无关文法理论,我们可以从 S 出发,逐步推导非终结符。一个非终结符至少产生一个下级符号,如此一层一层地递推下去,我们就得到了一棵语法树。但在NLP中,我们称其为短语结构树。也就是说,计算机科学中的术语“上下文无关文法”在语言学中被称作“短语结构语法”。

  1. 短语结构树

    短语结构语法描述了如何自顶而下的生成一个句子,反过来,句子也可以用短语结构语法来递归的分解。层级结构其实是一种树形结构,例如这句话“上海 浦东 开发 与 法制 建设 同步”,分解成如下图的短语结构树:

    这样的树形结构称为短语结构树,相应的语法称为*短语结构语法**或上下文无关文法。至于树中的字母下面开始介绍。

  2. 宾州树库和中文树库

    语言学家制定短语结构语法规范,将大量句子人工分解为树形结构,形成了一种语料库,称为树库( treebank )。常见的英文树库有宾州树库,相应地,中文领域有CTB。上图中叶子节点(词语)的上级节点为词性,词性是非终结符的一种,满足“词性生成词语”的推导规则。

    常见的标记如下:

    标记 释义
    IP-HLN 单句-标题
    NP-SBJ 名词短语-主语
    NP-PN 名词短语-代词
    NP 名词短语
    VP 动词短语

    但是由于短语结构语法比较复杂,相应句法分析器的准确率并不高,现在研究者绝大部分转向了另一种语法形式。

12.2 依存句法树

不同于短语结构树,依存句法树并不关注如何生成句子这种宏大的命题。依存句法树关注的是句子中词语之间的语法联系,并且将其约束为树形结构。

  1. 依存句法理论

    依存语法理论认为词与词之间存在主从关系,这是一种二元不等价的关系。在句子中,如果一个词修饰另一个词,则称修饰词为从属词( dependent ),被修饰的词语称为支配词(head),两者之间的语法关系称为依存关系( dependency relation)。比如句子“大梦想”中形容词“大”与名词“梦想"之间的依存关系如图所示:

    图中的箭头方向由支配词指向从属词,这是可视化时的习惯。将一个句子中所有词语的依存关系以有向边的形式表示出来,就会得到一棵树,称为依存句法树( dependency parse tree)。比如句子“弱小的我也有大梦想”的依存句法树如图所示。

    现代依存语法中,语言学家 Robinson 对依存句法树提了 4 个约束性的公理。

    • 有且只有一个词语(ROOT,虚拟根节点,简称虚根)不依存于其他词语。
    • 除此之外所有单词必须依存于其他单词。
    • 每个单词不能依存于多个单词。
    • 如果单词 A 依存于 B,那么位置处于 A 和 B 之间的单词 C 只能依存于 A、B 或 AB 之间的单词。

    这 4 条公理分别约束了依存句法树(图的特例)的根节点唯一性、 连通、无环和投射性( projective )。这些约束对语料库的标注以及依存句法分析器的设计奠定了基础。

  2. 中文依存句法树库

    目前最有名的开源自由的依存树库当属UD ( Universal Dependencies),它以“署名-非商业性使用-相同方式共享4.0”等类似协议免费向公众授权。UD是个跨语种的语法标注项目,一共有 200 多名贡献者为 70 多种语言标注了 100 多个树库。具体到中文,存在4个不同领域的树库。本章选取其中规模最大的 UD_ Chinese GSD 作为示例。该树库的语种为繁体中文,将其转换为简体中文后,供大家下载使用。

    http://file.hankcs.com/corpus/chs-gsd-ud.zip

    该树库的格式为 CoNLL-U,这是一种以制表符分隔的表格格式。CoNLL-U 文件有10列,每行都是一个单词, 空白行表示句子结束。单元中的下划线 _ 表示空白, 结合其中一句样例,解释如表所示。

    词性标注集合依存关系标注集请参考 UD 的官方网站:

    http://niversaldependencies.org/guidelines.html

    另一份著名的语料库依然是 CTB,只不过需要额外利用一些工具将短语结构树转换为依存句法树。读者可以直接下载转换后的 CTB 依存句法树库,其格式是类似于 CoNLl-U 的 CoNLL。

  3. 依存句法树的可视化

    工具如下:

    • 南京大学汤光超开发的 Dependency Viewer。导入 .conll 扩展名的树库文件即可。
    • brat 标注工具。

    可视化工具可以帮助我们理解句法树的结构,比较句子之间的不同。

12.3 依存句法分析

依存句法分析( dependency parsing )指的是分析句子的依存语法的一种中高级 NLP任务,其输人通常是词语和词性,输出则是一棵依存句法树。 本节介绍实现依存句法分析的两种宏观方法,以及依存句法分析的评价指标。

  1. 基于图的依存句法分析

    正如树是图的特例一样,依存句法树其实是完全图的一个子图。如果为完全图中的每条边是否属于句法树的可能性打分,然后就可以利用 Prim 之类的算法找出最大生成树( MST )作为依存句法树了。这样将整棵树的分数分解( factorize )为每条边上的分数之和,然后在图上搜索最优解的方法统称为基于图的算法。

    在传统机器学习时代,基于图的依存句法分析器往往面临运行开销大的问题。这是由于传统机器学习所依赖的特征过于稀疏,训练算法需要在整个图上进行全局的结构化预测等。考虑到这些问题,另一种基于转移的路线在传统机器学习框架下显得更加实用。

  2. 基于转移的依存句法分析

    我们以“人 吃 鱼”这个句子为例子,手动构建依存句法树。

    • 从“吃”连线到“人”建立依存关系,主谓关系。
    • 从“吃”连线到“鱼”建立依存关系,动宾关系。

    如此,我们将一棵依存句法树的构建过程表示为两个动作。如果机器学习模型能够根据句子的某些特征准确地预测这些动作,那么计算机就能够根据这些动作拼装出正确的依存句法树了。这种拼装动作称为转移( transition),而这类算法统称为基于转移的依存句法分析

12.4 基于转移的依存句法分析

  1. Arc-Eager 转移系统

    一个转移系统 S 由 4 个部件构成: S = (C,T,Cs,Ct),其中:

    • C 是系统状态的集合
    • T 是所有可执行的转移动作的集合。
    • Cs 是一个初始化函数
    • Ct 为一系列终止状态,系统进入该状态后即可停机输出最终的动作序列。

    而系统状态又由 3 元祖构成: C = (σ,β,A) 其中:

    • σ 为一个存储单词的栈。
    • β 为存储单词的队列
    • A 为已确定的依存弧的集合。

    Arc-Eager 转移系统的转移动作集合详见下表:

    动作名称 条件 解释
    Shift 队列 β 非空 将队首单词 i 压栈
    LeftArc 栈顶单词 i 没有支配词 将栈顶单词 i 的支配词设为队首单词 j,即 i 作为 j 的子节点
    RightArc 队首单词 j 没有支配词 将队首单词 j 的支配词设为栈顶单词 i,即 j 作为 i 的子节点
    Reduce 栈顶单词 i 已有支配词 将栈顶单词 i 出栈

    对于上面的“人 吃 鱼”案例,Arc-Eager 的执行步骤如下:

    装填编号 σ 转移动作 β A
    0 [] 初始化 [人,吃,鱼,虚根] {}
    1 [人] Shift [吃,鱼,虚根] {}
    2 [] LeftArc(主谓) [吃,鱼,虚根] { 人 ← 主 谓 吃 } \{人\xleftarrow{主谓}吃\} { }
    3 [吃] Shift [鱼,虚根] { 人 ← 主 谓 吃 } \{人\xleftarrow{主谓}吃\} {
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值