BERT的出现使我们终于可以在一个大数据集上训练号一个深的神经网络,应用在很多NLP应用上面。

BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

深的双向Transformer

摘要(Abstract):与别的文章的区别是什么?效果有多好?

  • 与ELMo的区别:ELMo基于RNN,双向,在运用到下游的任务时需要做出一些调整。BERT基于Transformer,只需要改最上层。

  • 与GPT的区别:GPT基于Transformer解码器,单向,用左边的上下文信息预测。BERT基于Transformer编码器双向。

BERT的好处:简单且效果好,在11个NLP任务上都比较好。

引言(Introduction):语言模型的简单介绍;摘要第一段的扩充;

在使用预训练模型做特征表示的时候,通常有两种策略:

  • 基于特征

    ELMo,对于每一个下游任务,构造一个与之相关的神经网络,RNN架构,将预训练好的(比如一个词嵌入矩阵)作为额外特征一起作为输入,输入到模型里面,达到训练模型比较容易的目的。

    简单来说:这是大多数NLP最常用的使用预训练模型的方法,把学到的特征和输入一起放进去。

  • 基于微调

    GPT,引入了最小的特定于任务的参数,预训练好的参数进行微调

这两种方法在预训练及之后都使用相同的目标函数(GPT也不全是吧),且都使用单向的语言模型进行学习。(预测未来)

Bert主要想法:预测未来---->完形填空,用masked language model,带掩码的语言模型

​ 除此之外,Bert还关注了句子层面的信息:给两个句子,判断这两个句子是不是相邻的。(NSP)

贡献点:双向信息的重要性(句子从左看到右,从右看到左)

​ 在BERT上做微调效果很好

​ 代码开源

结论(Conlusion):

无监督的预训练很重要(在计算机视觉领域,在没有标签的数据集上做训练比在有标签的数据集上做训练效果会更好);

主要贡献是将这些发现进一步推广到深度双向架构,使相同的预训练模型能够成功处理一系列的 NLP 任务。
在本篇论文的结论中最大贡献是双向性(在写一篇论文的时候,最好有一个卖点,而不是这里好那里也好)。
选了选双向性带来的不好是什么?做一个选择会得到一些,也会失去一些。
缺点是:与GPT(Improving Language Understanding by Generative Pre-Training)比,BERT用的是编码器,GPT用的是解码器。BERT做机器翻译、文本的摘要(生成类的任务)不好做。
但分类问题在NLP中更常见。
完整解决问题的思路:在一个很大的数据集上训练好一个很宽很深的模型,可以用在很多小的问题上,通过微调来全面提升小数据的性能(在计算机视觉领域用了很多年),模型越大,效果越好(很简单很暴力)。

相关工作(Related Work)

2.1非监督的基于特征的一些工作如词嵌入,ELMo

2.2非监督的基于微调 的一些工作如GPT

2.3在有标注的大数据集上训练好的模型,做迁移学习(CV上用的很多,在ImageNet上训练好,应用到其他任务,但NLP上还不是很理想)

注:BERT和后面的文章说明了在无标注的大数据集上训练的效果要比在有标注的数据集上训练出来的效果更好。同样的思想现在也在CV中应用了。

BERT

  • 预训练

    在一个无标注的数据集上进行训练

  • 微调

    同样使用一个BERT模型,但其参数初始化成预训练中的BERT模型,所有的权重在微调时都会参与训练(用有标注数据集)

    每个下游任务都会创建一个新的BERT模型

模型架构

multi-layer bidirectional Transformer encoder

多层双向Transformer 编码器,和原始的Transformer没什么区别。

细节:改了三个参数

L:Transformer 块的个数

H:FC的隐藏层大小

A:多头注意力头的大小

BERT-BASE(12,768,12)

BERT-LARGE(24,1024,16)

BERT模型的复杂度和L是线性关系,和H是平方关系,L变成2倍,(1024 * 1024)/(768 * 768)≈ 2

怎么通过超参数L、H、A计算出可学习参数的大小,顺便回顾一下Transformer

参数主要来自于两块:

  • 嵌入层
  • Transformer块

输入和输出

输入有两种

  • 一个句子,不是我们通常说的句子,是一组词(不想管也无所谓)
  • 一个句子对<Question,Answer>,因为BERT并不像Transformer有编码器和解码器,BERT只有编码器,所以要把两个句子合成一个Sequence

Wordpiece切词:

​ 空格切词,一个词当作一个token会导致词典很大,所以对于出现概率不大的单词,只保留它的子序列(词根),切完只有30000个

如何合成两个句子?

​ 每一个Sequence的第一个词都是[CLS],BERT希望最后的输出代表的是整个句子层面的信息,这就是Attention厉害的地方了。

两个句子合在一起怎么进行区分呢?

  • 每个句子后放一个特殊符号[SEP]
  • 学一个嵌入层,是第一个还是第二个

每一个词元(token)进入BERT之后如何被表示成Embedding呢?

Token:词嵌入

Segment:在那个句子中

Position:位置 (Transformer中位置编码是人定的,BERT中是学出来的)

上述的都是预训练和微调相同的部分

下面是不同的部分

Task1. Masked LM (完形填空)

在预训练的过程中,他们以15%的概率把一个词变成[Mask]([CLS]和[SEP]除外)也即一个带掩码的语言模型,然后进行训练。但在微调的过程中,也没有Mask这个东西啊。

