点击上方,选择星标置顶,每天给你送干货

阅读大概需要10分钟

跟随小博主,每天进步一丢丢

作者: 龚俊民(昵称: 除夕)

学校: 新南威尔士大学

单位:Vivo AI LAB 算法实习生

方向: 自然语言处理和可解释学习

知乎: https://www.zhihu.com/people/gong-jun-min-74

前言

在所有的 NLP 任务中,有一些任务比较例外。它的输出不属于一个序列,一个类别,或者是多个序列,多个类别,而可能是一个图、或是一棵树,一种数据结构。每个 NLP 任务都有属于自己的领域知识和求解框架。但这里我们主要来说一下共指解析的解决框架和深度学习的做法。

共指解析的目标是要找出文中指代相同的代指。图中的"它"指的是什么呢?它是指拳头,"他"的拳头是谁的拳头呢?指的是钟佳播的全头。如果是一个 QA 模型,它就只会从字面意思去回答问题。把会锤倒高墙的东西变成代词"它",而不是这个"它"实际指代的对象。

共指解析是一个非常重要的问题。有一个叫 winograd 的比赛,希望取代图灵测试。在图灵测试中,AI 可以有太多方法去狡猾地欺骗人类。有一些话术,可以让不聪明的机器伪装成聪明的机器。winograd 是一个 QA 问题。比如它会问,这个奖杯放不进行李箱中,因为它太大了。问:什么太大了?对机器来说,这不是一个容易的问题。再比如,它还会问,这个奖杯放不进行李箱中,因为它太小了。问:什么太小了?要回答这种问题,需要机器对世界知识有一定的理解,才有可能得到正确的答案。

共指解析真正在做的是,通过一些文字片段,去指涉场景中对应的实体。文中那些建立场景理念的词汇,就叫作 mention。我们把两个 mention 找到它们是同一个实体的过程,叫作共指 corefer。我们目标是找出哪些 mention 是共指,哪些 mention 不是共指。对于先出现在共指中的 mention,称之为先行词 antecedent,后出现的则叫作 anaphor,没有共指单独出现的 mention 叫作 singleton。

一个共指解析的任务要做几件事情。一是要把所有的 mention 都标注出来。有时 mention 的定义是比较模糊的。一般我们会有一个语料参照,要把哪些作为 mention,哪些忽略。这些 mention 与 mention 之间,有时候会有边界重叠包含关系。比如他的拳头整体是一个 mention,它又可以是另外一个 mention。这些 mention 要被分成不同的簇类。相同簇的 mention 指代的对象会是同一个。如果是复数要怎么办呢?一般我们会单独作为新的实体簇来划分。它与 NER 不同在。NER 找的实体几乎不存在交叉。

第一步,针对找出 mention 这个问题,我们需要有一个二分类器。它的输入是一串 tokens 序列,输出是这一串 tokens 是不是 mention。Mention Detection 与分割和填槽有一点点不同。这个二分类器,输入是要一整个 span,决定它是不是 mention。之所以要这么做,是因为在做 mention detection 的时候,mention 之间会有互相包含的关系。假如有一个长度为 N 的序列,我们需要找出 N(N-1)/2 的可能 span 组合输入给模型去分类。这是一个有监督学习。监督信息来自于人工标注的 mention 作为正例,和未标注到的 token 作为负例。

第二步,是思考哪些 mention 应该要放在同一个类别簇中。这也是用一个二分类器,输入是两个 mention,输出是这两个 mention 有无共指的关系。如果我们有 K 个 mentions,则两两组合有 K(K-1)/2 次分类。

我们可以把上面两个步骤联合起来,只用一个分类器来端对端地训练。输入分类器的是两个 span,若二者是mention 且共指,则分类器输出 1。反之两个 span 任意一个不是 mention,或不共指,则输出0。它的复杂度为 O(N^4)。当 N 稍微大一点时,算法性能就会受限。

这个模型实际是怎样的呢?输入序列会先丢给预训练语言模型,得到每个 token 的嵌入。接着,我们会通过一个特别的模块专门把 span 提取出来,聚合成一个向量。接下来,我们会有一个 mention detection 的模块,输入一个向量,输出判断它是不是 mention。与此同时,两个 mention 向量还会输入给一个 mention pair 的模块,判断它们是不是共指。最后我们把三个分数直接加起来,作为最终输出。

