第十五篇:依存语法Dependency Grammar

Posted flying_1314

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第十五篇:依存语法Dependency Grammar相关的知识,希望对你有一定的参考价值。

目录

上下文无关语法(回顾)

依存语法

 为什么?

大纲

依存语法基础

依赖关系

Universal Dependency

问答QA

信息抽取

CFG 怎么样

依赖与组成

依赖树的属性

投影性projective

Projectivity

Treebank转换

基于转换的解析

依存解析

注意事项

基于转换的解析:直觉

依赖标签

正确的行动?

解析模型

解析为分类

分类器

基于图的解析

优势

例子

最后


上下文无关语法(回顾)

• CFG 假设有一个组成/成分树来标识句子中的短语
‣ 基于这些短语可以互换(例如,将一个 NP 换成另一个 NP)并保持语法性的想法

依存语法

• 依赖语法提供了一种更简单的方法
    ‣ 描述词对之间的关系
    ‣ 即在中心词和中心词之间
    ‣ 例如 (首选,dobj,飞行)

 为什么?

• 更好地处理形态丰富且词序相对自由的语言
‣ CFG 需要为短语可能出现的每个可能位置制定单独的规则
• 中心词依赖关系类似于单词之间的语义关系
‣ 更适用于应用:共指解析、信息提取等

大纲

• 依存语法基础
• 基于转换的解析
• 基于图的解析

依存语法基础

依赖关系

• 捕捉以下之间的语法关系:
    ‣ Head = 中心词
    ‣ 依赖 = 支持词
• 语法关系 = 主语、直接宾语等
• 针对不同语言提出了许多依赖理论和分类法
• Universal Dependency:一个框架,用于创建一组在计算上有用且跨语言的依赖关系

Universal Dependency

问答QA

• 依赖树更直接地代表了句子的核心:谁对谁做了什么?
    ‣ 由动词节点上的链接事件捕获

信息抽取

• “Brasilia, the Brazilian capital, was founded in
1960.”
→ capital(Brazil, Brasilia)
→ founded(Brasilia, 1960)
• 依赖树简洁地捕捉关系

CFG 怎么样

• 组成树也可以提供类似的信息
• 但它需要使用寻头规则进行一些提炼

依赖与组成

• 依赖树
    ‣ 每个节点都是一个词标记
    ‣ 选择一个节点作为根节点
    ‣ 有向边链接头和它们的从属
• 选区树
    ‣ 形成层次树
    ‣ 单词标记是叶子
    ‣ 内部节点是“组成短语”,例如 NP
• 两者都使用词性标注

依赖树的属性

• 每个词都有一个中心词(父词)
• 有一个根节点
• 从词根到每个词都有唯一的路径
• 所有弧都应该是投影的

投影性projective

• 如果从中心词到位于中心词和从属词之间的每个词都存在路径,则弧是射影的
• 如果所有弧都是投影的,则依赖树是投影的
• 换句话说,如果可以在没有交叉边的情况下绘制依存树,则它是投影的
• 大多数句子都是投射性的,但也有例外
• 在词序灵活的语言中很常见

Projectivity

下图,是projective的依存树

下图,则不是projective的依存树,有交叉

如果一棵依存树的每条边都满足Projective性质,那么这棵树就满足Projective性质。比如上图有一条从flight(head)到was的边,它们之间包含3个单词”this morning which”,flight有到which的路径(flight->was->which),但是flight到”this”和”morning”都没有路径可达。因此这条边不满足Projective。

Treebank转换

• 一些依赖树库(捷克语、阿拉伯语、丹麦语……)
• 许多组成树库
• 有些可以转换为依赖项
• 从组成树生成的依赖树始终是投影的
• 主要思想:识别组成结构中的头依赖关系以及相应的依赖关系
    ‣ 使用各种启发式方法,例如寻头规则
    ‣ 经常需要手动修正

基于转换的解析

依存解析

• 为给定的输入句子找到最佳结构
• 两种主要方法:
    ‣ 基于转换:自底向上贪婪法
    ‣ 基于图:使用节点/边编码问题并使用图论方法找到最佳解决方案

注意事项

• 基于转换的解析器只能处理投影依赖树!
• 不太适用于交叉依赖常见的语言

基于转换的解析:直觉

• 从左到右处理单词
• 维护两种数据结构
‣ Buffer:待处理的输入词
‣ Stack:存储正在处理的单词

• 在每一步,执行以下 3 个操作之一:
    ‣ Shift:将单词从缓冲区移动到堆栈
    ‣ Left-Arc:将当前词指定为栈中前一个词的头部


    ‣ Right-Arc:将前一个词指定为堆栈中当前词的头

依赖标签

• 为简单起见,我们省略了依赖关系的标签
• 在实践中,我们使用依赖标签参数化 left-arc 和 rightarc 动作:
    ‣ 例如 left-arc-nsubj 或 right-arc-dobj
• 将操作列表扩展到 > 3 种类型

正确的行动?

• 我们假设有一个预言机告诉我们每一步的正确操作
• 给定一个依赖树,oracle 的作用是生成一系列基本事实动作

最后的操作给大家参考

解析模型

• 然后我们训练一个监督模型来模仿预言机的动作
    ‣ 在每一步学习要采取的正确行动(由预言机给出)
    ‣ 在测试时,可以使用训练好的模型来解析一个句子来创建依赖树

解析为分类

• 输入:
    ‣ 堆栈(top-2 元素:s1 和 s2)
    ‣ 缓冲区(第一个元素:b1)
• 输出
    ‣ 3 类:shift, left-arc, or, right-arc
• 特征
    ‣ 词 (w), 词性 (t)

举例:

• Input features:
    ‣ s1.w = flights
    ‣ s2.w = cancelled
    ‣ s1.t = NNS
    ‣ s2.t = VBD
    ‣ b1.w = to
    ‣ b1.t = TO
    ‣ s1.t ◦s2.t = NNS_VBD
• Output label: shift

分类器

• 传统上 SVM 效果最好
• 如今,深度学习模型是最先进的
• 弱点:基于贪婪搜索的局部分类器
• 解决方案:
    ‣ 波束搜索:跟踪前 N 个最佳动作
    ‣ 动态预言机:在训练期间,偶尔使用预测动作
    ‣ 基于图的解析器


基于图的解析

• 给定一个输入句子,构建一个全连接、加权、有向图
• 顶点:所有单词
• 边:依赖于头部的弧
• 权重:基于训练数据的分数(经常观察到的关系获得更高的分数)
• 目标:找到最大生成树(Kruskal 算法)

优势

• 可以生成非投影树
    ‣ 对英语来说没什么大不了的
    ‣ 但对许多其他语言很重要
• 给整棵树打分
    ‣ 避免做出贪婪的本地决策,如基于转换的解析器
    ‣ 更好地捕获长依赖

例子

• 警告:树可能包含循环
• 解决方案:需要做清理以去除循环(Chu-Liu-Edmonds 算法) 

最后

• 依赖解析是对组成解析的一种引人注目的、替代的表述
‣ 边编码词-词句法和语义关系
• 基于转换的解析
• 基于图的解析

OK,今天的内容到这里了,辛苦大家观看,有问题随时评论交流!

以上是关于第十五篇:依存语法Dependency Grammar的主要内容,如果未能解决你的问题,请参考以下文章

Python开发第十五篇模块的导入

开始写游戏 --- 第十五篇

第十五篇 和谐

第十五篇 Inception V4——论文翻译

第十五篇:JavaScript 之 Dom操作

C++从入门到入土第十五篇:list的模拟实现