作者 | 一轩明月

整理 | NewBeeNLP

BERT 通过改变 NLP 模型的训练方式迎来了 NLP 领域的 ImageNet 时刻。自此之后的预训练模型分别尝试从 mask 范围,多语言,下文预测,模型轻量化,预训练方式,模型大小,多任务等方向谋求新突破,有的效果明显,有的只是大成本小收益。

自 2018 年 BERT 提出之后,各种预训练模型层出不穷,模型背后的着眼点也各有不同,难免让人迷糊。本文旨在从以下几个方面探讨系列 Transformers 研究方向:

  • 扩大遮罩范围(MaskedLM)

  • 下文预测(NextSentencePrediction)

  • 其他预训练方式

  • 轻量化

  • 多语言

  • 越大越好?

  • 多任务

要说 BERT 为什么性能卓越,主要是它改变了 NLP 模型的训练方式。先在大规模语料上训练出一个语言模型,然后将这个模型用在阅读理解/情感分析/命名实体识别等下游任务上

Yann LeCun 将 BERT 的学习方式称为“自监督学习”,强调模型从输入内容中学习,又对其中部分内容进行预测的特点。而 BERT 本身实际算是是基于 Transformer 编码器部分改进而来的多任务模型,会同时执行遮罩语言模型学习以及下文预测任务,以此习得潜藏语义。

扩大遮罩范围改进 MaskedLM

遮罩语言模型里的“遮罩”,通常是分词后一小段连续的 MASK 标记

相比于从上下文中猜整个词,给出 ##eni##zation 猜到 tok 显然更容易些。

也正因单词自身标识间的联系和词与词间的联系不同,所以 BERT 可能学不到词语词间的相关关系。而只是预测出词的一部分也没什么意义,预测出整个词才能学到更多语义内容。所以拓展遮罩范围就显得十分重要了:

  • 字词级遮罩——WWM

  • 短语级遮罩——ERNIE

  • 缩放到特定长度——N-gram 遮罩/ Span 遮罩

短语级遮罩使用时得额外提供短语列表,但加上这样的人工信息可能会干扰模型导致偏差。T5 尝试了不同跨度的遮罩,似乎长一些的会好点

可以看到初期扩大跨度是有效的,但不是越长越好。SpanBERT 有一个更好的解决方案,通过概率采样降低对过长遮罩的采纳数量。

从 SpanBERT 的实验结果来看随机跨度效果不错

此外,也有模型尝试改进遮罩比例。Google 的 T5 尝试了不同的遮罩比例,意外的是替代项都不如原始设置表现好

下文预测

准确地讲应该是下一句预测(NextSentencePrediction,NSP),通过判断两个句子间是否是上下文相关的来学习句子级知识。从实验结果来看,BERT 并没有带来明显改进

BERT 的欠佳表现给了后来者机会,几乎成了兵家必争之地。XLNET / RoBERTa / ALBERT 等模型都在这方面进行了尝试

  • RoBERTa

  • ALBERT

  • XLNet

可以看出 NSP 带来的更多的是消极影响。这可能是 NSP 任务设计不合理导致的——负样本是从容易辨析的其他文档中抽出来的,这导致不仅没学到知识反而引入了噪声。同时,NSP 将输入分成两个不同的句子,缺少长语句样本则导致 BERT 在长句子上表现不好。

其他预训练方式

NSP 表现不够好,是不是有更好的预训练方式呢?各家都进行了各种各样的尝试,私以为对多种预训练任务总结的最好的是 Google 的 T5 和 FaceBook 的 BART

  • T5 的尝试

  • BART 的尝试

各家一般都选语言模型作为基线,而主要的尝试方向有

  • 挡住部分标识,预测遮挡内容

  • 打乱句子顺序,预测正确顺序

  • 删掉部分标识,预测哪里被删除了

  • 随机挑选些标识,之后将所有内容前置,预测哪里是正确的开头

  • 加上一些标识,预测哪里要删

  • 替换掉一些标识,预测哪里是被替换过的

试验结果如下

实验表明遮罩模型就是最好的预训练方法。要想效果更好点,更长的遮罩和更长的输入语句似乎是个不错的选择。而为了避免泄露具体挡住了多少个词,每次只能标记一个遮罩,对一个或多个词做预测

轻量化

BERT 模型本身非常大,所以为了运行更快,模型轻量化也是一大研究方向。一网打尽所有 BERT 压缩方法[1]对此有细致描述,主要分几个方向:

  • 修剪——删除部分模型,删掉一些层 / heads 等

  • 矩阵分解——对词表 / 参数矩阵进行分解

  • 知识蒸馏——师生结构,在其他小模型上学习

  • 参数共享——层与层间共享权重

多语言