span extraction 一种常见的做法是,假如一个 span 中有四个 embedding,我们先会把它的开头和结尾取出来,再把四个向量取平均,或把它们两两做自注意力,来做加权平均,得到注意过后的向量。比如湖边小屋,真正决定它是 mention 的词在小屋上。模型通过自动学得在小屋这类词上做更多的关注。从而获得一定的泛化能力,学到海边小屋,街边小屋,森林小屋,都是 mention。

如果我们要用这种端对端的方式训练,怎样把它的运算量变得更小呢?推断的时候,我们可以先做 mention detection,跑 N(N-1)/2 次,找出 K 个 mention。再去用 K 个 mention 两两分类看是不是共指。由于 K << N,后面的分类计算量大大减小了。另一个技巧是限制 span 的长度,比如最多不超过 10 个 tokens。这样复杂度就成了固定的数值。

各式各样抽取词嵌入的方法包括了 GLoVe + LSTM,ELMo 和 BERT。图中,小括号代表一个 mention。颜色越深代表注意的权重越大。模型是能够判断在一段 span 的 tokens 中,最重要的是哪些 token。像 fire 和 blaze 指的是同一个东西。factory 和 building 也指的是同一个东西。不过模型也有些 case 把握的不是很好,比如会把 region 和 area 看成是同一个指代。其中有一些比较难的case,需要模型理解一些常识才能去解。这就不是单纯读这篇文章就可以解决的问题。

共指解析可以怎么应用呢?有一种 Seq2seq 的方法,可以用来考虑聊天机器人容易忽略对话历史的问题。因为对话中很容易出现各种指代。Seq2Seq 的共指解析模型就会把上下文中的代指,解析成其实际指代。就能够让模型更好地考虑上下文历史。

在共指解析中,我们不是真的做聚类,而是把指代相同的放在同一个簇中。但对于全局信息,比如 Lee 指代 Mr. Lee,she 指代 Lee。它们在两两共指的时候是合理的。但三个放在一起就存在矛盾了。因此我们需要考虑簇类的层级关系。目前大部分的共指解析都是有监督的。EMNLP 19 里,有人想出了一种无监督的方法。通过 MASK 代词"他"的方式,让模型去预测这个"他"是什么词汇,从而找出共指的 mention。当然,单纯这样做会有一些问题,比如 he 只是一个 token。把他丢到 BERT 中,它也只会补一个 token。这算是一个未解的问题。


该笔记来自于李宏毅视频,视频地址为:https://link.zhihu.com/?target=https%3A//www.youtube.com/watch%3Fv%3D2BemmceHKOU%26feature%3Dyoutu.be

Reference

  • 李宏毅 《人类语言处理 2020》Deep Learning for Coreference Resolution

  • [Lee, et al., EMNLP’17] Kenton Lee, Luheng He, Mike Lewis, Luke Zettlemoyer, End-to-end Neural Coreference Resolution, EMNLP, 2017

  • [Su, et al., ACL’19] Hui Su, Xiaoyu Shen, Rongzhi Zhang, Fei Sun, Pengwei Hu, Cheng Niu, Jie Zhou, Improving Multi-turn Dialogue Modelling with Utterance ReWriter, ACL, 2019

  • [Wu, et al., ACL’20] Wei Wu, Fei Wang, Arianna Yuan, Fei Wu, Jiwei Li, Coreference Resolution as Query-based Span Prediction, ACL, 2020

  • [Lee, et al., NAACL’18] Kenton Lee, Luheng He, and Luke Zettlemoyer, Higher- order coreference resolution with coarse-to-fine inference, NAACL, 2018

  • [Joshi, et al., EMNLP’19] Mandar Joshi, Omer Levy, Luke Zettlemoyer, Daniel Weld, BERT for Coreference Resolution: Baselines and Analysis, EMNLP, 2019

  • [Kantor, et al., ACL’19] Ben Kantor, Amir Globerson, Coreference Resolution with Entity Equalization, ACL, 2019

  • [Kocijan, et al., EMNLP’19] Vid Kocijan, Oana-Maria Camburu, Ana-Maria Cretu, Yordan Yordanov, Phil Blunsom, Thomas Lukasiewicz, WikiCREM: A Large Unsupervised Corpus for Coreference Resolution, EMNLP, 2019

添加个人微信,备注:昵称-学校(公司)-方向,即可获得

1. 快速学习深度学习五件套资料

2. 进入高手如云DL&NLP交流群

记得备注呦

