“非自回归”也不差:基于MLM的阅读理解问答
By 苏剑林 | 2019-12-26 | 79735位读者 |前段时间写了《万能的seq2seq:基于seq2seq的阅读理解问答》,探索了以最通用的seq2seq的方式来做阅读理解式问答,并且取得相当不错的成绩(单模型0.77,超过参加比赛时精调的最佳模型)。这篇文章我们继续做这个任务,不过换一个思路,直接基于MLM模型来做,最终成绩基本一致,但能提高预测速度。
两种生成 #
广义来讲,MLM的生成方式也算是seq2seq模型,只不过它属于“非自回归”生成,而我们通常说的(狭义的)seq2seq,则是指自回归生成。本节对这两个概念做简单的介绍。
自回归生成 #
顾名思义,自回归生成指的是解码阶段是逐字逐字地递归生成的,它建模的是如下的概率分布
\begin{equation}p(y_1,y_2,\dots,y_n|x)=p(y_1|x)p(y_2|x,y_1)\dots p(y_n|x,y_1,\dots,y_{n-1})\label{eq:at}\end{equation}
更详细的介绍可以参考《玩转Keras之seq2seq自动生成标题》和《从语言模型到Seq2Seq:Transformer如戏,全靠Mask》,在此不对自回归生成做过多介绍。
非自回归生成 #
由于自回归生成需要递归地进行解码,无法并行,所以解码速度比较慢,因此近年来有不少工作在研究非自回归生成,也取得不少成果。简单来说,非自回归生成就是想办法使得每个字的解码可并行化,最简单的非自回归模型就是直接假设每个字是独立的:
\begin{equation}p(y_1,y_2,\dots,y_n|x)=p(y_1|x)p(y_2|x)\dots p(y_n|x)\label{eq:nat}\end{equation}
这是一个很强的假设,只有在一些比较特殊的情况下才适用,直接用它来做普通的文本生成如自动摘要的话,效果会很差的。更复杂的非自回归生成的相关工作,大家在Arxiv或Google上搜索non-autoregressive text generation就可以找到很多。
标题已经提到了,本文做阅读理解的方式是“基于MLM”,对Bert模型有所了解的读者应该知道,MLM(Masked Language Model)实际上也是$\eqref{eq:nat}$的一个特例,所以基于MLM所做的生成模型,属于非自回归生成的范畴。
模型简介 #
所谓“简介”,真的很简,因为基于MLM来做阅读理解确实非常简单。
模型图示 #
首先定一个最大长度$l_{\max}$,然后将问题和篇章拼接起来,再在里边拼接$l_{\max}$个[MASK]标记,输入到Bert中,最后让[MASK]对应的部分来预测答案即可(不管是训练还是预测阶段都如此),如下图示:
代码效果 #
代码链接: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所建模的式$\eqref{eq:at}$要比MLM所建模的$\eqref{eq:nat}$要合理,为什么MLM方案能取得跟seq2seq持平的效果?什么时候该用MLM,什么时候该用seq2seq?
训练和预测 #
首先,seq2seq最大的问题就是慢,如果长文本生成就更慢了,因此如果要求高效率,那自然就不得不放弃seq2seq这种方案了。
如果不考虑效率,那么是不是seq2seq就最好呢?也不是。尽管从建模上来看,$\eqref{eq:at}$更加准确,但是seq2seq的训练是通过teacher forcing的方式来做的,所以存在“exposure bias”的问题:训练的时候,每个时刻的输入都是来自于真实的答案文本;而生成的时候,每个时刻的输入来自于前一时刻的输出;所以一旦有一个字生成的不好,错误可能会接着传递,使得生成的越来越糟糕。
说白了,也就是训练和预测时存在不一致性,这种不一致性可能导致误差累积。相反,基于MLM的方案在训练和预测时的行为是一致的,因为不需要真实标签作为输入(预测时答案部分的位置也输入[MASK]),因此不存在误差累积情况。而且也正好因为这个特点,因此解码时不再需要递归,而是可并行化,提高了解码速度。
正确答案唯一 #
此外,MLM等非自回归生成,相对来说更加适用于短文本生成,因为文本越短越贴近这个独立假设,同时,非自回归生成适用于“正确的答案只有一个”的场景,而本文所做的阅读理解任务主要是抽取式的,刚好就对应着这种场景,因此MLM表现也不俗。
事实上,序列标注模型如逐帧Softmax或者CRF,其实也可以视为非自回归生成模型,它们之所以有效,我认为根本原因也在于“正确的答案序列是唯一的”,而不是直觉上认为的“输入与输出对齐”。也就是说,如果满足“正确的答案只有一个”这个条件,那么就可以考虑用非自回归生成来做。
注意这个的答案唯一并不是指每个样本只有一个人工标注答案,而是指这个任务从设计上就让答案变得唯一了,比如分词,设计好标注方式后,每个句子只对应唯一一种正确的分词方案,再比如标题生成,显然同一篇文章可以起不同的标题,因此标题生成答案就不是唯一的(哪怕训练数据里边每篇文章只有一个标题)。
文章小结 #
本文试验了通过MLM的非自回归生成方式来做阅读理解式问答,发现最后的效果也不赖,而且速度有了好几倍的提升。此外,文章还简单对比了自回归和非自回归生成的异同,分析了非自回归方案何时适用及其原因。
转载到请包括本文地址:https://kexue.fm/archives/7148
更详细的转载事宜请参考:《科学空间FAQ》
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!
如果您需要引用本文,请参考:
苏剑林. (Dec. 26, 2019). 《“非自回归”也不差:基于MLM的阅读理解问答 》[Blog post]. Retrieved from https://kexue.fm/archives/7148
@online{kexuefm-7148,
title={“非自回归”也不差:基于MLM的阅读理解问答},
author={苏剑林},
year={2019},
month={Dec},
url={\url{https://kexue.fm/archives/7148}},
}
December 26th, 2019
拜读大神的新作!
想请教下,之前您做的文章标题生成,也能通过这种方式来做吧?标题mask再拼接文章,然后预测真实标题?
感觉这么做,可以很大程度利用bert本身预训练时的mask预测,相比之下seq2seq的做法跟bert预训练区别还是挺大的。
文章已经讲清楚MLM的局限和适用条件了,并且已经说明标题生成用MLM方式生成是不适合的。
仔细想了想,确实是不合适。多谢回复!
December 27th, 2019
精简词表的目的是加快速度吗?
加快速度,甚至有可能提升效果。
June 16th, 2020
苏神,这个方法不适合多答案抽取吗?
比如:
问题:找出所有的人名
正文: 亨 特 魁 梧 、 强 悍 , 看 上 去 更 像 琼 斯 的 保 镖
答案:亨 特 、琼 斯
这种情况适用吗
因为解码时限制了输出结果必须为原文的一个连续片段,所以目前的写法是不可以应对你这种情况的。
不过你可以自行考虑去掉这个限制,或者引入更宽松的限制,那么理论上也可以适用你这种情况。
July 1st, 2020
我怎么感觉crf像自回归呢?尽管序列标注答案是唯一的,也适合用非自回归(softmax/span),但是crf应该是自回归的方式吧。
crf解码的时候可以认为是自回归,但它本身属于一个全局归一化模型,全局归一化的一般不视为自回归。
September 7th, 2020
苏神,请问怎么处理答案不定长呢?怎么预先知道要填几个[MASK]?
文章已经说得很清楚了。
March 2nd, 2021
你好,我的场景:用mlm模型做生成,with_mlm=True后,输入比原来多了N个mask,变成: [mask]*Length+原来的tokens..., 我的问题:这种情况下还能继续取'Transformer-%s-FeedForward-Norm'的output,或者加pooler=True的cls向量去做分类任务不? 我的想法:是再加个分类任务去做多任务学习,让mlm生成结果更好点。
原则上可以取cls做分类,但不知道怎么达到“让mlm生成结果更好点”这个目的。
用分类去促进mlm生成结果是我这里的数据本身特有的一些原因。
疑问是:用mlm的生成模型同时加额外的分类模型多任务学习,开头部分加了要预测答案的Mask后,[mask答案]*N + 内容 + 问题 这样取出来的Pooler-cls 能不能和普通的原句子:内容+问题 的Pooler-cls一样直接用于分类?Pooler-Dense那里需要把[mask答案]*N部分给屏蔽掉不?
不用怎么处理,模型回自己做出选择的。
好的 多谢回复!
September 22nd, 2021
[事实上,序列标注模型如逐贞Softmax或者CRF,其实也可以视为非自回归生成模型]逐贞Softmax?没听过
另外,两个都不适合很长的序列吧,seq2seq除了慢,随着序列变长,误差累积的概率越大?
长文本生成确实是很有挑战性的一件事情。
逐帧,已修正。就是每个token独立地分类。
November 29th, 2023
苏神您好,请问下如果基础模型采用roformer,做MLM阅读理解的时候,可以处理长文本(最长长度大约在2000)吗?
目测问题不大。