【Day 9】预训练任务大改:Splinter在QA任务上的成功尝试

BERT系列的预训练模型一个个出,RoBERTa、XLNet、DeBERTa等等一个比一个更能打,刷新着自然语言理解的GLUE榜单。这些都是通用型的预训练语言模型,在所有任务上都有较好的表现(或至少相较之前的SOTA)。但是在具体完成任务时,我们的目标通常相对单纯,往往不需要一个全能的模型,只要能完成我的特定类型任务就好,例如很常见的QA任务。

那麽有没有什麽专门为了特定任务而预训练的模型呢?今天就介绍一个刚发布不久的Splinter模型,专为QA而生,效果优於RoBERTa、SpanBERT等之前的SOTA,在小样本的训练上更是特别优秀。

Splinter:span-level pointer

Splinter的贡献主要有两点:

  • 提出了一个全新的进行span选择的预训练方式
  • 一个问题回答层:将问题和文本(包含答案的段落)的表示串接在一起

其中第一点是重点,也是它成功的原因。主要思想是去模拟人们在进行问题回答时的思考方式。

通常面对一个阅读理解的问答问题是,我们最先会阅读题目,然後在头脑中记住问题中出现的一些重要短语。例如一个问题是「伊丽莎白女王进入过哪所大学就读?」这个题目中的「伊丽莎白女王」、「大学」、「就读」、「进入」都有可能成为我们记住的重要短语。然後,我们会带着这样的问题去看文章,迅速找到包含这些重要短语的片段。然後再在这些短语「附近」寻找问题的答案。

也就是说,我们其实经过了一个「问题」->「拆解」->「短语」->「检索」->「片段」->「答案」的过程。Splinter提出的预训练任务正是在模拟这个过程中的短语检索过程:

https://ithelp.ithome.com.tw/upload/images/20210912/20127672zSKBMTIIcx.jpg

左边的图是原始文档,右边则是送入Splinter进行预训练时的文档,经过了段落MASK。哪些段落被MASK起来成为[QUESTION],让模型去猜呢?是那些在文本中重复出现的片段被随机MASK了,但会留下一个片段让模型能够去选择。模型的学习目标就是透过上下文去重新定位到被MASK起来的文本是什麽。这部分Splinter的作法与传统BERT的克漏字,完全重建被遮盖的字词的方式不同。Splinter是使用一个特殊的question-aware span selection (QASS) 层,只使用[QUESTION]的表示来「选择」答案片段。这就非常相似於SQuAD等撷取式问答的工作方式。

而这个训练好的[QUESTION] token也可以被用来进行微调。方法也很简单,只要在问题的後面接一个[QUESTION],模型就可以做微调的工作了,例如下图这样。

https://ithelp.ithome.com.tw/upload/images/20210912/20127672ZcgyURAj99.jpg

Splinter的出色效果

SPlinter方法其实不难,但是巧妙,而效果则是实打实的。也不用多说,我们直接来看论文中的结果就好(根据本人亲测,效果属实)。

首先是Few shot learning,极小样本情况下,Splinter力压效果拔群:

https://ithelp.ithome.com.tw/upload/images/20210912/20127672TEfCb02nMq.jpg

而在完整的资料集上进行Fine-tune,效果也不差:

https://ithelp.ithome.com.tw/upload/images/20210912/201276728D2AQw3ccs.jpg

完整实验结果可看下图:

https://ithelp.ithome.com.tw/upload/images/20210912/20127672KAEWROJIBV.jpg

参考

Ram, O., Kirstain, Y., Berant, J., Globerson, A., & Levy, O. (2021). Few-shot question answering by pretraining span selection. arXiv preprint arXiv:2101.00438.


<<:  12.unity使用者输入(GetKey与GetButton)

>>:  [Day4] MacOS - 软件安装清单

鼠年全马铁人挑战 WEEK 38:封包测试工具 - Charles (三)

           Photo on charlesproxy.com 前言 上个礼拜分享了 C...

Day 22 - IO Monad

上一章节简单的介绍如何处理 side effect 的其中一个方法 dependency injec...

实施入侵检测系统以应对安全事件和基於生物识别的存取控制-纵深防御(Defense-in-depth)

纵深防御是一种“整合人员、技术和运营能力的资讯安全战略,以在组织的多个层次和维度之间建立可变的屏障”...

Day 32 打包- android

当我们开发阶段完成後, 会需要把专案内容汇整成出来上架,或是给其他人测试, 以 android 来说...

(Medium) 31. Next Permutation

Implement next permutation, which rearranges numbe...