当前位置:   article > 正文

lr0文法分析表示例_CS224N Lecture5:依存句法分析

依存语法分析例子
本篇为课程CS224N Lecture5的笔记。课程主页见CS224N Winter2019,b站视频搬运见(2019)斯坦福CS224n深度学习自然语言处理课程 by Chris Manning 。之前的笔记可以参考专栏从零开始NLP学习 。

目录

  1. 句法结构
  2. 依存结构
  3. 依存句法分析
  4. 神经句法依存分析模型

1 句法结构

为什么我们需要了解句子的结构呢?人类通过将单词进行组合得到相对复杂的语言单元来进行表达。语言作为一种信息传递方式,只有理解了句子的结构才能正确地对语言进行解释,才有可能解读出语言真正想要表达的信息。

主流研究句法结构的视角分为两种:

  • 成分结构(constituency structure)
  • 依存结构(dependency structure)

1.1 成分结构

成分结构,也可以称之为词组结构语法(phrase structure grammar),其核心思想是将单词嵌套地组成词组成分,再不断地将小的词组成分合成为更大的语言成分。以下面的句子为例:

我们从基本的单词开始。对上述句子中的每个单词标注词性可得:

其中,

表示定语,
表示名词,
表示形容词,
表示介词;此外,名词词组(Noun phrase)用
进行表示,介词词组(Preposition phrase)用
进行表示。利用一类人为规定的文法(上下文无关文法),我们可以将小的语言成分组成相对较大的语言成分;例如根据文法
可以将单词
组合成名词词组
。类似的,我们可以得到介词词组
。进一步的,我们可以利用规则
将前一步所得的两个词组组合成更大的语言成分:

虽然这种结构非常流行,但是这种视角不是本节课的重点。

2 依存句法结构

不同于成分结构,依存结构着重于词法单元之间的依赖关系。以下面的句子为例:

它的依存结构如下:

e44a2798c9e3280a5bf560c0412060b3.png

2.1 歧义

有的时候同一个句子可能会拥有多个不同的依存结构,导致一个句子的意思可以有多种解释。常见歧义有如下几种:

  • 介词词组连接歧义
  • 连词词组范围歧义
  • 形容修饰词歧义
  • 动词词组连接歧义

关于介词词组连接歧义,可以观察如下例子:

这个句子可以有两种解释,一种是“科学家从太空(利用太空望远镜)计算鲸鱼的数量”,此时介词词组
修饰的是动词
;另一种解释是“科学家计算来自太空的鲸鱼的数量”,此时
修饰的是名词
。显然第二种解释不符合常识,但是在句法上是合理的。

类似的,对于连词词组范围歧义,可以通过下面的例子进行理解:

对于形容修饰词歧义,可以通过下面的例子进行理解:

2.2 依存关系语法与依存关系结构

前面提到,依存结构着重于词法单元之间的依赖关系;依存结构句法假设句子结构是由词法单元之间的关系所构成的,这种词法单元之间的关系(dependencies)用单向箭头来进行表示。词与词之间的复杂关系往往能最终形成树形的结构,称为依存树。关系箭头上常常会标明关系的名称。例子如下图所示:

1a5ca90e150b6c92502ef1324265d0d8.png

通常,箭头的起始单词被称为头(head),箭头指向的单词被称为尾(dependent)。

正式的说,依存句法分析问题希望得到一个从句子

到其对应依存树
的映射,其中
表示句子中的单词。具体来说,依存句法分析问题希望解决以下两个子问题:
  • 学习问题:给定经过依存树标注的句子训练集
    (例如一个树库,后面会提到),我们希望得到一个可以利用依存语法对新句子进行分析的模型
  • 分析问题:给定模型
    与句子
    ,利用模型
    推导得到句子
    的最优依存树

此外,有两点需要注意:

  • 不同流派可能会按照不同的规则来标注箭头;重点不在于如何标注,而是保持前后规则一致
  • 通常可以给句子添加一个虚假的起始节点,使原句中每个单词都成为某个其他节点的尾;此时句子的输入表示从原来的
    变为
    为起始节点

65f5a395c105dbdaf317978ef2a8508a.png
依存树的另一种画法

2.3 有标注数据集:Treebank

