一只小狐狸带你解锁炼丹术&NLP秘籍

作者:曹庆庆(Stony Brook University 在读PhD,关注Efficient NLP、QA方向,详见awk.ai)

背景

BERT、XLNet、RoBERTa等基于Transformer[1]的预训练模型推出后,自然语言理解任务都获得了大幅提升。问答任务(Question Answering,QA)[2]也同样取得了很大的进步。

用BERT类模型来做问答或阅读理解任务,通常需要将问题和问题相关文档拼接一起作为输入文本,然后用自注意力机制对输入文本进行多层交互编码,之后用线性分类器判别文档中可能的答案序列。如下图:

虽然这种片段拼接的输入方式可以让自注意力机制对全部的token进行交互,得到的文档表示是问题相关的(反之亦然),但相关文档往往很长,token数量一般可达问题文本的10~20倍[3],这样就造成了大量的计算。

在实际场景下,考虑到设备的运算速度和内存大小,往往会对模型进行压缩,比如通过蒸馏(distillation)小模型、剪枝(pruning)、量化(quantization)和低轶近似/权重共享等方法。

但模型压缩还是会带来一定的精度损失。因此我们思考,是不是可以参考双塔模型的结构,提前进行一些计算,从而提升模型的推理速度?

如果这种思路可行,会有几个很大的优势:

  1. 它不需要大幅修改原来的模型架构

  2. 也不需要重新预训练,可以继续使用标准Transformer初始化+目标数据集fine-tune的精调方式

  3. 还可以叠加模型压缩技术

经过不断地尝试,我们提出了《Deformer:Decomposing Pre-trained Transformers for Faster Question Answering》[4],在小幅修改模型架构且不更换预训练模型的情况下提升推理速度。下面将为大家介绍我们的思考历程。

论文链接:
https://awk.ai/assets/deformer.pdf

代码链接:
https://github.com/StonyBrookNLP/deformer

Arxiv访问慢的小伙伴也可以在订阅号后台回复关键词【0604】下载论文PDF。

模型结构

在开篇的介绍中,我们指出了QA任务的计算瓶颈主要在于自注意力机制需要交互编码的token太多了。因此我们猜想,是否能让文档和问题在编码阶段尽可能地独立?

这样的话,就可以提前将最难计算的文档编码算好,只需要实时编码较短的问题文本,从而加速整个QA过程。

部分研究表明,Transformer 的低层(lower layers)编码主要关注一些局部的语言表层特征(词形、语法等等),到高层(upper layers)才开始逐渐编码与下游任务相关的全局语义信息。因此我们猜想,至少在模型的某些部分,“文档编码能够不依赖于问题”的假设是成立的。 具体来说可以在 Transformer 开始的低层分别对问题和文档各自编码,然后再在高层部分拼接问题和文档的表征进行交互编码,如图所示:

为了验证上述猜想,我们设计了一个实验,测量文档在和不同问题交互时编码的变化程度。下图为各层输出的文档向量和它们中心点cosine距离的方差:

可以看到,对于BERT-Based的QA模型,如果编码的文档不变而问题变化,模型的低层表征往往变化不大。这意味着并非所有Transformer编码层都需要对整个输入文本的全部token序列进行自注意力交互。

因此,我们提出Transformer模型的一种变形计算方式(称作 DeFormer):在前层对文档编码离线计算得到第  层表征,问题的第层表征通过实时计算,然后拼接问题和文档的表征输入到后面到层。下面这幅图示意了DeFormer的计算过程:

值得一提的是,这种方式在有些QA任务(比如SQuAD)上有较大的精度损失,所以我们添加了两个蒸馏损失项,目的是最小化Deformer的高层表征和分类层logits与原始BERT模型的差异,这样能控制精度损失在1个点左右。

实验

这里简要描述下四组关键的实验结果:

