作者丨苏剑林

单位丨追一科技

研究方向丨NLP,神经网络

个人主页丨kexue.fm

前段时间写了万能的Seq2Seq:基于Seq2Seq的阅读理解问答,探索了以最通用的 Seq2Seq 的方式来做阅读理解式问答,并且取得相当不错的成绩(单模型 0.77,超过参加比赛时精调的最佳模型)。这篇文章我们继续做这个任务,不过换一个思路,直接基于 MLM 模型来做,最终成绩基本一致,但能提高预测速度。

两种生成

广义来讲,MLM 的生成方式也算是 seq2seq 模型,只不过它属于“非自回归”生成,而我们通常说的(狭义的)seq2seq,则是指自回归生成。本节对这两个概念做简单的介绍。

自回归生成

顾名思义,自回归生成指的是解码阶段是逐字逐字地递归生成的,它建模的是如下的概率分布:

更详细的介绍可以参考玩转Keras之Seq2Seq自动生成标题和从语言模型到Seq2Seq:Transformer如戏,全靠Mask,在此不对自回归生成做过多介绍。

非自回归生成

由于自回归生成需要递归地进行解码,无法并行,所以解码速度比较慢,因此近年来有不少工作在研究非自回归生成,也取得不少成果。简单来说,非自回归生成就是想办法使得每个字的解码可并行化,最简单的非自回归模型就是直接假设每个字是独立的:

这是一个很强的假设,只有在一些比较特殊的情况下才适用,直接用它来做普通的文本生成如自动摘要的话,效果会很差的。更复杂的非自回归生成的相关工作,大家在 arXiv 或 Google 上搜索 non-autoregressive text generation 就可以找到很多。

标题已经提到了,本文做阅读理解的方式是“基于 MLM”,对 Bert 模型有所了解的读者应该知道,MLM(Masked Language Model)实际上也是 (2) 的一个特例,所以基于 MLM 所做的生成模型,属于非自回归生成的范畴。

模型简介

所谓“简介”,真的很简,因为基于 MLM 来做阅读理解确实非常简单。

模型图示

首先定一个最大长度 ,然后将问题和篇章拼接起来,再在里边拼接 [MASK] 标记,输入到 Bert 中,最后让 [MASK] 对应的部分来预测答案即可(不管是训练还是预测阶段都如此),如下图示:

▲ 用MLM做阅读理解的模型图示(其中[M]表示[MASK]标记)

代码效果

代码链接:

https://github.com/bojone/bert4keras/blob/master/examples/task_reading_comprehension_by_mlm.py

最终在 SogouQA 自带的评估脚本上,valid 集的分数大概是 0.77:

  • Accuracy=0.7282149325820084

  • F1=0.8207266829447049

  • Final=0.7744708077633566

跟前段时间的万能的Seq2Seq:基于Seq2Seq的阅读理解问答模型持平,但是预测速度明显提升,之前的 seq2seq 方案每秒只能预测 2 条数据左右,现在每秒预测能达到 12 条,6 倍的提速而且不降低效果。

选哪种好?

原则上来说 seq2seq 是万能的,而且原则上 seq2seq 所建模的式 (1) 要比 MLM 所建模的 (2) 要合理,为什么 MLM 方案能取得跟 seq2seq 持平的效果?什么时候该用 MLM,什么时候该用 seq2seq?

训练和预测

首先,seq2seq 最大的问题就是慢,如果长文本生成就更慢了,因此如果要求高效率,那自然就不得不放弃 seq2seq 这种方案了。

如果不考虑效率,那么是不是 seq2seq 就最好呢?也不是。尽管从建模上来看, (1) 更加准确,但是 seq2seq 的训练是通过 teacher forcing 的方式来做的,所以存在“exposure bias”的问题:训练的时候,每个时刻的输入都是来自于真实的答案文本;而生成的时候,每个时刻的输入来自于前一时刻的输出;所以一旦有一个字生成的不好,错误可能会接着传递,使得生成的越来越糟糕。 

说白了,也就是训练和预测时存在不一致性,这种不一致性可能导致误差累积。相反,基于 MLM 的方案在训练和预测时的行为是一致的,因为不需要真实标签作为输入(预测时答案部分的位置也输入 [MASK]),因此不存在误差累积情况。而且也正好因为这个特点,因此解码时不再需要递归,而是可并行化,提高了解码速度。

正确答案唯一

此外,MLM 等非自回归生成,相对来说更加适用于短文本生成,因为文本越短越贴近这个独立假设,同时,非自回归生成适用于“正确的答案只有一个”的场景,而本文所做的阅读理解任务主要是抽取式的,刚好就对应着这种场景,因此 MLM 表现也不俗。

事实上,序列标注模型如逐帧 Softmax 或者 CRF,其实也可以视为非自回归生成模型,它们之所以有效,我认为根本原因也在于“正确的答案序列是唯一的”,而不是直觉上认为的“输入与输出对齐”。也就是说,如果满足“正确的答案只有一个”这个条件,那么就可以考虑用非自回归生成来做。

注意这个的答案唯一并不是指每个样本只有一个人工标注答案,而是指这个任务从设计上就让答案变得唯一了,比如分词,设计好标注方式后,每个句子只对应唯一一种正确的分词方案,再比如标题生成,显然同一篇文章可以起不同的标题,因此标题生成答案就不是唯一的(哪怕训练数据里边每篇文章只有一个标题)。

