hanlp依存树有什么函数 依存句法分析树_lr0文法分析表示例


翻译课程笔记已得到课程 Head TA Abigail See 允许。

本文翻译自斯坦福大学cs224n课程笔记Dependency Parsing。


1、Dependency Grammar and Dependency Structure

与编译器中的解析树类似,


中的解析树是用于分析句子的句法结构。主要有两种类型的使用结构-短语结构和依存结构。


短语结构文法使用短语结构语法将词组织成嵌套成分(译者注:其实就是上下文无关文法)。以下章节将对此进行更详细的说明。我们现在关注依存语法。

句子的依存结构展示了单词依赖于另外一个单词(修饰或者是参数)。词与词之间的二元非对称关系称为依存关系,描述为从 head(被修饰的主题)用箭头指向 dependent


hanlp依存树有什么函数 依存句法分析树_Dependency_02


有时,在树的头部增加一个假的


节点,这样每个单词都依存于唯一一个节点。


1.1、Dependency Parsing

依存语法是给定一个输入句子


,分析句子的句法依存结构的任务。依存句法的输出是一棵依存语法树,其中输入句子的单词是通过依存关系的方式连接。正式地,依存语法问题是创建一个输入句子的单词


(其中



)到它的依存语法树的映射图


。最近几年提出了很多以依存句法为基础的的变体,包括基于神经网络的方法,我们将会在后面介绍。


确切地说,在依存语法中有两个子问题:

  1. ,创建一个可以用于解析新句子的解析模型 。
  2. 解析:给定解析模型 和句子 ,根据 得到 的最优依存语法图。

1.2、Transition-Based Dependency Parsing


依存语法依赖于定义可能的转换的状态机,以创建从输入句到依存句法树的映射。学习问题是创建一个可以根据转移历史来预测状态机中的下一个转换的模型。分析问题是使用在学习问题中得到的模型对输入句子构建一个最优的转移序列。大多数


系统不会使用正式的语法。


1.3、Greedy Deterministic Transition-Based Parsing

这个系统是由 Nivre 在 2003 年提出,与当时的常用方法截然不同。

这个转移系统是一个状态机,它由这些状态之间的状态和转换组成。该模型引发了从一些初始状态到多个终点状态之一的一个转换序列。

状态:对任意句子


,一个状态可以描述为一个三元组



  1. 来自 的单词 的堆 ,
  2. 来自 的单词 的缓冲区 ,
  3. 一组形式为 的依存弧,其中 是来自 ,和 描述依存关系。

因此,对于任意句子



  1. 一个形式为 的处事状态 (现在只有 在堆 中,没有被选择的单词都在缓冲区 中。
  2. 一个形式为 的终点状态。

转移:在状态之间有三种不同类型的转移:

  1. :移除在缓冲区的第一个单词,然后将其放在堆的顶部(前提条件:缓冲区不能为空)。
  2. :向依存弧集合 中加入一个依存弧 ,其中 是堆顶的第二个单词, 是堆顶部的单词。从堆中移除 (前提条件:堆必须包含两个单词以及 不是 )。
  3. :向依存弧集合 中加入一个依存弧 ,其中 是堆顶的第二个单词, 是堆顶部的单词。从堆中移除 (前提条件:堆必须包含两个单词以及 不是 )。

下图给出了这三个转换的更正式的定义。


hanlp依存树有什么函数 依存句法分析树_lr0文法分析表示例_03


1.4、Neural Dependency Parsing

虽然有很多深度学习模型应用在依存语法上,这部分特别侧重于基于贪心和基于转移的神经网络依存语法分析器。与传统的基于特征的判别的依存语法分析器相比,神经网络依存语法分析器性能和效果更好。与以前模型的主要区别在于这类模型依赖稠密而不是稀疏的特征表示。

我们将要描述的模型采用上一部分中讲述的标准依存弧系统进行转换。最终,模型的目标是预测从一些初始状态


到一个终点状态的转换序列,在模型中的依存语法树被编码的。由于模型是贪心的,它基于从当前的状态


提取特征,然后尝试一次正确地预测一次转移



特征选择:根据该模型所需的复杂性,定义神经网络的输入是有灵活性的。对给定句子


的特征包含一些子集:


  1. :在在堆 的顶部和缓冲区 的 中一些单词的词向量(和它们的依存)。

2.


:在


中一些单词的词性标注(


)。词性标注是由一个离散集合组成:



3.


:在


中一些单词的依存标签。依存标签是由一个依存关系的离散集合组成:



对每种特征类型,我们都有一个对应的将特征的


编码映射到一个


维的稠密的向量表示的嵌入矩阵。


的完全嵌入矩阵是


,其中


是字典/词汇表的大小。相应地,


和依存标签的嵌入矩阵分别为



,其中



分别为不同词性标注和依存标签的个数。最后,定义从每组特征中选出的元素的数量分别为



特征选择例子:作为一个例子,考虑一下对




的选择:


  1. :在堆和缓冲区的前三个单词: 。堆栈顶部两个单词的第一个和第二个的 的子单词: 。堆栈顶部两个单词的第一个和第二个的 的子单词: 。 总共含有 个元素。
  2. :相应的词性标注,则 含有 个元素。
  3. :单词的对应的依存标签,不包括堆/缓冲区上的 个单词,因此 含有 个元素。

注意我们使用一个特殊的


表示不存在的元素:当堆和缓冲区为空或者还没有指定依存关系时。对一个给定句子例子,我们按照上述的方法选择单词,词性标注和依存标签,从嵌入矩阵


中提取它们对应的稠密的特征的表示,然后将这些向量连接起来作为输入


。在训练时间,我们反向传播到稠密的向量表示,以及后面各层的参数。


前馈神经网络模型:这个神经网络包含一个输入层


,一个隐藏层,以及具有交叉熵损失函数的最终


层。我们可以在隐藏层中定义单个权值矩阵,与


进行运算,我们可以使用三个权值矩阵


,每个矩阵对应着相应的输入类型,如下图所示。然后我们应用一个非线性函数和再使用一个仿射层


,使得对于可能的转移次数(输出维度),有相同数量的


概率。


hanlp依存树有什么函数 依存句法分析树_神经网络_04


注意在上图中,使用的非线性函数是



有关


神经网络依存语法解析器的更完整的解释,请参考论文:A Fast and Accurate Dependency Parser using Neural Networks。