斯坦福CS224N学习笔记-6 依存分析

课程内容概述

  • 句法结构:一致性与依赖性
  • 依存文法和Treebank
  • 基于转移的依存分析
  • 使用神经网络的依存分析

描述语言结构的两种方法

  • 上下文无关文法
    • 上下文无关文法=短语结构文法=句子成分
  • 依存文法
    • 通过找出句子中每个词所依赖的部分来描述句子的结构

为了描述语言结构,人们采用了两种方法。其中一个就是计算机科学中常用的上下文无关文法,在语言学中,这常常被称为短语结构文法,然后也被称为句子成分的概念。另一种方法就是依存文法,也就是找出句子中每个词所依赖的部分来描述句子的结构。

短语结构

语言学家和自然语言处理器都希望能够描述人类语言的结构。在早些时候,我们在分析一个句子的结构时,习惯于将句子中的词组织成短语的形式。比如下图中,the cat可以构成句子中的一个短语,而这个短语也可以进行扩充,比如添加一些形容词large、barking、cuddly,或者是一些介词短语。我们可以用计算机科学中的上下文无关文法来定义这些短语结构的文法。
斯坦福CS224N学习笔记-6 依存分析_第1张图片

依存结构

分析句子结构的另一种方法就是利用依存结构。例如,在a large dog中,large是修饰dog的形容词,那么large就是dog的依赖项,或者the dog by the door中,by the door也是dog的依赖项。

很多存在二义性的句子其实就是不同的依存结构在同一个句子中的体现,对于同一个词可能有不同的依赖关系,就可能导致句子产生不同的语义。我们以依存结构来看每个词之间的依赖关系,那么分析的关键就是如何找到句子中的各个成分所依赖的成分。

比如在下面这句话中:
Scientists study whales from space.(科学家们从太空中(利用卫星)来研究鲸鱼/科学家们研究来自太空的鲸鱼)

from space这个介词短语既可以修饰study,也可以修饰whales,那么不同的修饰关系就会使句子产生完全不同的语义。
斯坦福CS224N学习笔记-6 依存分析_第2张图片
在上面这个句子中,句子的介词短语很多,每个介词短语都是另一个成分的依赖(红线表示了每个成分依赖的部分)。同一个介词短语根据它所修饰的内容不同,就会产生一些依赖的可能项,比如by Royal Trustco Ltd.可能会修饰前面的approved,也有可能是修饰前面的its acquisition。而在英语中,这种介词短语的依赖关系往往会构成一个嵌套关系(比如图中的例子)。

对于一句话的最后一个介词短语,由于它可能修饰的不同词,会产生一些句子的歧义。而这些歧义的数量定义为 C a t a l a n Catalan Catalan 数: C n = ( 2 n ) ! / [ ( n + 1 ) ! n ! ] C_n=(2n)!/[(n+1)!n!] Cn=(2n)!/[(n+1)!n!]

所以我们可以通过分析依存关系来描述人类语言。

Treebank

在语言学中通常以树库(treebank)的形式来标注数据。
斯坦福CS224N学习笔记-6 依存分析_第3张图片
将句子中的句法结构表示为依存关系图,就可以称之为Treebank。

将每个句子表示成这样的形式来建立一个树库或许显得很效率很低,而且不如直接搞一个语法规则有用,但是它有这样几个优点:

  • 可重用性
    • 每个人都有自己习惯使用的语法规则,这就会导致一套语法规则可能无法重用
    • 很多自然语言处理的工具例如语音标记或者解析器都是以树库为基础来构造的
    • 对于语言学家来说,树库也提供了一种非常真实的拥有完整句法的语言,可以在这个基础上做一些语言学分析
  • 覆盖全面
    • 树库的数据覆盖更加全面,而语法规则和人们的直觉有关,容易考虑疏漏
  • 能够给出概率和分布信息
  • 可以用来评估各种工具的好坏

依存语法和依存结构

句法分析

  • 依存句法分析
  • 成分句法分析

在自然语言处理过去的10多年间,依存关系文法实际上已经取代了短语结构文法(也称为上下文无关文法)
依存语法假设句法结构是由词法项之间的关系所构成的,一般将这种二元的非对称的关系成为“依存”,比如一句话可以用以下的方式来表示(箭头上标注的是这些语法关系的名字),可以看到这些关系构成了一个树的结构:
斯坦福CS224N学习笔记-6 依存分析_第4张图片
在这个树中,submitted可以看作头部,而Bills是动词submitted的一个参数,were是submitted的助动词(被动句式)。所以在树中父节点对应的词就是头部,而孩子节点对应的词就是这个头部的依赖项,或者也可以称为下属项、修饰项、次级项。解析一个依存关系文法就是要解析每个词都是哪个词的依赖项,最后能够得到一棵像上面那样的依存树。