(1)在三个QA任务上,BERT和XLNet采用DeFormer分解后,取得了2.7-3.5倍的加速,节省内存65.8-72.0%,效果损失只有0.6-1.8%。BERT-base()在SQuAD上,设置能加快推理3.2倍,节省内存70%。

Deformer results

(2)实测了原模型和DeFormer在三种不同硬件上的推理延迟。DeFormer均达到3倍以上的加速。

Deformer speed

(3)消融实验证明,添加的两个蒸馏损失项能起到弥补精度损失的效果。

Deformer ablation

(4)测试DeFormer分解的层数(对应折线图横轴)对推理加速比和性能损失的影响。这个实验在SQuAD上进行,且没有使用蒸馏trick。

Deformer layers

总结

这篇文章提主要提出了一种变形的计算方式DeFormer,使问题和文档编码在低层独立编码再在高层交互,从而使得可以离线计算文档编码来加速QA推理和节省内存。

创新之处在于它对原始模型并没有太大修改。部署简单,而效果显著。 实验结果表明基于BERT和XLNet的Deformer均能取得很好的表现。笔者推测对其他的Transformer模型应该也同样有效,并且其他模型压缩方法和技术应该也可以叠加使用到DeFormer上来进一步加速模型推理。

Arxiv访问慢的小伙伴也可以在订阅号后台回复关键词【0604】下载论文PDF。

本文收录于原创专辑:《卖萌屋@自然语言处理》