依存树库是一个经过标注的句子数据集,该数据集为每个句子标注了一个对应的依存句法树。构建一个依存树库(Treebanks)似乎是费力不讨好的,但事实恰恰相反:

  • 依存树库是可重复使用的,一旦构建完成,许多下游任务就可以基于现有的树库进行开发
  • 给出了相对权威的标注,当一个句子有歧义时,可以以树库给出的标注为准
  • 可以用于评估部分NLP系统
  • 依存树本身内含了很多信息,包括频率信息,分布信息等等

已有的依存树库资源:Universal dependencies treebanks

3 依存句法分析

下面的部分将会介绍如何构建一个依存句法分析模型来对句子进行依存句法分析。

3.1 经验与规则

依存句法模型的构建需要依赖于一些人类直觉与经验,比如以下几条:

  • 听起来合理(例如在词组
    中,
    就是一个听起来很合理的依存关系,而关系
    则显得不合理)
  • 依存距离短(大部分依存关系都存在于相邻或者附近的单词之间)
  • 依存关系往往不会跨越动词或者标点符号
  • 一个头节点对应合理数目的尾节点

依存句法分析进行的方式是为每个单词(将其视为头节点)找到其对应的尾节点(该分析过程包括了对

的处理)。这个过程有以下两个人为规定的限制:
  • 只能有一个单词作为其尾节点
  • 依存树中不允许出现环,即不允许出现
    的情况

此外,构建模型时还需要考虑是否应该允许依存关系相互交叉,例如下图的情况:

b9288b4f259dfdc997835e55960190d5.png

此处,关系

以及关系
之间发生了交叉。依存句法中关系交叉的这种性质被称为Projectivity。当依存句法不允许交叉关系存在时,我们称其为projective的;反之我们称其为non-projective的。通常情况下,依存句法是允许交叉关系的存在的;这是因为如果没有交叉关系的话,某些情况下无法得到合法的依存结构。

3.2 依存分析模型的评估标准

依存句法分析的准确率公式如下:

不同的评估指标对于什么是正确的依存关系有着不同的判断标准。 常见的评估指标有两种:
  • 带标签的依存关系准确率(Labeled Attachment Score,LAS)
  • 无标签的依存关系准确率(Unlabeled Attachment Score,UAS)

对于带标签的依存关系准确率,该标准既考虑依存关系的头尾以及方向是否正确,又考虑了依存关系相对应的关系种类标签是否正确;对于无标签的依存关系准确率,该标准只考虑依存关系本身是否有误。以句子

为例,若其对应的正确标注如下图:

a330a014c6136bb468d993137882cc8a.png

而由模型给出的标注如下:

54f9af24ab5425b33bb30fb736202bd4.png

那么

3.3 传统的基于状态转移的模型

基于状态转移的句法分析模型是基于状态机模型进行构造的。该模型包含了一系列中间状态、起始状态、终止状态以及状态之间的转换。给定句子

,一个状态可以用一个三元组
进行表示,其中
的含义分别如下:
  • 代表栈,其中包含来源于句子
    的单词
  • 代表缓冲区,其中包含来源于句子
    的单词
  • 是一个依存关系的集合,其中的关系形如
    ,此处
    表示来源于句子
    的单词,
    表示依存关系的类型

分别定义起始状态与终止状态如下:

  • 起始状态
    形如
    ,此时栈
    中只有起始节点
    ,其他所有句子中的单词都在缓冲区
    中,集合
    中目前不存在任何依存关系,因此为空集
  • 终止状态
    形如
    ,此时缓冲区中没有单词,表明句子中的所有单词都经过了模型的处理,栈中只有起始节点

此外,还需要定义模型的状态转移;该模型有如下三种状态转移方式:

  • :当缓冲区非空的时候,SHIFT操作将缓冲区
    的第一个单词取出并将其放置在栈
    的顶部
  • :设栈
    顶部的单词为
    ,顶部之下的单词为
    ;当栈内单词大于等于两个且
    不为
    时,
    操作将依存关系
    加入到关系集合
    中,并将单词
    从栈中移除
  • :设栈
    顶部的单词为
    ,顶部之下的单词为
    ;当栈内单词大于等于两个时,
    操作将依存关系
    加入到关系集合
    中,并将单词
    从栈中移除

以句子

为例,基于状态转移的模型会进行如下步骤:
  • 设定起始状态
  • 进行
    操作,状态变为
  • 进行
    操作,状态变为
  • 进行
    操作,状态变为
  • 进行
    操作,状态变为
  • 进行
    操作,状态变为
  • 进行
    操作,状态变为
  • 此时模型到达终止状态,解析结束

