年份:2018 论文链接:1810.04805 (arxiv.org)
code: https://github.com/google-research/bert
与transformer的区别
摘要
BERT的设计目的是目的是捕捉输入文本的上下文双向信息,通过无监督预训练(如 Masked Language Model 任务)后,可以通过微调应用于各种下游任务,如文本分类、命名实体识别、问答等。
引言
以往的语言模型是单向的,即每个token只能关注先前的token,限制了预训练表示的能力。
提出Bert (双向注意力编码)通过MLM( masked language model)进行预训练。
MLM
一种自监督学习的方式,模型通过预测被遮蔽的词语来进行训练,帮助其理解句子的整体语义和语境
基本原理
- 随机遮蔽输入句子中的词: 在每个输入句子中,模型会随机选择一部分词进行遮蔽(通常是句子中 15% 的词),这些被遮蔽的词用特殊的
[MASK]
标记替代。例如,句子 "The cat is on the mat" 可能被随机遮蔽为 "The [MASK] is on the [MASK]”。 - 预测被遮蔽的词: 模型的目标是根据句子中其他未被遮蔽的词来预测那些被
[MASK]
遮蔽的词。通过这样,模型需要利用句子的上下文来理解每个词的含义和功能。例如,模型应该预测第一个[MASK]
可能是 "cat",第二个[MASK]
可能是 "mat"。
优点
- 上下文双向性:MLM 使模型能够在双向上下文中捕捉词语的语义关系,既考虑左边的词,也考虑右边的词。这与传统的单向语言模型不同,后者只关注当前词之前的上下文。
- 自监督学习:MLM 不需要大量标注数据,因为它依赖于从大规模未标注的文本中自动生成训练样本(通过遮蔽词语)。因此,模型可以在海量的文本数据上进行预训练,极大地提升了其在下游任务中的表现。
Method
总体框架:预训练+微调,除了输出层外,预训练和微调中使用的架构是相同的。相同的预训练模型参数用于初始化不同的下游任务模型。在微调过程中,所有参数都会被微调。[CLS] 是一个特殊符号,添加在每个输入样例的前面,[SEP] 是一个用于分隔的特殊标记(例如,用于分隔问题/答案)。
模型输入
BERT 的输入表示是通过结合词嵌入、位置嵌入和分段嵌入生成的。对于每个输入序列,BERT 使用以下三种信息来构建输入向量:
这些嵌入会被加在一起,构成 BERT 的输入表示
BERT 编码器 (BERT Encoder)
BERT 编码器是基于 Transformer 编码器 堆叠的多层网络(BERT-base 有 12 层,BERT-large 有 24 层),每一层包含两部分:
- token Embeddings(词嵌入):每个词(或子词)对应一个固定维度的嵌入向量。
- Segment Embeddings(分段嵌入):用于表示句子 A 或句子 B。在句子对任务中(如问答系统),不同句子会有不同的嵌入向量。
- Position Embeddings(位置嵌入):因为 Transformer 没有递归结构,因此需要位置嵌入来表征输入词的相对位置信息。
-
头自注意力机制(Multi-head Self-Attention Mechanism):每个词的表示向量会和输入句子中的所有其他词进行交互,计算它们之间的相关性,从而捕捉全局上下文信息。BERT 的自注意力机制是双向的,也就是说每个词既能看到前面的词,也能看到后面的词。
-
前馈神经网络(Feedforward Neural Network):自注意力层的输出会通过一个前馈神经网络进行处理,然后应用残差连接和层归一化(Layer Normalization)
模型的输出
包括词级别的输出和句子级别的输出
bert和bart的区别
后面又出现了BART(Bidirectional and Auto-Regressive Transformers),架构还是基于transformer