- hsfzbzjr's blog
《BERT ……》 阅读笔记
- 2024-7-18 13:53:20 @
to do: 补图片链接
《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》 阅读笔记
[toc]
Warning : 本文跳过了原论文中大量的数据列举
BERT : Bidirectional Encoder Representation from Transformer
特点
- "Bidierectional" :不同于 GPT(Generate Pre-training Transformer) 的从左到右的体系结构——Attention 层中的每个 token 只能注意到它左侧的 token,BERT 的体系结构是双向的,也就是可以同时注意到左侧上下文和右侧上下文
- "Transformer" : ELMo(Embedding from Language Model) 的双向 LSTM 也可以利用到左侧上下文和右侧上下文的信息,但是 BERT 是基于 Transformer 的,比基于 LSTM 的 ELMo 效果更好
Pre-training : Why&How
Why
Language model pre-training has been shown to be effective for improving many natural language processing tasks.
感性理解:学习新知识,基于已有的相关知识进行学习显然优于啥都不会从头开始
How
feature-based (基于特征):ELMo
fine-tuning (微调):GPT、BERT
Feature-based
从上下文中提取信息并和模型已经训练好的 Word Embedding 一起调整这个单词实际的 Word Embedding
Fine-tuning
把在源数据集上训练的源模型的能力迁移到新数据新模型上
BERT 模型结构
输入输出表示
为了处理多样的下游任务,BERT 模型的输入既可以支持输入单一句子,也可以支持输入一个句子对
每个输入序列的第一个 token 是一个特殊的分类嵌入编码( ),最后一层的隐藏状态会与这个 token 有关,如果此时模型解决的是分类任务,那么这个位置的状态中就会蕴含整个句子的信息。
如果输入的符号表示的序列是一个句子对,那么在两个句子对之间会插入一个特殊的起分隔作用的 token () 。
每个单词有三个 embedding :
- 单词 embedding
- 句子 embedding,用于区分两个句子
- 位置信息 embedding
![](D:\编程\暑假大模型\day1\pic\bert embedding.png)
Masked LM
双向的语言模型可能会使得一个单词间接的“看到自己”,怎么办?
采取一种特殊的 mask 机制!
在输入的语料中随机(输入语料中 15% 的单词)的将一些位置的单词 mask 掉,然后让模型预测该位置的单词,相当于让模型做一个完型填空。
一个缺陷:可能会让模型认为只需要预测被 mask 掉的单词是什么,而无需考虑其余单词,另外,在 fine-tuning 阶段的输入语料中不会含有 mask 标签,也存在数据分布不同的现象。
改进:对于被选中要 mask 的单词
- 80% 的概率将该单词替换为 [Mask] 标记
- 10% 的概率将该单词替换为随机单词
- 10% 的概率不做改变
Next Sentence Prediction
许多重要的下游任务如 Question Answering(QA) 或 Natural Language Inference(NLI) 都是基于对句子间的关系的理解
于是在 BERT 的 Pre-training 中就加入了 NSP(Next Sentence Prediction,预测下一个句子) 的任务
具体来说,输入语料是一个句子对 ,有 50% 的概率 B 就是出现在 A 后面的句子,有 50% 的概率不是,而在上面的 BERT 的结构图中,最后一层隐藏状态的第一个 token (C) 就是用来表示模型预测 B 是否是 A 的后一个句子
Fine-tuning BERT
fine-tuning 阶段的 BERT 基本只需要调整输出层以及在新的数据集上重新训练一遍,但 fine-tuning 阶段的训练代价远低于 Pre-training 的代价
fine-tuning 时的 BERT 的初始参数完全可以使用 Pre-training 后的 BERT 的参数