依存句法分析
• 17 min read • 3236 words
Tags: Deep Learning NLP
Categories: NLP
生成:Gemini-2.5-pro, 整理:fyerfyer
依存句法分析
1. 相关概念
依存结构
- 关系:依存关系是不对称的,一个词是核心,另一个词是修饰或依附于它。
- 我们用箭头来表示这种关系,箭头从核心词 (head) 指向修饰词 (dependent)。
- 核心词 (Head):也被称为“支配者 (governor)”,是被修饰的词。
- 修饰词 (Dependent):也被称为“从属 (subordinate)”,是用来修饰或补充核心词的。
- 树状结构:这些依存关系最终会构成一个树状图。
- 关系类型 (Typed Dependencies):每个箭头(依存关系)都可以有一个标签,说明这是什么类型的关系,比如 nsubj (名词主语), dobj(直接宾语), amod (形容词修饰语) 等。
- ROOT节点:为了保证每个词都有一个“核心词”,通常会加入一个虚拟的 ROOT 节点,作为整个句子的最终“老大”。
依存句法分析
依存句法分析的目标就是输入一句话,然后自动地为这句话生成上面依存树结构。它分为两个子问题:
- 学习:我们先准备一些已经由语言学家手动标注好依存树的句子(训练集 )。然后,用这些数据去训练一个句法分析模型 。
- 分析 (Parsing):模型训练好后,给它一个全新的句子 ,让它利用学到的知识,去预测并生成这个新句子的最佳依存树。
2. 基于转移的依存分析
在基于转移的依存分析中,我们把构建依存树的过程,想象成一个状态机的流程。这个状态机有一系列预设的动作 (Transitions),比如“把下一个词拿进来分析”、“确定左边词和右边词的关系”等。于是对应的子问题拆解如下:
- 学习:学习过程就是训练一个模型,让它在每一步都能预测出应该执行哪个动作。
- 分析:分析过程就是根据训练好的模型,一步步执行预测出的动作,直到整个句子的依存树构建完成。
贪心确定性转移分析
贪心确定性转移分析是基于转移方法的一种具体实现。在每一步,模型只选择当前看起来最好的那个动作,而不去考虑这个选择对后续步骤的影响。并且一旦做出了一个动作,就不能反悔或撤销。
这个系统的核心组件如下:
- 状态 (State):在分析过程中的任何一个瞬间,系统都处于一个状态 。这个状态由三个变量描述:
- : 一个栈。可以想象成一个“待处理区”,用来临时存放正在分析关系的词。
- : 一个缓冲区。可以想象成一个“等待区”,按顺序存放着句子里还未处理的词。
- : 一个依存弧集合。可以想象成“成果记录本”,用来存放已经确定下来的依存关系。
- 初始状态:分析刚开始时,栈里只有一个虚拟的 ROOT 节点,缓冲区里是句子的所有单词, 是空的。
- 终止状态:分析结束时,缓冲区必须是空的。
- 三种动作 :这是最关键的部分,模型在每一步就是要从这三个
- Shift动作:把缓冲区等待区的第一个词,移动到栈待处理区的顶部。
- 当还不确定栈顶部的词和缓冲区里的词有什么关系时,先把新词拿进来再说。
- Left-Arc动作:在栈的顶部两个词 和 之间,添加一个从 指向 的依存关系 。然后,把修饰词 从栈中移除(因为它已经找到了它的核心词,任务完成了)。
- 当确定栈中第二个词 是顶部词 wj 的修饰词时执行。
- Right-Arc动作:在栈的顶部两个词 和 之间,添加一个从 指向 的依存关系 。然后,把修饰词 从栈中移除。
- 当确定栈中顶部词 是第二个词 的修饰词时执行。
- Shift动作:把缓冲区等待区的第一个词,移动到栈待处理区的顶部。
这个实现巧妙地将树构建问题转换成了一系列简单的分类问题,因而可以用机器学习方法来解决。
特征选择
我们可以根据模型复杂度的需要,灵活地定义神经网络的输入。对于一个给定的句子S,我们用来决策的特征(features)通常包含以下几类信息的一个子集:
- 词特征 (Sword):来自栈顶和缓冲队首的一些词(以及它们已经拥有的子节点)的向量表示。
- 模型有时也关心它们已经连接上的子节点。比如,如果栈顶的词是一个动词,并且它已经有了一个主语,这对接下来的决策很重要。Sword指的就是把这些选出来的具体单词转换成词向量。
- 词性特征 (Stag):句子中一些词的词性。词性是一个小的、离散的集合。
- 词性提供了非常强大的语法泛化能力。模型可以学到“一个动词后面很可能跟一个名词作宾语”,而不需要去学习每一个具体动词和名词的搭配。
- 依存标签特征 (Slabel):句子中一些词已经获得的依存关系标签。这些标签也是一个小的、离散的集合,用来描述具体的依存关系,例如 L = {形容词修饰, 时间修饰, 名词性主语, 从句主语, 直接宾语, ...}。
- 这个特征描述了已经构建出的部分语法树的结构。
特征的向量化
对于上述的每一种特征(词、词性、依存标签),我们都有一个对应的嵌入矩阵。这个矩阵把特征的独热编码映射成一个 维的稠密向量。
- 词特征的完整嵌入矩阵 ,它的维度是 ( 是向量维度, 是词典大小)。
- 词性的嵌入矩阵 ,维度是 (是不同词性的总数)。
- 依存标签的嵌入矩阵是 ,维度是 (是不同依存标签的总数)。
最终输入
最后,我们把从每种特征集合中选出的元素数量,分别记为 , , 。我们将从嵌入矩阵找到的 个向量拼接成一个单一的向量,作为神经网络的输入层。