节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学,针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何备战、面试常考点分享等热门话题进行了深入的讨论。
合集在这里:《大模型面试宝典》(2024版) 正式发布!
BERT(Bidirectional Encoder Representations from Transformers)是一种基于双向Transformer编码器的预训练语言模型,其独特的模型架构和灵活的输入输出表示使其在各种自然语言处理任务中表现出色。
BERT的预训练过程包括两个任务:Masked Language Model(MLM)和Next Sentence Prediction(NSP)。MLM任务要求模型预测输入序列中被随机遮盖的词元,有助于模型学习词汇的上下文表示;NSP任务则要求模型判断两个句子是否连续,有助于模型理解句子间的关系。通过这两个任务,BERT能够学习到丰富的语言知识和上下文信息。
双向Transformer编码器
上图展示了BERT与先前的两个预训练模型------OpenAI GPT和ELMo之间的比较。
GPT采用了Transformer结构,但它是单向Transformer编码器。
而ELMo虽然利用了双向LSTM,**但这种双向性实际上是通过独立训练的从左到右和从右到左的LSTM进行拼接实现的,因此可以被视为一种伪双向。**此外,LSTM在捕捉长距离依赖方面的能力相较于Transformer是较弱的。
相比之下,BERT是真正意义上的双向语言模型,双向Transformer编码器。
模型架构
BERT(Bidirectional Encoder Representations from Transformers)是一个基于多层Transformer编码器的预训练语言模型,它通过结合输入层Tokenization、多种Embeddings和特定任务的输出层,捕捉文本的双向上下文信息,从而在各种自然语言处理任务中表现出色。
分词层(Tokenization)
BERT中的Tokenization是一个关键步骤,用于将原始的文本数据转换为模型能够理解和处理的数值格式。这个过程主要包含文本的预处理和分词两个阶段。
-
预处理阶段: 文本会经过一系列操作,包括去除标点符号、特殊字符和多余的空格,以及可能的文本清洗和归一化。这些操作旨在确保输入到模型中的文本数据具有一致性和规范性,从而提高模型的处理效果。
-
分词阶段: BERT使用单词标记化(WordPiece)分词方法,将单词进一步拆分成子词(subwords),以便更好地处理词汇表中的未知词和罕见词。
嵌入层(Embedding)
在BERT中,Embedding是将文本数据转化为向量表示的过程,这些向量捕捉了词汇的语义信息。
BERT使用了多种Embeddings,包括词嵌入(Token Embeddings)、段嵌入(Segment Embeddings)和位置嵌入(Position Embeddings)等,以充分表示文本中的信息。词嵌入、段嵌入和位置嵌入三者相加,得到每个Token的最终输入嵌入。
- Token Embeddings: 分词后的Token被映射到一个高维空间,形成Token Embeddings。通过查找一个预训练的嵌入矩阵来实现,该矩阵为每个Token提供一个固定大小的向量表示。
-
Segment Embeddings: 由于BERT能够处理两个句子作为输入(例如,在句子对分类任务中),因此需要一种方法来区分两个句子。
-
Position Embeddings: 由于Transformer模型本身不具有处理序列中Token位置信息的能力,因此需要位置嵌入来提供这一信息。
神经网络层(Network)
BERT 的神经网络层其实是基于 Transformer 的 Encoder 部分构建的,通常包含多层这样的 Encoder 结构,以捕捉文本中的复杂上下文信息。
每一层 Encoder 都包含自注意力机制(Self-Attention)和前馈神经网络(FFN),这使得 BERT 能够有效地处理长距离依赖关系。
输入/输出表示
BERT的输入表示设计灵活,能够表示单个句子或一对句子(如问答对)的词元序列,其中"句子"可以是任意连续文本,不限于语言学上的句子定义。
BERT的输出层根据预训练任务的不同而设计,对于Masked Language Model任务输出被遮盖Token的概率分布,而对于Next Sentence Prediction任务则输出句子对是否连续的二分类概率。
输入表示(Input)
输入表示由一对句子(称为序列)和两个特殊标记组成:[CLS] 和 [SEP]。 使用上述结构向 BERT 提供输入。
例如:一对句子 "my dog is cute" and "he likes playing",
使用
WordPiece 将序列转换为标记,并在开头添加 [CLS] 标记,在第二句的开头和结尾添加 [SEP] 标记。
BERT 中使用的单词标记化必然会将"playing"等单词分解为"play"和"##ing"。这有两个方面的帮助:
-
限制词汇表大小:它有助于限制词汇量的大小,因为我们不必在词汇量中保留各种形式的单词,例如"playing"、"plays"、"player"等。
-
处理未登录词:它可以帮助我们处理词汇外的单词。例如,如果词汇表中没有出现 play,我们可能仍然有 play 和 ## 的嵌入。
输出表示(Output)
BERT的输出表示取决于特定的任务。在预训练阶段,BERT采用了两种任务:掩码语言模型 (MLM)和下一句预测(NSP)。
- 掩码语言模型(MLM): 任务要求BERT预测输入序列中被随机遮盖的Token。模型的输出是每个被遮盖Token的概率分布,通过Softmax层得到。
- 下一句预测(NSP): 任务要求BERT预测两个句子是否是连续的?模型的输出是一个二分类问题的概率分布。
预训练(Pre-training)
在预训练阶段,没有使用传统的从左到右或从右到左的语言模型来预训练BERT。而是采用了两个无监督任务来学习语言的内在规律:遮蔽语言模型(MLM)和下一步预测(NSP)。
MLM任务要求模型预测输入序列中被随机遮盖的词元,这有助于模型学习词汇的上下文表示。而NSP任务则要求模型判断两个句子是否连续,这有助于模型理解句子间的关系,并学习句子级别的表示。
掩码语言模型(MLM)
遮蔽语言模型(MLM)通过随机遮蔽输入词元并预测被遮蔽的词元,实现了深度双向表示的学习,有助于模型捕获丰富的上下文信息,但预训练与微调间存在不匹配,通过混合使用[MASK]、随机词元和原词元来缓解这一问题。
下一步预测(NSP)
下一句预测(NSP)任务通过预测句子对是否连续,帮助BERT模型理解句子间的关系,对问答和自然语言推理等任务非常有益,且BERT将所有参数转移到下游任务以初始化模型参数。
总结
本文全面概述了Transformer的升级模型BERT,一种基于双向Transformer编码器的预训练语言模型。BERT通过创新的预训练方式,包括遮蔽语言模型(MLM)和下一句预测(NSP)任务,成功突破了传统语言模型的限制,实现了深度双向表示的学习。这使得BERT能够捕捉更丰富的上下文信息,提升了对语言内在规律的理解能力。