一文详解自然语言处理任务之共指消解相关推荐

  1. 0904 SRTP SR 包文详解

    0904 SRTP SR 包文详解 RC(report content) 指整个SR包文的Receive Report Block 块的个数 SSRC of sender 发送者的SRC,以便让接收者 ...

  2. 一文详解 ChatGPT:背后的技术,数据,未来发展

    文章目录 一文详解 ChatGPT ChatGPT背后的技术 基于 Transformer 的预训练语言模型 提示学习与指令精调 思维链(Chain of Thought,COT) 基于人类反馈的强化 ...

  3. 一文详解JavaBean 看这篇就够了

    一文详解JavaBean 看这篇就够了 JavaBean的历史渊源 JavaBean的定义(通俗版) JavaBean应用 < jsp:useBean > < jsp:getProp ...

  4. 【卷积神经网络结构专题】一文详解AlexNet(附代码实现)

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! [导读]本文是卷积神经网络结构系列专题第二篇文章,前面我们已经介绍了第一个真正意义 ...

  5. 一文详解 YOLO 2 与 YOLO 9000 目标检测系统

    一文详解 YOLO 2 与 YOLO 9000 目标检测系统 from 雷锋网 雷锋网 AI 科技评论按:YOLO 是 Joseph Redmon 和 Ali Farhadi 等人于 2015 年提出 ...

  6. 一文详解决策树算法模型

    AI有道 一个有情怀的公众号 上文我们主要介绍了Adaptive Boosting.AdaBoost演算法通过调整每笔资料的权重,得到不同的hypotheses,然后将不同的hypothesis乘以不 ...

  7. 「软件项目管理」一文详解软件配置管理计划

    一文详解软件配置管理计划 前言 一.配置管理概述 1. 配置管理(SCM)定义 2. 软件配置项目(SCI) 3. 基线 4. 软件配置控制委员会(SCCB) 二.软件配置管理过程 1. 管理过程 2 ...

  8. 「软件项目管理」一文详解软件项目质量计划

    一文详解软件项目质量计划

  9. 「软件项目管理」一文详解软件项目管理概述

    一文详解软件项目管理概述

  10. OpenCV-Python实战(12)——一文详解AR增强现实

    OpenCV-Python实战(12)--一文详解AR增强现实 0. 前言 1. 增强现实简介 2. 基于无标记的增强现实 2.1 特征检测 2.2 特征匹配 2.3 利用特征匹配和单应性计算以查找对 ...

最新文章

  1. OpenCV方形检测Square Detection的实例(附完整代码)
  2. Oracle字符分隔函数(split)
  3. en45545防火标准_揭秘:600岁故宫如何防火?
  4. iframe vue 前进 后退_vue常见面试题
  5. ubuntu系统写路由指令_在Ubuntu中如何查看网络路由表详解,
  6. VB.NET判断一个路径的文件是否存在
  7. sql server book
  8. 视频分析服务器作用,如何选择合适的视频分析解决方案?
  9. 【优化算法】缎面弓箭鸟优化(SBO)【含Matlab源码 1432期】
  10. 《大师谈游戏设计——创意与节奏》【笔记二】
  11. 打造自己的博客(一)利用VuePress完成博客整体搭建,并支持评论和自动发布
  12. PyTorch学习(二):Transform
  13. [网络诈骗]奈几利亚(奈及利亚), E-Mail 骗术
  14. python自加自减_自增自减运算符详解
  15. 安卓手机虚拟键盘和position:fixed问题
  16. 肩周炎的自我运动疗法
  17. 用C语言求斐波那契数1,1,2,3,5,8......
  18. kubectl logs 常用命令
  19. 快速学习Java8新特性第七讲——Optional类
  20. 吴忌寒入选福布斯2019最年轻亿万富豪榜;黑客已将价值近千万EOS偷跑 | 1分钟链圈...

热门文章

  1. JavaEE——Mybatis(5)--resultMap自定义结果集封装
  2. COM学习(四)——COM中的数据类型
  3. [bzoj3694]最短路
  4. 通过反射调用方法会大大降低性能
  5. 漫游Kafka实战篇clientAPI
  6. (转载)Linux上iptables防火墙的基本应用教程
  7. CRC源码生成工具,可生成Verilog和VHDL
  8. Asp.net页面之间传递参数的几种方法荟萃
  9. [C++] - 面向对象-院校管理系统
  10. 【react】---函数化编程的理解,柯里化函数及返柯里化函数的理解...