文章小结

本文试验了通过 MLM 的非自回归生成方式来做阅读理解式问答,发现最后的效果也不赖,而且速度有了好几倍的提升。此外,文章还简单对比了自回归和非自回归生成的异同,分析了非自回归方案何时适用及其原因。

关于PaperWeekly

PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。

▽ 点击 | 阅读原文 | 查看作者博客

“非自回归”也不差:基于MLM的阅读理解问答相关推荐

  1. 万能的Seq2Seq:基于Seq2Seq的阅读理解问答

    作者丨苏剑林 单位丨追一科技 研究方向丨NLP,神经网络 个人主页丨kexue.fm 今天给 bert4keras [1] 新增加了一个例子:阅读理解式问答(task_reading_comprehe ...

  2. 基于CNN的阅读理解式问答模型:DGCNN

    作者丨苏剑林 单位丨广州火焰信息科技有限公司 研究方向丨NLP,神经网络 个人主页丨kexue.fm 早在年初的一文读懂「Attention is All You Need」| 附代码实现中就已经承诺 ...

  3. NLP之BERT英文阅读理解问答SQuAD 2.0超详细教程

    环境 linux python 3.6 tensorflow 1.12.0 文件准备工作 下载bert源代码 : https://github.com/google-research/bert 下载b ...

  4. 博士学位论文 | 机器阅读理解与文本问答技术研究

    作者丨胡明昊 学校丨国防科技大学博士生 研究方向丨机器阅读理解 引言 文本问答是自然语言处理中的一个重要领域,随着一系列大规模高质量数据集的发布和深度学习技术的快速发展,文本问答技术在近年来引起了学术 ...

  5. ACL 2020 | 基于机器阅读理解框架的命名实体识别方法

    论文标题: A Unified MRC Framework for Named Entity Recognition 论文作者: Xiaoya Li, Jingrong Feng, Jiwei Li ...

  6. SIGIR 2019 | 基于人类阅读行为模式的机器阅读理解

    作者丨张琨 学校丨中国科学技术大学博士生 研究方向丨自然语言处理 论文动机 机器阅读理解一直是自然语言处理领域的一个非常重要的研究方向,目前虽然在一些给定条件下,机器学习的方法可以取得和人类类似甚至好 ...

  7. 使用MRC(机器阅读理解)方式做事件抽取任务,基于2020百度事件抽取任务

    ​关注微信公众号:NLP分享汇.[喜欢的扫波关注,每天都在更新自己之前的积累] 文章链接:https://mp.weixin.qq.com/s/aKB6j42bC1MnWCFIEyjwQQ [前言] ...

  8. 2018机器阅读理解竞赛冠军分享:问答系统新思路

    7月28日,由中国中文信息学会和中国计算机学会联合举办的第三届语言与智能高峰论坛于北京语言大学举办.Naturali 奇点机智团队作为2018机器阅读理解技术竞赛冠军团队,受邀参加本次活动的" ...

  9. 论文浅尝 - WWW2020 | 生成多跳推理问题以改善机器阅读理解能力

    论文笔记整理:谭亦鸣,东南大学博士生. 来源:WWW 2020 链接: https://dl.acm.org/doi/pdf/10.1145/3366423.3380114 概述 这篇论文关注的任务是 ...

最新文章

  1. java容易混淆的知识点
  2. 人人可用的在线抠图,还是AI自动化的那种!北大校友的算法被玩出新高度
  3. 人生百味,浓缩到最后就是一个淡字
  4. psa name_Windows 10安全性PSA:启用自动商店更新
  5. JMS和AWS SQS的更多高级内容
  6. iOS开发---设计素材篇2
  7. 局域网聊天 一个十分热门的话题
  8. webdriver原理_(最新版)如何正确移除 Pyppeteer 中的window.navigator.webdriver
  9. python requests模块post_python requests模块提交中文数据
  10. Android JNI使用方法,JNI机制详解
  11. java长按底栏_java - 如何在导航抽屉物品中添加长按功能? - SO中文参考 - www.soinside.com...
  12. AutoCAD查询插件的开发
  13. 计算机信息系统集成高级工程师,软考信息系统项目管理师(高级资格/高级工程师)简介...
  14. IBM新型Tivoli产品搭建绿色销售渠道
  15. ACK Acknowledgement 确认 AES Advanced Encryption Standard 高级加密标准 ATM Asynchronous Transfer Mode异步传输模式
  16. 毕业论文 引用与自动编号基本技巧
  17. 超声波测距仪编程_Arduino轻松学Mixly编程第9课 超声波测距仪
  18. 小敏利用计算机设计了一个计算程序,七年级上期中练习卷2013-2014第一学期定稿(10页)-原创力文档...
  19. Kaggle项目数据分析--heart disease
  20. Python的7大就业方向,你知道几个?

热门文章

  1. 从零开始学习python:demo2.3
  2. 一文带你认识Spring事务
  3. C#简单实现LRU缓存
  4. SQL中的撤销索引、表以及数据库
  5. SlidingMenu的简单使用
  6. 20145204 张亚军《信息安全系统设计基础》第10周学习总结
  7. 基于visual Studio2013解决C语言竞赛题之1089牛虎过河
  8. Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解
  9. That assembly does not allow partially trusted callers.
  10. php要字符串的后四位,php如何截取字符串后四位