第十五篇:依存语法Dependency Grammar
Posted flying_1314
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第十五篇:依存语法Dependency Grammar相关的知识,希望对你有一定的参考价值。
目录
上下文无关语法(回顾)
• 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的主要内容,如果未能解决你的问题,请参考以下文章