BERT模型详解及代码复现
架构设计
BERT模型的架构设计是其成功的关键之一,它巧妙地融合了Transformer架构的优势,并针对自然语言处理任务进行了优化。具体来说,BERT的架构主要由三个模块组成:
-
Embedding模块 :负责将输入的文本转换为模型可处理的向量表示。该模块由三种Embedding组成:
-
Token Embedding:将输入的每个token(通常是WordPiece)映射到一个低维向量空间。
-
Segment Embedding:用于区分不同的句子,例如在问答任务中区分问题和答案。
-
Positional Embedding:捕捉token在句子中的位置信息,弥补Transformer结构中缺少顺序信息的不足。
-
Transformer模块 :这是BERT的核心组件,由多个Transformer Encoder层堆叠而成。每个Encoder层包含两个子层:
-
Multi-Head Self-Attention:允许模型同时关注输入序列中的不同位置,捕捉长距离依赖关系。
-
Feed-Forward Network:对Self-Attention的输出进行非线性变换,增强模型的表达能力。
在具体实现中,BERT提供了两种不同规模的模型:
模型 |
层数 |
隐藏层大小 |
头数 |
参数总量 |
---|---|---|---|---|
BERT-base |
12 |
768 |
12 |
110M |
BERT-large |
24 |
1024 |
16 |
340M |
-
预微调模块 :在预训练完成后,根据具体的下游任务在BERT模型上添加一个或多个特定的神经网络层。例如,对于文本分类任务,可以添加一个简单的全连接层作为分类器。
BERT架构的一个重要特点是其双向性。传统的语言模型通常采用单向结构,只能捕捉到当前token之前或之后的信息。而BERT通过使用Masked Language Modeling(MLM)预训练任务,使得模型能够同时学习前后文信息,从而获得更全面的语义表示。
在最新的研究中,研究者们对BERT架构进行了一些改进。例如, ERNIE 模型在Embedding模块中引入了知识图谱信息,通过将知识图谱中的实体信息与文本中的token进行对齐,进一步增强了模型对语义的理解能力。
例如,在处理”李白“这个token时,ERNIE不仅考虑了其在文本中的上下文,还结合了知识图谱中关于李白的人物信息,如他是唐代诗人、代表作有《静夜思》等。
这种改进使得模型能够更好地处理需要常识知识的NLP任务,如知识问答、信息检索等。
预训练任务
BERT模型的预训练任务是其强大性能的基础,主要包括两个关键任务: 掩码语言建模(Masked Language Modeling, MLM) 和 下一句预测(Next Sentence Prediction, NSP) 。这两个任务的巧妙设计使得BERT能够学习到丰富的语义信息和语言结构,为后续的微调任务奠定了良好的基础。
-
掩码语言建模(MLM) 任务旨在通过预测被掩码的token来学习文本的语义信息。具体而言,在预训练阶段,模型会随机选择15%的token进行替换,其中:
-
80%被替换为”[MASK]“
-
10%被替换为随机token
-
10%保持不变
这种改进的替换策略有效减少了预训练和