数据集在不同语言间分布的非常不均匀,通常是英语数据集很多,其他语言的相对少些,繁体中文的话问题就更严重了。而 BERT 的预训练方法并没有语言限制,所以就有许多研究试图喂给预训练模型更多语言数据,期望能在下游任务上取得更好的成绩。

谷歌的 BERT-Multilingual 就是一例,在不添加中文数据的情况下,该模型在下游任务上的表现已经接近中文模型

有研究[2]对多语言版 BERT 在 SQuAD(英语阅读理解任务)和 DRCD(中文阅读理解任务)上进行了测试。最终证明可以取得接近 QANet 的效果,同时多语言模型不用将数据翻译成统一语言,这当然要比多一步翻译过程的版本要好。

从上面的结果可以看出无论是用 Embedding 还是 Transformer 编码器,BERT 都学到了不同语言间的内在联系。另有研究[3]专门针对 BERT 联通不同语言的方式进行了分析。

首先,在相同的 TLM 预训练模型中对不同语言建立关联

然后,通过控制是否共享组件来分析哪个部分对结果影响最大

结果是模型间共享参数是关键

这是因为 BERT 是在学习词和相应上下文环境的分布,不同语言间含义相同的词,其上下文分布应该很接近

而 BERT 的参数就是在学习期间的分布,所以也就不难理解模型在多语言间迁移时的惊人表现了

越大越好?

尽管 BERT 采用了大模型,但直觉上数据越多,模型越大,效果也就应该更好。所以很多模型以此为改进方向

T5 更是凭借 TPU 和金钱的魔力攀上顶峰

然而更大的模型似乎并没有带来太多的回报

所以,简单增大模型规模并不是最高效的方法。

此外,选用不同的训练方法和目标也是一条出路。比如,ELECTRA 采用新型训练方法保证每个词都能参与其中,从而使得模型能更有效地学习表示(representation)

ALBERT 使用参数共享降低参数量,但对性能没有显著影响

多任务

BERT 是在预训练时使用多任务,我们同样可以在微调时使用多任务。微软的用于自然语言理解的多任务深度神经网络[4](MTDNN)就是这么做的

相交于 MTDNN,GPT-2 更加激进:不经微调直接用模型学习一切,只用给一个任务标识,其余的交给模型。效果出众但仍称不上成功

T5 对此做了平衡

谷歌的 T5 类似于 GPT-2,训练一个生成模型来回答一切问题。同时又有点像 MTDNN,训练时模型知道它是在同时解决不同问题,它是一个训练/微调模型

同时,大体量预训练模型都面临相同的两个难题:数据不均衡和训练策略选定

  • 不均衡数据

不同任务可供使用的数据量是不一致的,这导致数据量小的任务表现会很差。数据多的少采样,数据少的多采样是一种解决思路。BERT 对多语言训练采用的做法就是一例

为平衡这两个因素,训练数据生成(以及 WordPiece 词表生成)过程中,对数据进行指数平滑加权。换句话说,假如一门语言的概率是

,比如 意味着在混合了所有维基百科数据后, 21% 的数据是英文的。我们通过因子 S 对每个概率进行指数运算并重新归一化,之后从中采样。我们的实验中,,所以像英语这样的富文本语言会被降采样,而冰岛语这样的贫文本语言会过采样。比如,原始分布中英语可能是冰岛语的 1000 倍,平滑处理后只有 100 倍

  • 训练策略

无监督预训练+微调:在 T5 预训练后对各任务进行微调

多任务训练:所有任务和 T5 预训练一同训练学习,并直接在各任务上验证结果

多任务预训练+微调:所有任务和 T5 预训练一同训练学习,然后对各任务微调训练数据,再验证结果

留一法多任务训练:T5 预训练和目标任务外的所有任务一同进行多任务学习,然后微调目标任务数据集,再验证结果

有监督多任务预训练:在全量数据上进行多任务训练,然后对各任务微调结果

可以看到先在海量数据上进行训练,然后对特定任务数据进行微调可以缓解数据不平衡问题。

一起交流

想和你一起学习进步!『NewBeeNLP』目前已经建立了多个不同方向交流群(机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 / 等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定o要备注信息才能通过)

本文参考资料

[1]

一网打尽所有 BERT 压缩方法: http://mitchgordon.me/machine/learning/2019/11/18/all-the-ways-to-compress-BERT.html

[2]

研究: https://arxiv.org/pdf/1909.09587

[3]

研究: https://arxiv.org/pdf/1911.01464

[4]

用于自然语言理解的多任务深度神经网络: https://arxiv.org/pdf/1901.11504

