学会提问的BERT:端到端地从篇章中构建问答对

微信扫一扫,分享到朋友圈

学会提问的BERT:端到端地从篇章中构建问答对

机器阅读理解任务,相比不少读者都有所了解了,简单来说就是从给定篇章中寻找给定问题的答案,即“篇章 + 问题 → 答案”这样的流程,笔者之前也写过一些关于阅读理解的文章,比如 《基于CNN的阅读理解式问答模型:DGCNN》 等。至于问答对构建,则相当于是阅读理解的反任务,即“篇章 → 答案 + 问题”的流程,学术上一般直接叫“问题生成(Question Generation)”,因为大多数情况下,答案可以通过比较规则的随机选择,所以很多文章都只关心“篇章 + 答案 → 问题”这一步。

本文将带来一次全 端到端 的“ 篇章 → 答案 + 问题 ”实践,包括模型介绍以及基于 bert4keras 的实现代码,欢迎读者尝试。

输入篇章:世界第二高山峰是乔戈里峰,位于中国境内。 生成问答:世界第二高山峰叫什么名字? 乔戈里峰 乔戈利峰是世界第几高峰 第二 输入篇章:7月28日,泰国将迎来十世王玛哈·哇集拉隆功国王的68岁诞辰。 生成问答:泰国的十世王是谁 玛哈·哇集拉隆功国王 泰国的十世王玛哈·哇集拉隆多少岁? 68岁 泰国的玛哈·哇集拉隆功国王的生日是哪一天? 7月28日 玛哈·哇集拉隆功国王是哪个国家的 泰国 输入篇章:泼水节,亦称宋干节,已有700年的历史,是傣族(中国)、德昂族最盛大的传统节日。 生成问答:泼水节又称为什么 宋干节 泼水节是我国哪一民族一年中最盛大的节日? 傣族 泼水节有多少年历史了? 700年

本文的目标是完全端到端地实现“篇章 → 答案 + 问题”,包括答案的选取也是由模型自动完成,不需要人工规则。其实说起来也很简单,就是用“BERT + UniLM”的方式来构建一个Seq2Seq模型,如果读者还不了解UniLM,欢迎先阅读 《从语言模型到Seq2Seq:Transformer如戏,全靠Mask》

笔者之前在文章 《万能的seq2seq:基于seq2seq的阅读理解问答》 中也给出过通过Seq2Seq模型来做阅读理解的实现,即直接用Seq2Seq模型来构建$pbig(text{答案[SEP]}big|text{[CLS]篇章[SEP]问题[SEP]}big)$,图示如下:

用Seq2Seq的思路做阅读理解

事实上,在上述模型的基础上稍微改动一下,将问题也列入生成的目标之中,就可以实现问答对生成了,即模型变为$pbig(text{问题[SEP]答案[SEP]}big|text{[CLS]篇章[SEP]}big)$,如下图:

稍微修改一下,用来做问答对生成

但是,直觉上不难想到“篇章 → 答案”、“篇章 + 答案 → 问题”的难度应该是低于“篇章 + 问题 → 答案”的,所以我们将问题和答案的生成顺序调换一下,变为$pbig(text{答案[SEP]问题[SEP]}big|text{[CLS]篇章[SEP]}big)$,最终的效果会更好:

先生成答案,再生成问题,效果更好些

模型就介绍到这里了,其实也没什么好说的,就是确定好哪些是输入、哪些是输出,然后“BERT + UniLM”套上去就行了。下面是笔者的参考实现:

task_question_answer_generation_by_seq2seq.py

这里值得讨论的是解码的思路。一般的Seq2Seq模型,解码到一个[SEP]就结束了,而本文的模型需要解码到两个[SEP]才能结束,截止到第一个[SEP]的是答案,而两个[SEP]之间的则是问题。理论上来说,从给定篇章中我们可以构建很多问答对,换句话说目标不是唯一的,所以我们不能用Beam Search之类的确定性解码算法,而是要用随机解码算法(相关概念可以参考 《如何应对Seq2Seq中的“根本停不下来”问题?》 中的“解码算法”一节)。

但问题是,如果完全使用随机解码算法,那么生成的问题会过于“天马行空”,也就是可能会出现一些跟篇章无关的内容,比如篇章是“我国火星探测器天问一号发生成功”,生成的问题可能是“我国第一课人造卫星是什么”,虽然相关,但是过于发散了。所以,这里建议使用一个折中的策略:用随机解码来生成答案,然后用确定性解码来生成问题,这样能尽量保证问题的可靠性。另外,读者还需要注意的是,上述参考脚本中并没有对答案进行约束,那么生成的答案可能并不是篇章中的片段。毕竟这只是个参考实现,离实用还有一定距离,请有兴趣的读者根据自己的需求自行理解和修改代码。

最后,由于问答对构建已经完全变成了一个Seq2Seq问题,所以用来提升Seq2Seq性能的技巧都可以用来提高问答对的生成质量,比如之前讨论过的 《Seq2Seq中Exposure Bias现象的浅析与对策》 ,这些都交给读者自己尝试了。

本文是一次端到端的问答对生成实践,主要是基于“BERT + UniLM”的Seq2Seq模型来直接由篇章生成答案和问题,并讨论了关于解码的策略。总的来讲,本文的模型没有什么特殊之处,但是因为借助了BERT的预训练权重,最终生成的问答对质量颇有可圈可点之处。

转载到请包括本文地址: https://kexue.fm/archives/7630

更详细的转载事宜请参考: 《科学空间FAQ》

如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。

如果您觉得本文还不错,欢迎/本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!

如果您需要引用本文,请参考:

苏剑林. (2020, Jul 25). 《学会提问的BERT:端到端地从篇章中构建问答对 》[Blog post]. Retrieved from https://kexue.fm/archives/7630

台积电市值一夜飙升2300亿元 坐稳全球市值最高…

上一篇

三星齐聚 资源三号03卫星发射三大看点

下一篇

你也可能喜欢

学会提问的BERT:端到端地从篇章中构建问答对

长按储存图像,分享给朋友