返回

LLM系列-5:Bert模型详解

总体内容

image-20250417162849458

BERT是用了Transformer的encoder侧的网络。

Bert网络结构

img

如图所示, 最左边的就是BERT的架构图, 可以看到BERT采用了Transformer Encoder block进行连接, 因为是一个典型的双向编码模型,多头自注意力中的每个头的输入都同时蕴含了前后文的语言信息。从上面的架构图中可以看到, 宏观上BERT分三个主要模块:

  • 最底层黄色标记的Embedding模块
  • 中间层蓝色标记的Transformer模块
  • 最上层绿色标记的预微调模块

Embedding层

img
image-20250417172153609

BERT中的 Embedding 模块是由三种 Embedding 共同组成而成。将文本输入到LLM后,首先进行的是 tokenization 处理,且两个特殊的 Token 会插入在文本开头 [CLS] 和结尾 [SEP]。[CLS]表示该特征用于分类模型,对非分类模型,该符号可以省去。[SEP]表示分句符号,用于断开输入语料中的两个句子。

  • Token Embeddings:将词表中的每个 token 转化为高维向量作为输入,首个单词 CLS 用于分类任务
    • 通过建立词表将每个token转换成一个高维向量,作为模型输入。特别的,英文词汇会做更细粒度的切分。将词切割成更细粒度的 Word Piece 是为了解决未登录词的常见方法。
  • Segment Embeddings:用于区分句子界限,分别以 0 和 1 标记不同句子
  • Position Embeddings:用于记录文本中各 token 的相对顺序
    • 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) 作为模型的输入。

Transformer中position Embedding是用的三角函数,BERT中也有一个Postion Embedding是随机初始化,然后从数据中学出来的。

[CLS]的作用

BERT在第一句前会加一个[CLS]标志,最后一层该位对应向量可以作为整句话的语义表示,从而用于下游的分类任务等。因为与文本中已有的其它词相比,这个无明显语义信息的符号会更“公平”地融合文本中各个词的语义信息,从而更好的表示整句话的语义。

Encoder层

img

BERT是用了Transformer的encoder侧的网络,BERT的维度是768维度,然后分成12个head,每个head的维度是64维。BERT模型分为24层和12层两种,其差别就是使用transformer encoder的层数的差异。

  • BERT-base : L=12,H=768,A=12,参数总量110M;
  • BERT-large: L=24,H=1024,A=16,参数总量340M;

参考

The Illustrated Transformer – 图解transformer (超详细)

读懂BERT,看这一篇就够了 (结构详解)

BERT模型架构与详解 (清晰)

BERT 详解_bert模型

BERT系列(二)BERT模型的核心架构 (链接多)

博主推荐:

后厂NLPer-博客

语言模型 & Co. |杰伊·阿拉马尔 (图解系列,优质博主)

Jay Alammar (同上,旧博客)

光终究会洒在你的身上,你也会灿烂一场!
本博客已稳定运行