BERT 之后的故事相关推荐

  1. 【直播】陈安东:Bert与机器阅读理解的故事

    Bert与机器阅读理解的故事 直播信息 主讲人:陈安东,Datawhale成员,动手学数据分析开源项目 核心贡献者. 直播时间:2021年07月28日 20:00 - 21:00 直播内容: 经典数据 ...

  2. 【直播】闫强:文本分类上分利器 -- Bert微调技巧大全

    文本分类上分利器 – Bert微调技巧大全 直播信息 主讲人:ChallengeHub成员,中国人民大学硕士. 直播时间:2021年07月25日 15:00~16:00 直播内容: 经典论文介绍与解读 ...

  3. 新一届最强预训练模型上榜,出于BERT而胜于BERT

    作者 | Facebook AI译者 | Lucy编辑 | Jane出品 | AI科技大本营(ID: rgznai100) [导读]预训练方法设计有不同的训练目标,包括语言建模.机器翻译以及遮蔽语言建 ...

  4. 碾压Bert?“屠榜”的XLnet对NLP任务意味着什么

    作者张俊林,中国中文信息学会理事,中科院软件所博士.目前担任新浪微博机器学习团队 AI Lab 负责人.在此之前,张俊林曾经在阿里巴巴任资深技术专家并负责新技术团队,以及在百度和用友担任技术经理及技术 ...

  5. 对标Bert?刷屏的GPT 2.0意味着什么

    作者 | 张俊林,中国中文信息学会理事,中科院软件所博士.目前在新浪微博 AI Lab 担任资深算法专家.在此之前,张俊林曾经在阿里巴巴任资深技术专家并负责新技术团队,以及在百度和用友担任技术经理及技 ...

  6. 独家 | 解析Tansformer模型—理解GPT-3, BERT和T5背后的模型(附链接)

    作者:Dale Markowitz 翻译:王可汗 校对:和中华 本文约3800字,建议阅读5分钟 本文为大家介绍自然语言处理中当下最流行的语言模型--Transformer模型. 标签:自然语言处理 ...

  7. 独家 | ​采用BERT的无监督NER(附代码)

    作者:Ajit Rajasekharan 翻译:陈之炎 校对:王雨桐 本文约8700字,建议阅读10+分钟. 本文介绍了一种无监督命名实体识别(NER)的方法. 图1. 展示了未微调的BERT(ber ...

  8. 只需单击三次,让中文GPT-2为你生成定制故事

    2019-11-12 12:49:55 机器之心报道 机器之心编辑部 想要 GPT-2 生成中文故事,听听它对各种主题的看法?你可以试试这个中文预训练 GPT-2 项目,它开源了预训练结果与 Cola ...

  9. 谷歌最强 NLP 模型 BERT 解读

    谷歌最强 NLP 模型 BERT 解读 https://mp.weixin.qq.com/s/N7Qp_Fx0rAFbvrpLSETi8w 本文是追一科技潘晟锋基于谷歌论文为 AI 科技评论提供的解读 ...

最新文章

  1. printf输出字符串_C语言入门必学第一课,学习“输入与输出”!
  2. JQUERY的location.href.split
  3. 9,线程池 threadPool 与 线程池执行器 threadPoolExecutor
  4. my batis plus 小数没有0_Excel中的数据去掉小数点,教你3个函数解决!
  5. jeecg t:datagrid标签 每页显示条数 扩展
  6. 解读知识蒸馏模型TinyBert
  7. 【Word】关于Word文档写作中遇到的一些问题
  8. iphone如何信任软件_如何在越狱后 iPhone 上多开软件?
  9. VS2010快捷键设置
  10. 机械硬盘与互联网文明
  11. 好的软件测试的简历是什么样的?
  12. selenium 自动化测试 Chrome 大于 63 版本 不能重定向问题解决办法
  13. 走进小作坊(十)----长尾效应
  14. python 格林威治时间转换为标准时间格式
  15. nRF52832 BLE UART
  16. excel表格数据汇总计数如何完成?
  17. 微机原理与接口技术实验:宏实现1+2+3...+100
  18. git 基本命令总结
  19. Python - - 面向对象 - - 初始面向对象
  20. 使用Halo建立自己的网站

热门文章

  1. SAP License:未清项启用
  2. SAP License:雾里看花系列——SAP顾问应该脱离”保姆”的角色
  3. SAP License:把握好集成测试大关,ERP就成功了一大半
  4. 欺诈场景中的随机森林实践(基于SAS场景的实现)
  5. 手把手教你怎么给客群分级(上)
  6. [脚本编程] 过云盾、D盾各种盾shell
  7. 【数论Day1】 最大公约数(gcd)题目
  8. Codeforces Beta Round #71 C【KMP+DP】
  9. 几何画板菜单栏有哪些功能
  10. 项目开发中自定义字段设计原则