斯坦福NLP课程 | 第16讲 - 指代消解问题与神经网络方法

本文涉及的产品
全局流量管理 GTM,标准版 1个月
NLP自然语言处理_高级版,每接口累计50万次
云解析DNS,个人版 1个月
简介: NLP课程第16讲介绍了共指消解(指代消解) 的定义、作用和应用、指代检测、指代对模型、指代排序模型 、指代聚类模型 、效果评估等。

ShowMeAI研究中心

作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI
教程地址http://www.showmeai.tech/tutorials/36
本文地址http://www.showmeai.tech/article-detail/253
声明:版权所有,转载请联系平台与作者并注明出处

收藏ShowMeAI查看更多精彩内容


指代消解问题与神经网络方法
ShowMeAI斯坦福CS224n《自然语言处理与深度学习(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了GIF动图!视频和课件等资料的获取方式见文末


引言

指代消解

授课计划

授课计划

  • What is Coreference Resolution? / 什么是共指消解(指代消解)
  • Applications of coreference resolution / 共指消解应用
  • Mention Detection / 指代检测
  • Some Linguistics: Types of Reference Four Kinds of Coreference Resolution Models
  • Rule-based (Hobbs Algorithm) / 基于规则的方式
  • Mention-pair models / 指代对模型
  • Mention ranking models / 指代排序模型

    • Including the current state-of-the-art coreference system!
  • Mention clustering model / 指代聚类模型
  • Evaluation and current results / 效果评估

1.共指消解定义

什么是共指消解(指代消解)

  • 识别所有涉及到相同现实世界实体的 mention (指代)
  • He, her 都是实体的提及 mentions of entities (实体指代)

2.共指消解应用

2.1 应用

应用

  • 全文理解

    • 信息提取,回答问题,总结,…
    • 他生于1961年 (谁?)
  • 机器翻译

    • 语言对性别,数量等有不同的特征
  • 对话系统

2.2 指代消解两个步骤

Coreference Resolution两个步骤

  • ① 指代的检测(简单)
  • ② 指代的聚类(难)

3.指代检测

3.1 指代检测

Mention Detection (检测)

  • Mention:指向某个实体的一段文本

三种 mention

  • Pronouns 代词

    • I, your, it, she, him, etc.
  • Named entities 命名实体

    • People, places, etc.
  • Noun phrases 名词短语

    • “a dog,” “the big fluffy cat stuck in the tree”

Mention Detection

  • 指某个实体的文本范围
  • 检测:使用其他NLP系统
  • Pronouns 代词

    • 【I, your, it, she, him, etc.】因为代词是 POS 检测结果的一种,所以只要使用 POS 检测器即可
  • Named entities 命名实体

    • 【People, places, etc.】Use a NER system
  • Noun phrases 名词短语

    • 【“a dog,” “the big fluffy cat stuck in the tree”】Use a parser (尤其依存解析器)

3.2 指代检测:并非很简单

Mention Detection:并非很简单

  • 将所有代词、命名实体和 NPs 标记为 mentionover-generates mentions
  • 下方是否是 mention?

    • lt is sunny
    • Every student
    • No student
    • The best donut in the world
    • 100 miles

3.3 如何处理这些不好的指代

如何处理这些不好的mention?

  • 可以训练一个分类器过滤掉 spurious mentions
  • 更为常见的:保持所有 mentions 作为 candidate mentions
  • 在你的 coreference 系统运行完成后,丢弃所有的单个mention (即没有被标记为与其他任何东西coreference的)

3.4 我们能不用繁琐的流水线系统吗?

我们能不用繁琐的流水线系统吗?

  • 我们可以训练一个专门用于指代检测的分类器,而不是使用POS标记器、NER系统和解析器
  • 甚至端到端共同完成指代检测和指代消解,而不是两步

3.5 首先基于语言学

首先,来点语言学

  • 当两个指代指向世界上的同一个实体时,被称为 coreference

    • Barack Obama 和 Obama
  • 相关的语言概念是 anaphora (回指):下文的词返指或代替上文的词

    • anaphor 的解释在某种程度上取决于 antecedent 先行词的解释
    • Barack Obama said he would sign the bill

3.6 前指代 vs 共指

前指代 vs 共指

  • 命名实体的 coreference

3.7 并非所有前指代都是指代

并非所有前指代都是指代

  • Not all noun phrases have reference (不是所有的名词短语都有指代)

    • Every dancer twisted her knee
    • No dancer twisted her knee

每一个句子有三个NPs;因为第一个是非指示性的,另外两个也不是

3.8 前指代 vs 后指

Anaphora vs Cataphora

  • 并非所有anaphora关系都是coreference

We went to see a concert last night. The tickets were really expensive.

  • 这被称为 bridging anaphora (桥接回指)

前指代 vs 后指

  • 通常先行词在 anaphor (回指) (如代词)之前,但并不总是

3.9 后指代

Cataphora

3.10 四种共指模型

四种共指模型

  • 基于规则的
  • mention 对
  • mention 排序
  • 聚类

3.11 传统代词回指消解:霍布斯朴素算法

传统代词回指消解:霍布斯的朴素算法

  • 该算法仅用于寻找代词的参考,也可以延伸到其他案例
  • 1.从名词短语开始,立即支配代词。
  • 2.上树到第一个 公式公式。把这个叫做 公式,路径叫做 公式
  • 3.从 公式公式 的左边,从左到右,宽度优先遍历 公式 下的所有分支。提出任何在它和 公式 之间有 公式公式公式 作为先行词。
  • 4.如果 公式 是句子中最高的 公式,则按最近的顺序遍历前面句子的解析树。从左到右遍历每棵树,宽度优先。当遇到 公式 时,建议作为先行词。如果 公式 不是最高节点,请转至步骤公式

传统代词回指消解:霍布斯的朴素算法

  • 5.从节点 公式,向上到树的第一个 公式公式。叫它 公式,路径 公式
  • 6.如果 公式公式,路径 公式公式 来自 公式 的非首语短语 (一个说明符或附加语,如所有格、PP、同位语或相关从句),建议 公式 作为先行词。
  • 7.以从左到右、宽度优先的方式,遍历路径左侧 公式下方的所有分支。提出任何遇到的 公式作为先行条件。
  • 8.如果 公式公式 节点,则遍历路径右侧 公式 的所有分支,但不要低于遇到的任何 公式公式。命题 公式 作为先行词。
  • 9.转至步骤公式

3.12 霍布斯朴素算法示例

霍布斯的朴素算法示例

  • 这是一个很简单、但效果很好的 coreference resolution的 baseline

3.13 基于知识的代词共指

基于知识的代词共指

  • 第一个例子中,两个句子具有相同的语法结构,但是出于外部世界知识,我们能够知道倒水之后,满的是杯子 (第一个 it 指向的是 the cup),空的是壶 (第二个 it 指向的是 the pitcher)
  • 可以将世界知识编码成共指问题

3.14 霍布斯朴素算法:评价

霍布斯朴素算法:评价

4.指代对模型

4.1 Mention Pair指代对共指模型

指代对共指模型

4.2 指代对共指模型

指代对共指模型

  • 训练一个二元分类器,为每一对 mention 分配一个相关概率 公式

    • 例如,为寻找 she 的 coreference,查看所有候选先行词 (以前出现的 mention ),并确定哪些与之相关
  • she 有关系吗?
  • Positive 例子:希望 公式 接近 公式
  • Negative 例子:希望 公式 接近公式

4.3 指代对共指模型训练

指代对共指模型训练

  • 文章中有 公式 个 mention
  • 如果 公式公式 是coreference,则 公式,否则 公式
  • 只是训练正常的交叉熵损失 (看起来有点不同,因为它是二元分类)

公式

  • 公式:遍历 mentions
  • 公式:遍历候选先行词 (前面出现的 mention)
  • 公式:coreference mention pairs 应该得到高概率,其他应该得到低概率

4.4 指代对共指模型测试阶段

指代对共指模型测试阶段

  • coreference resolution是一项聚类任务,但是我们只是对 mentions 对进行了评分……该怎么办?
  • 选择一些阈值 (例如公式),并将 公式 在阈值以上的 mentions 对之间添加coreference 链接
  • 利用传递闭包得到聚类
  • coreference 连接具有传递性,即使没有不存在 link 的两者也会由于传递性,处于同一个聚类中
  • 这是十分危险的。如果有一个 coreference link 判断错误,就会导致两个 cluster 被错误地合并了

4.5 指代对共指模型缺点

指代对共指模型缺点

  • 假设我们的长文档里有如下的 mentions
  • 许多 mentions 只有一个清晰的先行词

    • 但我们要求模型来预测它们
  • 解决方案:相反,训练模型为每个 mention 只预测一个先行词

    • 在语言上更合理
  • 根据模型把其得分最高的先行词分配给每个 mention
  • 虚拟的 NA mention 允许模型拒绝将当前 mention 与任何内容联系起来( singleton or first mention)
  • she 最好的先行词?
  • Positive 例子:模型必须为其中一个分配高概率 (但不一定两者都分配)
  • 对候选先行词的分数应用softmax,使概率总和为1
  • 只添加得分最高的 coreference link

5.指代排序模型

5.1 coreference 模型:训练

coreference 模型:训练

  • 我们希望当前 mention 公式 与它所关联的任何一个候选先行词相关联。
  • 在数学上,我们想要最大化这个概率

公式

  • 公式:遍历候选先行词集合
  • 公式:即 公式公式 是 coreference 关系的情况
  • 公式:我们希望模型能够给予其高可能性
  • 将其转化为损失函数:

公式

  • 公式:遍历所有文档中的指代
  • 公式:使用负对数和似然结合构建损失
  • 该模型可以为一个正确的先行词产生概率 公式,而对其他所有产生较低的概率,并且总和仍然很大

5.2 指代排序模型预测阶段

Mention Ranking Models:预测阶段

  • 和 mention-pair 模型几乎一样,除了每个 mention 只分配一个先行词

5.3 如何计算概率

我们如何计算概率?

A.非神经网络的统计算法分类器
B.简单神经网络
C.复杂神经网络像LSTM和注意力模型

5.4 A.非神经网络方法:特征

A. NonNeural Coref Model:特征

  • 人、数字、性别
  • 语义相容性
  • 句法约束
  • 更近的提到的实体是个可能的参考对象
  • 语法角色:偏好主语位置的实体
  • 排比

5.5 B.神经网络模型

B. Neural Coref Model

  • 标准的前馈神经网络

    • 输入层:词嵌入和一些类别特征

Neural Coref Model:输入

  • 嵌入

    • 每个 mention 的前两个单词,第一个单词,最后一个单词,head word,…

      • head word是 mention 中 最重要 的单词—可以使用解析器找到它
      • 例如:The fluffy cat stuck in the tree
  • 仍然需要一些其他特征

    • 距离
    • 文档体裁
    • 说话者的信息

5.7 C.端到端模型

C. 共指消歧端到端模型

  • 当前最先进的模型算法 (Kenton Lee et al. from UW, EMNLP 2017)
  • Mention 排名模型
  • 改进了简单的前馈神经网络

    • 使用LSTM
    • 使用注意力
    • 端到端的完成 mention 检测和coreference

      • 没有 mention 检测步骤!
      • 而是考虑每段文本 (一定长度) 作为候选 mention

        • a sapn 是一个连续的序列

共指消歧端到端模型

  • 首先,将文档里的单词使用词嵌入矩阵和字符级别 CNN 一起构建为词嵌入
  • 接着,在文档上运行双向 LSTM
  • 接着,将每段文本 公式公式公式 表示为一个向量

    • sapn 是句子中任何单词的连续子句
    • General, General Electric, General Electric said, … Electric, Electric said, …都会得到它自己的向量表示
  • 接着,将每段文本 公式公式公式 表示为一个向量,例如 the postal service

公式

  • 公式公式: sapn 的开始和结束的双向 LSTM 隐状态表示
  • 公式:基于注意力机制的 sapn 内词语的表示
  • 公式:更多的其他特征
  • 公式 是 sapn 的注意力加权平均的词向量

    • 权重向量与变换后的隐状态点乘

公式

  • sapn 内基于softmax的注意力得分向量

公式

  • 使用注意力权重对词嵌入做加权求和

公式

共指消歧端到端模型

  • 为什么要在 sapn 中引入所有的这些不同的项
  • 表征 sapn 左右的上下文
  • 表征 sapn 本身
  • 表征其他文本中不包含的信息

共指消歧端到端模型

  • 最后,为每个 sapn pair 打分,来决定他们是不是 coreference mentions

公式

  • 打分函数以 sapn representations 作为输入

公式

  • 公式:表征向量之间会通过乘法进行交叉
  • 公式:同样也有一些额外的特征

共指消歧端到端模型

  • 为每个 sapn pair 打分是棘手的

    • 一个文档中有 公式 sapns (公式 是词的个数)
    • 公式 的运行时间
    • 所以必须做大量的修剪工作 (只考虑一些可能是 mention 的 sapn )
  • 关注学习哪些单词是重要的在提到(有点像 head word)

6.指代聚类模型

6.1 基于聚类的共指模型

基于聚类的共指模型

  • coreference是个聚类任务,让我们使用一个聚类算法吧

    • 特别是使用 agglomerative 聚类 (自下而上的)
  • 开始时,每个 mention 在它自己的单独集群中
  • 每一步合并两个集群

    • 使用模型来打分那些聚类合并是好的

基于聚类的共指模型

6.2 聚类模型结构

基于聚类的共指模型结构

基于聚类的共指模型结构

  • 首先为每个 mention 对生成一个向量

    • 例如,前馈神经网络模型中的隐藏层的输出
  • 接着将池化操作应用于 mention-pair 表示的矩阵上,得到一个 cluster-pair 聚类对的表示
  • 通过用权重向量与表示向量的点积,对候选 cluster merge 进行评分

6.3 聚类模型:训练

聚类模型:训练

  • 当前候选簇的合并,取决于之前的合并

    • 所以不能用常规的监督学习
    • 使用类似强化学习训练模型

      • 奖励每个合并:coreference评价指标的变化

7.效果评估

7.1 指代模型评估

指代模型评估

  • 许多不同的评价指标:MUC, CEAF, LEA, BCUBED, BLANC

    • 经常使用一些不同评价指标的均值
  • 例如 B-cubed

    • 对于每个 mention,计算其准确率和召回率
    • 然后平均每个个体的准确率和召回率

7.2 系统性能

系统性能

  • OntoNotes数据集:~ 3000人类标注的文档
  • 英语和中文
  • Report an F1 score averaged over 3 coreference metrics

系统性能

7.3 神经评分模型有什么帮助?

神经评分模型有什么帮助?

  • 特别是对于没有字符串匹配的NPs和命名实体。神经与非神经评分

7.4 结论

结论

  • coreference 是一个有用的、具有挑战性和有趣的语言任务

    • 许多不同种类的算法系统
  • 系统迅速好转,很大程度上是由于更好的神经模型

    • 但总的来说,还没有惊人的结果

8.视频教程

可以点击 B站 查看视频的【双语字幕】版本

frameLabelStart--frameLabelEnd

9.参考资料

ShowMeAI系列教程推荐

NLP系列教程文章

斯坦福 CS224n 课程带学详解

ShowMeAI用知识加速每一次技术成长

目录
相关文章
|
1月前
|
机器学习/深度学习 自然语言处理 算法
【从零开始学习深度学习】49.Pytorch_NLP项目实战:文本情感分类---使用循环神经网络RNN
【从零开始学习深度学习】49.Pytorch_NLP项目实战:文本情感分类---使用循环神经网络RNN
|
1天前
|
机器学习/深度学习 人工智能 自然语言处理
自然语言处理(NLP)是人工智能和语言学的一个交叉领域,它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。
自然语言处理(NLP)是人工智能和语言学的一个交叉领域,它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。
6 0
|
1月前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的计算机网络课程试卷生成器附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的计算机网络课程试卷生成器附带文章和源代码部署视频讲解等
18 2
|
2月前
|
JavaScript Java 测试技术
基于ssm+vue.js的数据结构课程网络学习平台附带文章和源代码设计说明文档ppt
基于ssm+vue.js的数据结构课程网络学习平台附带文章和源代码设计说明文档ppt
26 2
|
1月前
|
机器学习/深度学习 算法 PyTorch
【从零开始学习深度学习】50.Pytorch_NLP项目实战:卷积神经网络textCNN在文本情感分类的运用
【从零开始学习深度学习】50.Pytorch_NLP项目实战:卷积神经网络textCNN在文本情感分类的运用
|
2月前
|
JavaScript Java 测试技术
Java项目基于ssm+vue.js的网络类课程思政学习系统附带文章和源代码设计说明文档ppt
Java项目基于ssm+vue.js的网络类课程思政学习系统附带文章和源代码设计说明文档ppt
21 0
|
2月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的网络类课程思政学习系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的网络类课程思政学习系统的详细设计和实现(源码+lw+部署文档+讲解等)
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
探索未来AI技术的前沿——自然语言处理的发展与应用
本文将深入探讨自然语言处理技术在人工智能领域中的重要性和应用前景。通过分析当前自然语言处理技术的发展趋势和实际应用案例,揭示了其在改善用户体验、提升工作效率以及推动产业创新方面的巨大潜力。
|
1天前
|
机器学习/深度学习 自然语言处理 算法
NLP技术在聊天机器人中的应用:技术探索与实践
【7月更文挑战第13天】NLP技术在聊天机器人中的应用已经取得了显著的成果,并将在未来继续发挥重要作用。通过不断探索和创新,我们可以期待更加智能、自然的聊天机器人的出现,为人类生活带来更多便利和乐趣。
|
7天前
|
机器学习/深度学习 自然语言处理 监控
NLP技术有哪些主要任务?
【7月更文挑战第8天】NLP技术有哪些主要任务?
16 4

相关实验场景

更多