依存分析

前言

这篇博文是笔者之前自然语言处理课程CS224的笔记

短语结构

短语结构的目的是将单词组织成嵌套的成分。基本思想是句子和句子的一部分有一种特殊的结构,人们可以用特定的方式将他们组合起来。之前人们想做的是描述人类语言结构,人们过去有2个关键工作来做到这点。

(1)一种方法就是编译原理课上学过的乔姆斯基谱系中的上下文无关文法(A->aB|a)。

(2)还有另一种理解句子结构的方法叫依存句法结构,通过找到句子当中每个词所依赖的部分来描述句子结构。例如:barking dog中barking依赖于dog,因为barking修饰dog。dog by the door中by the door也是dog的依赖通常用箭头来表示短语等之间的依存关系,因此可以画出句子的依存关系如下:
在这里插入图片描述
对于语义含糊的例子,都可以考虑依存分析,比如语义含糊的句子:Scientists study whales from space,后面的from space可以有两种修饰方法,依存图如下,也称为Treebank(树库)
在这里插入图片描述
人类语言具有歧义性,我们可以利用这种依存关系来描述人类语言。

与上下文无关文法相比,依存树确实会花费更多时间与精力。但是依存树也有许多优点,比如:(1)它可以被重复使用,而人类书写的语法规则在实际应用中往往无法重复使用,因为每个人书写的语法规则都不一样,每个人对语法都有自己的理解,而这些树库已经成了非常有效的被重复使用的工具,许多人在此基础上构建了多种自然语言处理工具。

(2)依存树库使用了真实的覆盖面广的数据,而人们写规则时只是依靠对英语语法的直觉判断,人们容易考虑不周,所以依存树库更容易找到所有可能发生的情况。

(3)不管是概率还是机器学习,它都不仅能给出所有可能性及其各自的频率,也会给出不同可能性同时发生的概率。

(4)可以用依存树来评估你构建的系统,这个在作业中可以体现。

依存语法和依存结构

依存句法的思想是一个句法模型,就是我们有一个词法项之间的关系或词之间的关系。通俗点说就是我们在词法项之间画箭头,称这些箭头为依存。比如句子“Bills on ports and immigration were submitted by Senator Brownback,Republican of Kansas”的依存分析如下图所示:
在这里插入图片描述
不过图片中加了一些修饰,比如Bills与submitted之间的连线上的nsubj:pass表示Bills是submitted的主语,were与submitted中间的连线上的aux表示were是submitted的一个辅修饰项。箭头的尾部一般被称为依存关系的头部或监督项或者摄政项,箭头的头部一般被称为独立项其他的词可以称为修饰项/下属项。这张和之前的两张图是根据范依存关系来分析的,范依存是一种新的树库,课程中没有展开介绍。

通常情况下,会增加一个特殊的单词ROOT来使得每个单词都至少是一个其他节点的独立性,如下图所示:
在这里插入图片描述

Denpendency Parsing依存分析

依存分析的步骤是:首先把句子中每个词都提出来,然后判断这些词的独立项或者头部是什么。这个做法有限制条件:只需要一个词作为ROOT的独立项并且不希望有环出现。

有4中依存分析的方法:

  1. Dynamic programming动态编程方法
  2. 图算法,比如最小生成树方法
  3. 约束限制满足方法
  4. 基于转换的依存分析方法,即利用贪心的方法考虑每个词的依赖项,这个是现在的主流分析方法,也是这门课讲解的内容

首先来看一下基于弧标准转换的依存分析的主要思想。对于一个我们想要分析的句子“I ate fish”同时也有一些转换方法,做法是首先设置一个栈与一个buffer缓冲区,栈初始化只有一个元素[root],栈顶是右边,buffer顶端在左边,如下所示:
在这里插入图片描述
在这个基于转换的模式下做依存分析一般有3种操作分别是shift,left-arc和right-arc。

(1)shift就是取缓冲区顶部词然后将其放到栈顶部,经过两次之后的状态如下:
在这里插入图片描述
left-arc和right-arc要做的事情是通过在左侧或右侧添加词作为独立项来做出附加判断。

(2)left-arc:我们说栈中第二个顶部元素是栈的顶部元素的独立项(箭头头部),然后把这个独立项从栈中拿走,如下图所示:
在这里插入图片描述
之后再shift一次,把fish放到栈里。这个操作后buffer就空了
在这里插入图片描述
(3)right-arc:这个就是left-arc反过来,对于right-arc而言,我们规定栈的顶部元素是栈的第二顶部元素的一个独立项,把顶部移走之后建立一个弧,执行后的模型如下:
在这里插入图片描述
之后再做一次right-arc说ate是root的独立项。到最后栈里面就只剩下一个[root]了,这就是我们正确分析句子后想要达到的一个状态。

这就是基于弧标准转换的依存分析,公式表达如下:
在这里插入图片描述
依存分析的评判方法是判断正确识别了多少个箭头对关系。下面解释一下在每个时刻我们应该选择哪一种操作。

一种方法是做一个机器学习分类器,已有树库来做句子的分析,我们就可以根据这些句子的分析来选择一种操作给出正确的句子分析,一个树对应一种唯一的选择序列,这样就得到了一个监督性学习问题。有一个地方是上述left/right-arc只是得到fish是ate的独立项,并没有说fish是ate的宾语,如果你想引入依存标签的话,比如有40种依存标签,外加上3种选择,最终有81类分类。

另一种方法是基于神经网络,下面简要介绍一种模型。该模型首先为每个单词提供词向量,此外也将单词词性和这个单词对应的上一个依存关系表示成d维的向量表示,之后将这些向量拼接起来,再经过Hidden层和Softmax层得到接下来可能的依存关系。模型图如下:
在这里插入图片描述


最后欢迎大家关注公众号NLP学习者
在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值