Bert详解

Bert框架

基本架构

由Transformer的Encoder层堆叠而来

每个部分组成如下:

Embedding

Embedding由三种Embedding求和而成

  • Token Embeddings:词向量,第一个单词是CLS标志,可以用于之后的分类任务

(通过建立词向量表)将每个词转化成一个一维向量,作为模型的输入。首先对文本进行tokenization处理,且在文本开头(CLS)和结尾(SEP)分别插入两个特殊的Token,CLS表示该特征用于分类模型,对非分类模型,该符号可以省去。SEP表示分句符号,用于断开输入语料中的两个句子。

Bert处理英文文本需要含有30522个词,Token Embeddings将每个词转化成768维向量

  • Segment Embeddings:区别两种句子,因为预训练不光做LM(语言模型,从左往右生成),还要做以两个句子为输入的分类任务。

Segment Embeddings有两种向量表示(0,1),用于表示两个句子,前一个句子全部赋值为0,后一个句子全部赋值为1,然后拼接起来。

如问答系统任务要预测下一句,输入是有关联的句子;文本分类只有一个句子,则全部为0

  • Position Embeddings:与Transformer中不一样,不是三角函数的固定位置编码而是学习出来的

由于出现在文本不同位置的字/词所携带的语义信息存在差异(如 "你爱我" 和 "我爱你"),你和我虽然都和爱字很接近,但是位置不同,表示的含义不同。

在 RNN 中,第二个 "I" 和 第一个 "I" 表达的意义不一样,因为它们的隐状态不一样。对第二个 "I" 来说,隐状态经过 "I think therefore" 三个词,包含了前面三个词的信息,而第一个 "I" 只是一个初始值。因此,RNN 的隐状态保证在不同位置上相同的词有不同的输出向量表示。

BERT 中处理的最长序列是 512 个 Token,长度超过 512 会被截取,BERT 在各个位置上学习一个向量来表示序列顺序的信息编码进来,意味着 Position Embeddings 实际上是一个 (512, 768) 的 lookup 表,表第一行是代表第一个序列的每个位置,第二行代表序列第二个位置。

最后,BERT 模型将 Token Embeddings (1, n, 768) + Segment Embeddings(1, n, 768) + Position Embeddings(1, n, 768) 求和的方式得到一个 Embedding(1, n, 768) 作为模型的输入

CLS的作用:

Bert在第一句前会加一个CLS标志,最后一层该位对应向量可以作为整句话的语义表示,从而用于下游的分类任务等。

原因:self-attention是用文本中的其它词来增强目标词的语义表示,但是目标词本身的语义还是会占主要部分的与文本中已有的其它字/词相比,这个无明显语义信息的符号会更"公平"地融合文本中各个字/词的语义信息。

pre-training

bert是一个多任务模型,由两个自监督任务组成,即MLM和NSP

MLM(Mask Language Model)

在训练的时候随机从输入语料上mask掉一些单词 ,然后通过的上下文预测该单词 ,该任务非常像我们在中学时期经常做的完形填空

在BERT的实验中,15%的WordPiece Token会被随机Mask掉。在训练模型时,一个句子会被多次喂到模型中用于参数学习,但是Google并没有在每次都mask掉这些单词,而是在确定要Mask掉的单词之后,做以下处理。

  1. 80%的时候会直接替换为Mask,将句子 "my dog is cute" 转换为句子 "my dog is Mask"。
  2. 10%的时候将其替换其它任意单词,将单词 "cute" 替换成另一个随机词,例如 "apple"。将句子 "my dog is cute" 转换为句子 "my dog is apple"。
  3. 10%的时候会保留原始Token,例如保持句子为 "my dog is cute" 不变。

优点

1)被随机选择15%的词当中以10%的概率用任意词替换去预测正确的词,相当于文本纠错任务,为BERT模型赋予了一定的文本纠错能力;

2)被随机选择15%的词当中以10%的概率保持不变,缓解了finetune时候与预训练时候输入不匹配的问题 (预训练时候输入句子当中有mask,而finetune时候输入是完整无缺的句子,即为输入不匹配问题)。

缺点:针对有两个及两个以上连续字组成的词,随机mask字割裂了连续字之间的相关性,使模型不太容易学习到词的语义信息

NSP(Next Sentence Prediction)

判断句子B是否是句子A的下文。如果是的话输出'IsNext',否则输出'NotNext'

训练数据的生成方式是从平行语料中随机抽取的连续两句话,其中50%保留抽取的两句话,它们符合IsNext关系,另外50%的第二句话是随机从预料中提取的,它们的关系是NotNext的

fine-tuning

微调(Fine-Tuning)的任务包括:

  • 基于句子对的分类任务
  • 基于单个句子的分类任务
  • 问答任务
  • 命名实体识别

优缺点

  • 优点:
    • BERT 相较于原来的 RNN、LSTM 可以做到并发执行,同时提取词在句子中的关系特征,并且能在多个不同层次提取关系特征,进而更全面反映句子语义。
    • 相较于 word2vec,其又能根据句子上下文获取词义,从而避免歧义出现
  • 缺点:
    • 模型参数太多,而且模型太大,少量数据训练时,容易过拟合。
    • BERT的NSP任务效果不明显MLM 存在和下游任务mismathch的情况。
    • BERT对生成式任务和长序列建模支持不好。

内容参考:读懂BERT,看这一篇就够了

相关推荐
马***41111 小时前
适配成人英语学习痛点,打造落地性强的学习辅助方式
人工智能·学习
夜焱辰11 小时前
浏览器端 Agent 的文件版本管理:不用 Git,基于 OPFS + SQLite 自己造了一个
前端·人工智能
Ricky055311 小时前
CTRL-WORLD:一种用于机器人操控的可控生成世界模型(中美2025年联合研究)
人工智能·机器人·世界模型
jeffer_liu11 小时前
Spring AI 生产级实战:工具调用
java·人工智能·后端·spring·ai编程
阿乔外贸日记11 小时前
2026尼日利亚五项清关政策更新,拉高能源装备进口综合成本
大数据·人工智能·搜索引擎·智能手机·云计算·能源
民乐团扒谱机12 小时前
【AI笔记】短时纯音时长对音高感知偏移效应研究综述
人工智能·笔记
侃谈科技圈12 小时前
破除数据中台落地困境:2026数据治理平台差异化能力与选型决策指南
大数据·人工智能
大象说12 小时前
Python多进程共享队列无报错僵死 120G Nginx访问日志清洗踩坑全记录
人工智能·自然语言处理
Cosolar12 小时前
AutoGen 精通教程:从零到企业级多 Agent 系统架构师
人工智能·后端·面试
甲维斯12 小时前
Claude Code 省钱小妙招!200K和自动压缩
人工智能