重磅惊喜:卖萌屋小可爱们苦心经营的 自然语言处理讨论群 成立三群啦!扫描下方二维码,后台回复「入群」即可加入。众多顶会审稿人、大厂研究员、知乎大V以及美丽小姐姐(划掉????‍♀️)等你来撩噢~(手慢无

夕小瑶的卖萌屋

_

关注&星标小夕,带你解锁AI秘籍

订阅号主页下方「撩一下」有惊喜哦

  • 卖萌屋原创专辑首发,算法镇魂三部曲!

  • GPT-3诞生,Finetune也不再必要了!NLP领域又一核弹!

  • ACL2020 | 线上搜索结果大幅提升!亚马逊提出对抗式query-doc相关性模型

  • 别再蒸馏3层BERT了!变矮又能变瘦的DynaBERT了解一下

  • All in Linux:一个算法工程师的IDE断奶之路

参考文献

[1]

论文方面可以参考邱老师组的文献综述: Models for Natural Language Processing : A Survey ( https://arxiv.org/abs/2003.08271 ),实例代码可以参见 huggingface 的 Transfomer 库

[2]

严格来说是机器阅读理解,即给出问题从相关文章中提取答案,一般QA系统还包括检索阶段来找到问题相关的文档

[3]

比如SQuAD问题平均10个token,但文档平均有116个token

[4]

Deformer:Decomposing Pre-trained Transformers for Faster Question Answering: https://awk.ai/assets/deformer.pdf

ACL20 | 让笨重的BERT问答匹配模型变快!相关推荐

  1. CCF2020问答匹配比赛:如何只用“bert”夺冠

    CCF2020问答匹配比赛:如何只用"bert"夺冠 团队介绍:看我看啥 成员1:许明明 中国石油大学 成员2:刘猛 南京大学 非常感谢第一名"看我干啥"分享的 ...

  2. bert模型可以做文本主题识别吗_文本匹配方法系列––BERT匹配模型

    1.概述 在介绍深层次交互匹配方法之前,本文接着多语义匹配方法[1]介绍基于BERT模型实现文本匹配的方法.将其单独介绍主要因为BERT实现文本匹配操作方便且效果优秀,比较适用于工业应用场景.关于be ...

  3. nmt模型源文本词项序列_「自然语言处理(NLP)」阿里团队--文本匹配模型(含源码)...

    来源:AINLPer微信公众号 编辑: ShuYini 校稿: ShuYini 时间: 2019-8-14 引言 两篇文章与大家分享,第一篇作者对通用文本匹配模型进行探索,研究了构建一个快速优良的文本 ...

  4. antd 文本域超长问题_「自然语言处理(NLP)」阿里团队--文本匹配模型(含源码)...

    来源:AINLPer微信公众号 编辑: ShuYini 校稿: ShuYini 时间: 2019-8-14 引言     两篇文章与大家分享,第一篇作者对通用文本匹配模型进行探索,研究了构建一个快速优 ...

  5. SIGIR 2020 | 相似问题判定的二次匹配模型

    ©PaperWeekly 原创 · 作者|金金 单位|阿里巴巴研究实习生 研究方向|推荐系统 论文标题:Match²: A Matching over Matching Model for Simil ...

  6. 贝壳房产问答匹配比赛-划水之旅

    一个月前,参加了贝壳找房的房产问答匹配比赛,因为和我的方向比较契合都是属于MRC的.第一次参加比赛,因此记录一下. 为什么要参加比赛. 参加比赛为了让自己有实战经验,简历上可以写上一笔.同时还可以获取 ...

  7. 原创 | 从ULMFiT、Transformer、BERT等经典模型看NLP 发展趋势

    自然语言处理(Natural Language Process,简称NLP)是计算机科学.信息工程以及人工智能的子领域,专注于人机语言交互,探讨如何处理和运用自然语言.自然语言处理的研究,最早可以说开 ...

  8. 【NLP-语义匹配】详解深度语义匹配模型DSSM

    所谓语义匹配,就是在语义上衡量文本的相似度,在产业界有很多的应用需求.例如,在FAQ场景中需要计算用户输入与标问之间的相似度来寻找合适的答案.本文介绍一种经典的语义匹配技术,DSSM,主要用于语料的召 ...

  9. 语义匹配(一)【NLP论文复现】Sentence-BERT 句子语义匹配模型的tensorflow实现以及训练Trick

    Sentence-BERT 句子语义匹配模型的tensorflow实现以及训练trick 论文模型回顾 建模与训练 模型代码部分 数据处理 训练 模型训练Trick trick1 warm up 代码 ...

最新文章

  1. 深入Java泛型(一):作用与定义
  2. python判断括号有效,在Python中检查括号是否平衡
  3. 这简历一看就是包装过的
  4. 洛谷 [P1024]一元三次方程求解【二分答案】
  5. [STL] UVA 10815 安迪的第一个字典 Andy's First Dictionary
  6. 喜马拉雅三年亏损超20亿 腾讯、小米为股东
  7. 【新书推荐】Silverlight 4教程书籍推荐
  8. 服务器系统winpe提取驱动,WinPE 10 驱动程序包
  9. 微信HOOK 退出群聊
  10. Mac下tomcat启动报错Cannot run program。。。 Permission denied解决办法
  11. Linux- 系统随你玩之--文件管理-双生姐妹花
  12. android 最好的gtd软件,Windows 上的高颜值 GTD 应用,这可能是最棒的一款了:MyerList...
  13. 历届上海国际电影节获奖名单
  14. Java数组讲解(数组,字符串数组,多态数组)
  15. glog --- C++日志库
  16. 悲观锁、乐观锁、自旋锁和读写锁
  17. MySQL表结构的管理
  18. 【1024社区大奖】助你狂揽大奖[保姆级教程①]
  19. 2022美亚杯电子数据取证大赛-个人赛
  20. ORACLE如何学习

热门文章

  1. SQL学习之SELECT子句顺序
  2. WPF系列 自定控件
  3. iverilog命令选项解释
  4. PHP学习之路(二)让我们开始环境搭建(Windows篇)
  5. 怎样从red hat linux图形登录改成从文本登录
  6. Cmake确实应该用到的时候再学
  7. mysql3.5 所有表_mysql学习笔记3.5
  8. android v4包自动导入吧,android如何导入v4包的源码
  9. 【Pytorch神经网络理论篇】 27 图神经网络DGL库:简介+安装+卸载+数据集+PYG库+NetWorkx库
  10. python3列表生成式中的for循环与普通放在外面的for循环细微差异