上述模型以及例子并没有告诉我们状态转移时模型是靠什么来进行决策的;假如我们的模型没有一个合理的决策器来确定每一步的状态转移,那么每个中间状态都有可能有多个可选的后续状态,则该模型是非确定的(nondeterministic)。为了得到一个确定的(deterministic)模型,Nivre以及Scholz提出使用memory-based学习方法得到对应的决策器。这一部分不是本节课的重点,详情可以参考他们于2003年发表的论文[1]。此外,Nivre和Hall[2]于2005年提出使用机器学习方法训练状态转移决策器,训练得到的决策器会对当前状态的下一步进行预测。此方法在当时并非效果最好的方法,但其优势在于相对较快的运行速度(解析耗时为

量级)以及相对不错的解析结果。

4 神经句法依存分析模型

前面提到的传统模型使用机器学习方法训练得到决策器来决定每一步该如何进行状态转移。尽管这类方法运行较快且效果较好,但是它们仍然存在不足:

  • 稀疏性,即传统方法的决策器使用的特征是高度稀疏的(比如one-hot向量以及tf-idf向量)
  • 不完整性,即无法完美的量化句子所包含的所有信息;相较之后提出的方法,传统方法在这方面做的更差
  • 特征计算十分昂贵,即决策器计算特征向量的过程需要花费相对较多的计算资源以及时间;在Chen和Manning所做的实验中,模型95%的运行时间都花在了构建特征上,而非预测

Chen和Manning[3]提出地神经依存分析模型较好地解决或者缓解了上述问题。该模型与传统的基于状态转移的模型类似,仅是在状态转移决策器部分存在较大区别。对于稀疏性,神经依存分析模型利用低维稠密的分布式向量对特征进行表示;对于不完整性,神经依存分析模型将单词、词性标签以及依存类别标签的分布式向量表示进行拼接作为神经网络模型的输入,这种方式所包含的信息量更大,也更加准确;对于传统方法特征计算昂贵的问题,神经网络方法表现出了相对更好的效率:相比于传统的方法,神经依存模型的效果更好,同时计算速度更快(这是由于神经依存模型所使用的特征的向量维度一般只有50-300维,相较于机器学习方法动辄百万维的特征表示,计算起来迅速多了)。对比数据如下:

其中,MaltParser就是Nivre和Hall于2005年
[2]提出的方法。从表格中的数据可以看出,神经依存模型在两项评估指标上基本都是最优的,并且计算十分高效。

下面将描述神经依存模型的细节。首先是模型的输入。前面提到,神经依存模型利用低维稠密的分布式向量对特征进行表示;此处的特征不仅仅包含字典中单词所对应的向量,也包含了词性标签

以及依存关系类别标签
的向量表示。类似于“相似的单词拥有特征空间内相近的词向量”这样的直觉,训练所得的词性标签以及依存关系标签也符合“相似的词性标签(依存关系标签)拥有相近的特征分布”。模型的目的为根据状态机的当前状态,预测最优的状态转移选择;因此模型的输入应为状态机中的状态,训练数据的标签为对应的正确状态转移选择。为了将状态向量化,神经依存模型设计了对应的转化规则。以句子
为例,设其某个中间状态如下图所示:

496c4e9199dc478005c8023ee6339ec5.png

对于该中间状态,神经依存模型所需的输入特征如下:

其中
表示栈中第
个元素,
表示缓冲区中第
个元素,
表示当前状态下已经处理过的单词所拥有的依存关系。确定用于表示状态的特征之后,通过查对应的向量矩阵得到每个特征对应的向量(对词性特征以及依存关系标签特征的向量的训练类似于词向量的训练过程,并最终得到相应的向量矩阵);将得到的所有特征拼接起来形成一个大向量,作为模型的最终输入。

模型后续部分并不复杂,如下图所示:

0a69771ae8b37968be0ea7af30d25386.png

拼接起来的输入经过一个隐藏层的变换之后通过

层输出模型对每个可能的状态转移决策的概率预测。

参考

  1. ^Deterministic Dependency Parsing of English Text https://www.aclweb.org/anthology/C04-1010.pdf
  2. ^abMaltParser: A Data-Driven Parser-Generator for Dependency Parsing http://lrec-conf.org/proceedings/lrec2006/pdf/162_pdf.pdf
  3. ^A Fast and Accurate Dependency Parser using Neural Networks https://www.aclweb.org/anthology/D14-1082.pdf
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/870584
推荐阅读
相关标签
  

闽ICP备14008679号