个人理解:预训练采用拿出一篇完型填空让机器学的方式,然后微调用在其他任务中。两个阶段的目标函数都不一样。

所以预训练和微调所看到的数据会有一点不一样。

咋解决呢?

80%的概率是真的变成了[Mask]

10%随即替换成了一个别的词(噪声)

10%什么都不变,但是标记一下这是我要预测的词(和微调时的情况一样)

Task2. Next Sentence Prediction (NSP)(预测下一个句子)

输入两个句子,判断这两句话是不是连着的

微调

BERT这种只有编码器的结构,相比于编码器解码器结构也有好处:编码器解码器两个输入互相看不见,但是BERT可以,但缺点也有,不能像Transformer做机器翻译。

应用在在下游任务

GLUE(多分类问题)

​ 拿到[CLS]后,学习一个输出层WWWsoftmax(CWT)softmax(CW^T)softmax(CWT)

SQuAD(QA问题)

​ 问题描述:给一段话,问一个问题,答案隐藏在这段话中。

​ 所以就是截取片断,对每个词元判断是不是答案的开头和答案的结尾。具体公式略

SQuAD 2.0

​ 略

SWAG(判断两个句子之间的关系)

​ 和预训练差不多

接下来讲了模型中每个模块对整体的影响以及参数个数对模型的影响,企图增强模型的可解释性。

再接下来试了一下不微调,发现效果没有微调好。。。

【论文阅读笔记】BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding相关推荐

  1. 论文阅读笔记:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

    提示:阅读论文时进行相关思想.结构.优缺点,内容进行提炼和记录,论文和相关引用会标明出处. 文章目录 前言 介绍 背景知识 相关工作 具体实现结构 Pre-training BERT Fine-tun ...

  2. 论文阅读——BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

    BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding Abstract 作者引入了一种新的语 ...

  3. BERT(一)--论文翻译:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

    转载请注明出处:https://blog.csdn.net/nocml/article/details/124860490 传送门: BERT(一)–论文翻译:BERT: Pre-training o ...

  4. bert论文解析——BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

    BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 前言 bert是google在NLP方 ...

  5. 【文本分类】BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

    ·阅读摘要:   Bert是继Transformer之后的又一杰出的模型.Bert是一种预训练语言模型,是在GPT.Elmo.Transformer的基础上提出的.基于Bert的多个NLP领域任务都取 ...

  6. 预训练模型:BERT深度解析《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》

    目录 1. 背景 2. 什么是 Bert 及原理? 3. 论文内容<BERT: Pre-training of Deep Bidirectional Transformers for Langu ...

  7. 《BERT:Pre-training of Deep Bidirectional Transformers for Language Understanding》

    目录 <BERT:Pre-training of Deep Bidirectional Transformers for Language Understanding> 1.Bert研究意 ...

  8. Paper:《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding用于语言理解的深度双向Tr

    Paper:<BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding用于语言理解的深度双 ...

  9. BERT论文阅读(一): Pre-training of Deep Bidirectional Transformers for Language Understanding

    BERT三大核心: pre-training bidirectional==>alleviates the unidirectionality constriant of fine-tuning ...

最新文章

  1. 字节跳动java笔试题目_牛客网--字节跳动面试题--特征提取
  2. R语言使用caret包构建gbdt模型(随机梯度提升树、Stochastic Gradient Boosting )构建回归模型、通过method参数指定算法名称
  3. java6特性_Java6的新特性
  4. padding 不占宽高_不占地方的复式楼室内电梯,极致微型,节电省力颜值高
  5. iOS之深入解析Runtime的objc_msgSend“慢速查找”底层原理
  6. ldap接触(1)之如何把安全证书导入到java中的cacerts证书库
  7. wdk1703+vs2015编译的诡异问题
  8. 【论文写作】2021毕业论文写作选题技巧,建议收藏!
  9. 计算机格式化系统,硬盘被苹果电脑格式化后如何恢复数据?
  10. 计算机网络华为模拟器,华为模拟器eNSP Win10版
  11. 检验检测系统管理服务器,检验检测管理平台
  12. 动态域名解析服务(花生壳)
  13. 卡内基梅隆大学计算机科学博士,2020年卡内基梅隆大学博士专业设置
  14. ENOVIA SmarTeam-CEO演讲PPT
  15. Android校园社区平台 校园通 校园生活服务平台app
  16. turtle画樱花树林
  17. 《Adobe InDesign CS5中文版经典教程》—第1课1.2节工作区简介
  18. 基于Intel 82571芯片的网卡介绍
  19. Cadence Pspice添加外部白噪声
  20. python爬虫如何爬亚马逊_Python爬取当当、京东、亚马逊图书信息代码实例

热门文章

  1. 【Elang】dialyzer
  2. 求n以内的最大素数 ← C++
  3. CSS一篇文章搞懂系列6:超全的字体篇与背景设置内容,花里胡哨起来
  4. ISTQB TM考点总结之第三章
  5. centos7无盘启动_centos启动tftp服务器
  6. sd卡烧写linux内核,uboot从SD卡烧写内核和文件系统
  7. 我的Python分析成长之路9
  8. (CVE-2020-11800)Zabbix_Server_trapper_命令注入漏洞
  9. 区间dp入门——总结+习题+解析
  10. MP3Play项目实战 (1)