【深度学习】深刻理解BERT
【深度学习】深刻理解BERT
BERT(Bidirectional Encoder Representations from Transformers)是由Google于2018年提出的一种预训练的语言表示模型,它基于Transformer架构并能够处理自然语言处理(NLP)中的多种任务。BERT的核心创新是其使用了双向编码器的思想,相比于之前单向的语言模型(如GPT),BERT能同时利用上下文信息。
BERT整体架构
BERT由Transformer中的encoder组成,其中BERT模型有多个版本,主要有BERT-Base和BERT-Large。BERT-Base包含12层的Transformer编码器,每层有768个隐藏单元和12个自注意力头。BERT-Large则有24层Transformer编码器,每层有1024个隐藏单元和16个自注意力头,其中BERT-Large有更多的参数,通常能够获得更好的效果。encoder由三个部分组成——输入部分、多头注意力机制部分和前馈网络部分。对于BERT中的encoder,我们重点关注的是输入部分,对于Transformer来说,输入部分分为input embedding和positional encoding,但在BERT中,输入部分为token embedding、segment embedding和 position embedding。
如下图所示,input的内容有三种——普通词汇、
BERT 训练
BERT的目的是想基于微调的NLP模型,预训练的模型抽取了足够多的信息,新的任务只需要增加一个简单的输出层。因此,BERT的训练包含pre-train和fine-tune两个阶段。pre-train阶段模型是在无标注的标签数据上进行训练,fine-tune阶段,BERT模型首先是被pre-train模型参数初始化,然后所有的参数会用下游的有标注的数据进行训练。
BERT预训练
BERT在大规模语料库上进行无监督预训练,学习到丰富的语言表示。对于无监督的目标函数来说,有两种目标函数比较受到重视:
Masked Language Model(MLM):AR(autoregressive)自回归模型,只能考虑单侧的信息,典型的就是GPT。如果输入“我喜欢苹果”,P(我喜欢苹果)= P(我)P(喜|我)P(欢|我喜)P(苹|我喜欢)(果|我喜欢苹)。
Next Sentence Prediction(NSP):AE(autoencoding)自编码模型,从损坏耳朵输入数据中预测重建原始数据。可以使用上下文的信息,BERT就是使用的AE。如果输入“我喜欢苹果”,需要经过mask,mask之后得到 “ 我喜欢苹mask”,那么 P(我喜欢苹果|我喜欢苹mask)= P(mask=果|我喜欢苹)。
在MLM任务中,BERT使用了掩码语言模型来进行预训练,随机遮蔽输入文本中的某些单词,并让模型预测这些被遮蔽的单词。这种方式让BERT可以捕捉到更丰富的上下文信息。当我们进行两个词的mask之后得到“我喜欢mask mask”,P(我喜欢苹果|我喜欢mask mask) = P(苹|我喜欢)P(果|我喜欢),这样的话我们可以看到“苹”和“果”两个词是独立的,但其实并不是,这也是mask的缺点之一。在BERT中,80%概率下,将选中的词元变成
for index in mask_indices:
if random.random() < 0.8:
masked_token = "[MASK]"
else:
if random.random() < 0.5:
masked_token = tokens[index]
else:
masked_token = random.choice(vocab_list)
在NSP任务中,BERT通过预测两个句子是否是连续的(即判断句子A是否紧跟在句子B后)来增强其句子级别的理解能力。NSP样本分为正样本和负样本,正样本是从训练语料库中去除两个连续的段落,负样本是从不同的文档中随机创建一堆段落。但是,NSP将主题预测和连贯性预测合并成了一个单项任务。
BERT的微调
在海量的语料上训练完BERT之后,便可以将其应用到NLP的各个任务中了。 微调(Fine-Tuning)的任务包括:基于句子对的分类任务,基于单个句子的分类任务,问答任务,命名实体识别等。
基于句子对的分类任务:需要判断两个句子之间的关系或相似性。
MNLI (Multi-Genre Natural Language Inference):
任务描述:给定一个前提(Premise),根据这个前提推断假设(Hypothesis)与前提的关系。任务的目标是确定假设与前提之间的关系是否成立。
关系分类:任务的标签有三种类型:
蕴含关系(Entailment):假设在语义上可以从前提推导出。
矛盾关系(Contradiction):假设与前提在语义上相互矛盾。
中立关系(Neutral):假设与前提之间没有明确的推导关系。
例子:
前提:“The cat sat on the mat.”
假设:“A cat is resting on a rug.”
标签:蕴含关系(Entailment)
QQP (Quora Question Pairs):
任务描述:判断Quora上两个问题句是否表示的是一样的意思。
目标:判断两个问题是否问的是同一件事,从而判断它们是否具有相同的意图。
例子:
问题1:“What is the best way to lose weight?”
问题2:“How can I shed fat fast?”
标签:相同(Duplicate)
QNLI (Question Natural Language Inference):
任务描述:用于判断一个文本是否包含问题的答案,类似于阅读理解的定位问题。
目标:给定一个问题和一段文本,判断这段文本是否包含问题的答案。
例子:
问题:“What is the capital of France?”
文本:“France is a country in Europe. Paris is its capital.”
标签:是(Yes)
STS-B (Semantic Textual Similarity - Benchmark):
任务描述:预测两个句子的相似性,输出一个数值(0到5之间)。
目标:评估两个句子的语义相似度。这个任务是一个回归问题,不是分类问题。
例子:
句子1:“I like to play football on Sundays.”
句子2:“Football is a sport I enjoy playing on weekends.”
标签:4(非常相似)
MRPC (Microsoft Research Paraphrase Corpus):
任务描述:判断两个句子是否是等价的(是否语义相同)。
目标:判断两个句子是否是同义句。
例子:
句子1:“I will arrive in the morning.”
句子2:“I will reach there by the morning.”
标签:相同(Paraphrase)
RTE (Recognizing Textual Entailment):
任务描述:类似于MNLI,但仅对蕴含关系进行二分类判断。
目标:判断两个句子之间是否有蕴含关系。
例子:
前提:“The dog is running in the park.”
假设:“A dog is playing outside.”
标签:蕴含关系(Entailment)
SWAG (Situations With Adversarial Generations):
任务描述:从四个选项中选择一个,作为前句的自然下文。
目标:通过选择合适的下文来理解前句的意义和场景。
例子:
句子:“He opened the door and stepped outside.”
选项:
- “He turned around and closed the door.”
- “He felt the warm sun on his face.”
- “The door slammed shut behind him.”
- “He heard a car honking from the street.”
- 标签:选项2(自然下文)
基于单个句子的分类任务:主要是针对单个句子的分类问题。
SST-2 (Stanford Sentiment Treebank):
任务描述:电影评价的情感分析,判断句子的情感是正面还是负面。
目标:基于给定的电影评论句子判断情感极性(正面或负面)。
例子:
句子:“The movie was amazing and heartwarming.”
标签:正面(Positive)
CoLA (Corpus of Linguistic Acceptability):
任务描述:判断句子是否语法上可接受。
目标:判断给定的句子是否符合语言的语法规则。
例子:
句子:“He is running.”
标签:可接受(Acceptable)
问答任务:涉及从给定文本中提取答案。
- SQuAD v1.1 (Stanford Question Answering Dataset):
- 任务描述:给定一个问题和一段描述文本,输出问题的答案。
- 目标:通过模型在文档中定位问题的答案,类似于做阅读理解的简答题。
- 例子:
- 问题:“What is the capital of France?”
- 文本:“France is a country in Europe. Paris is its capital.”
- 答案:Paris
命名实体识别任务(NER):这类任务的目标是识别句子中的命名实体。
- CoNLL-2003 NER (Named Entity Recognition):
- 任务描述:判断句子中的单词是否是命名实体,如人名、组织名、地点名等。
- 目标:从给定的文本中提取出命名实体并进行分类。
- 例子:
- 句子:“Barack Obama was born in Hawaii.”
- 实体:Barack Obama(人名),Hawaii(地点名)
BERT、GPT、ELMO的区别
下面是BERT、GPT和ELMO的对比表格:
特性 | BERT | GPT | ELMO |
---|---|---|---|
模型架构 | Transformer 编码器 (双向) | Transformer 解码器 (单向) | 双向LSTM |
训练目标 | Masked Language Model (MLM),Next Sentence Prediction (NSP) | 自回归语言模型 (预测下一个词) | 上下文相关的词嵌入 (基于LSTM) |
训练方式 | 双向(左右文同时考虑) | 单向(仅考虑左侧上下文) | 双向(前向和反向LSTM) |
应用场景 | 文本分类、问答、命名实体识别、推理任务等 | 文本生成、对话生成、翻译等 | 情感分析、问答、文本分类、命名实体识别等 |
优点 | 强大的上下文理解能力,适合推理任务和理解任务 | 强大的文本生成能力,适合生成任务 | 动态生成词嵌入,能够捕捉上下文的词义变化 |
主要优势 | 适用于理解类任务,处理句子对之间的关系 | 适用于生成类任务,生成流畅的文本 | 提供上下文相关的词嵌入,灵活性强 |
任务示例 | 文本分类(SST-2),问答(SQuAD),推理(MNLI) | 文本生成,翻译,问答等 | 情感分析,问答,文本分类等 |
参考资料:
一文彻底搞懂 Bert(图解+代手撕)_bert详解-CSDN博客
https://blog.csdn.net/weixin_42029738/article/details/139578563
读懂BERT,看这一篇就够了 - 知乎
https://zhuanlan.zhihu.com/p/403495863
预训练之NSP任务详解_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Ey4y1874y?spm_id_from=333.788.player.switch&vd_source=0dc0c2075537732f2b9a894b24578eed&p=4
https://www.bilibili.com/video/BV1Ey4y1874y?spm_id_from=333.788.player.switch&vd_source=0dc0c2075537732f2b9a894b24578eed&p=4
预训练之MLM详解_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Ey4y1874y?spm_id_from=333.788.videopod.episodes&vd_source=0dc0c2075537732f2b9a894b24578eed&p=3
https://www.bilibili.com/video/BV1Ey4y1874y?spm_id_from=333.788.videopod.episodes&vd_source=0dc0c2075537732f2b9a894b24578eed&p=3
Bert输入部分详细解读_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Ey4y1874y?spm_id_from=333.788.videopod.episodes&vd_source=0dc0c2075537732f2b9a894b24578eed&p=2
https://www.bilibili.com/video/BV1Ey4y1874y?spm_id_from=333.788.videopod.episodes&vd_source=0dc0c2075537732f2b9a894b24578eed&p=2
70 BERT微调【动手学深度学习v2】_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV15L4y1v7ts?spm_id_from=333.788.recommend_more_video.0&vd_source=0dc0c2075537732f2b9a894b24578eed