依存关系文法在词序比较灵活的语言(世界上大部分的语言)中比较流行,而上下文无关文法在词序固定的语言中应用的比较好,比如英文。

注意:

  • 有些人习惯将表示依存关系的箭头由依存项指向头部,要具体分析
  • 为了在数学上或形式化上描述的更加简洁,通常我们会加一个(实际不存在的)根节点root,这样每个词就都成了一个节点的依赖项,所以这样的话每个词要么是句子中其他词的依赖项,要么是根节点的依赖项

依存分析的方法

  • 动态规划
  • 图算法:为句子构造最小生成树
  • 约束补偿
  • 基于转换的解析或称为确定性依存句法分析

基于弧标准转换的依存分析

用弧的形式来表示词之间的依赖关系

分析器的3个组成部分:
  • 一个栈 σ \sigma σ:用来产生移入的词之间的依存关系
  • 一个缓冲区 β \beta β:用来存放句子未处理的部分
  • 存放依存关系(即弧)的集合 A A A
分析过程共有3种操作:
  • Shift(移入):将缓冲区首部的词移入到栈 σ \sigma σ 栈顶
  • Left-Arc:将 σ \sigma σ 栈顶第二个词作为栈顶词的依赖项,将这个依赖关系放入集合 A A A 中,并且弹出这个依赖项(即第二个词)
  • Right-Arc:将 σ \sigma σ 栈顶词作为栈顶第二个词的依赖项,将这个依赖关系放入集合 A A A 中,并且弹出这个依赖项(即栈顶词),与Left-Arc正相反
    斯坦福CS224N学习笔记-6 依存分析_第5张图片
具体分析过程:

起始状态:栈 σ \sigma σ 中只有一个root节点,缓冲区 β \beta β 中存放了整个句子,集合 A A A 为空。
结束状态:栈 σ \sigma σ 中只剩一个root节点,缓冲区 β \beta β 为空。

下面是对于句子"I ate fish"的分析过程
斯坦福CS224N学习笔记-6 依存分析_第6张图片
斯坦福CS224N学习笔记-6 依存分析_第7张图片

如何确定每一步分析的操作?

尽管上面给出了一个基于转换的弧标准依存分析的过程,但是对于过程中的每个状态,我们应该如何知道去执行哪个操作呢?
答案就是使用一个机器学习分类器,用一个分类器来预测每一步要执行的操作
为了构造这样一个分类器,我们就要收集一些特征,这些特征包括栈顶的词及其词性,缓冲区首部的词及其词性,也包括次栈顶的词及词性,缓冲区第二个词及词性。

依存分析的评估

依存分析所做的工作就是对于句子中的每个词,分析它们是谁的依赖项。我们可以将分析出的结果(Parsed)与从树库中得到的结果(Gold)进行对比,得到依存分析的准确率。

准确率的计算分为两种:一种是仅考虑箭头是否指向了正确的词,而不考虑箭头的标签是否正确,这种准确率称为UAS(unlabelled accuracy score);另一种是既考虑箭头是否正确,又考虑箭头的标签是否正确,这种准确率称为LAS(labelled accuracy score)。
斯坦福CS224N学习笔记-6 依存分析_第8张图片

神经网络依存分析器

采用传统机器学习方法构造的依存分析器在特征整合上花费的时间代价很高,所以可以采用神经网络来构造依存分析器,只需要将词向量以及词的一些属性输入到模型中,速度很快
每个单词使用分布式表示来得到一个d-维的稠密向量,同时对应的词性以及依赖关系也用d-维向量表示,并和前面的词向量进行连接。
斯坦福CS224N学习笔记-6 依存分析_第9张图片
模型结构如下图所示,使用softmax来预测概率并计算交叉熵误差来进行反向传播。
斯坦福CS224N学习笔记-6 依存分析_第10张图片
由于这种方法不会进行特征整合,因此速度很快,准确率也很优秀。
斯坦福CS224N学习笔记-6 依存分析_第11张图片

你可能感兴趣的:(学习笔记,人工智能,深度学习,神经网络,自然语言处理)