BERT模型

发布时间 2023-12-25 17:46:55作者: xd_xumaomao

BERT模型介绍

BERT模型的全称是:BidirectionalEncoder Representations from Transformer。从名字中可以看出,BERT模型的目标是利用大规模无标注语料训练、获得文本的包含丰富语义信息的Representation,即:文本的语义表示,然后将文本的语义表示在特定NLP任务中作微调,最终应用于该NLP任务

 

模型输入、输出

BERT 模型中每个 token 的输入表示由三个 Embedding 向量求和得来,即:

  • token embedding: 每个词本身的 embedding。
  • segment embedding:每个词所在句子的标记 embedding,来自同一个句子的词它们的segment embedding是相同的,也就是说,该embedding本意在于区分词的来源,它向最终的输入表示提供了句子来源信息,有助于文本对的训练任务。
  • position embedding:句子中每个词位置的 embedding,类似于 Transformer 中的 positional encoding,不同之处在于,BERT模型会直接学习每个词的位置表示,而 Transformer 是利用双曲函数对其位置进行固定编码。
 对于中文来说,一个字就是一个token,但是对于英文来说,会将英文词汇作进一步切割,划分为更细粒度的语义单位(WordPiece),例如:将playing分割为play和##ing

对于不同的NLP任务,模型输入会有细微调整,例如:

  • 单文本分类任务:对于文本分类任务,BERT模型在文本前插入一个[CLS]符号,并将该符号对应的输出向量作为整篇文本的语义表示,用于文本分类,如下图所示。可以理解为:与文本中已有的其它字/词相比,这个无明显语义信息的符号会更“公平”地融合文本中各个字/词的语义信息。

  

  • 语句对分类任务:该任务的实际应用场景包括:问答(判断一个问题与一个答案是否匹配)、语句匹配(两句话是否表达同一个意思)等。对于该任务,BERT模型除了添加[CLS]符号并将对应的输出作为文本的语义表示,还对输入的两句话用一个[SEP]符号作分割,并分别对两句话附加两个不同的文本向量以作区分,如下图所示。

 

预训练任务

在预训练阶段,模型有两个任务,即Masked Language Model (简称MLM) 和Next Sentence Prediction (简称NSP) 

MLM

MLM的任务描述为:给定一句话,随机抹去这句话中的一个或几个词,要求根据剩余词汇预测被抹去的几个词分别是什么

具体来说,文章作者在一句话中随机选择15%的词汇用于预测。对于在原句中被抹去的词汇,80%情况下采用一个特殊符号[MASK]替换,10%情况下采用一个任意词替换,剩余10%情况下保持原词汇不变。这么做的主要原因是:在后续微调任务中语句中并不会出现[MASK]标记,而且这么做的另一个好处是:预测一个词汇时,模型并不知道输入对应位置的词汇是否为正确的词汇(10%概率),这就迫使模型更多地依赖于上下文信息去预测词汇,并且赋予了模型一定的纠错能力。

NSP

NSP的任务描述为:给定一篇文章中的两句话,判断第二句话在文本中是否紧跟在第一句话之后

假设选取句子对A和B:

  • 有 50% 的概率选取的句子B就是句子A的下一句(将句子对标记为IsNext)
  • 有 50% 的概率句子B是从语料库中随机选取的句子 (将句子对标记为NotNext)

 

模型结构

BERT用的是transformer的encoder结构(下图的红色部分)

把多个Transformer Encoder一层一层地堆叠起来,就得到了BERT模型

 

BERT Fine-tuning

 BERT的fine-tuning,与GPT的第二阶段类似,通常是根据任务在pre-training模型上再加一层简单的网络层

 

参考资料

https://cloud.tencent.com/developer/article/1389555

https://zhuanlan.zhihu.com/p/558393190?utm_id=0