目录
2.3.1任务一:Masked Language Modeling MLM掩蔽语言模型任务
2.3.2 任务二:next sentence prediction
1.BERT的理论
BERT全称叫做Bidirectional Encoder Representations from Transformers, 论文地址: [1810.04805] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (arxiv.org)
BERT是谷歌AI研究院在2018年10月提出的一种预训练模型. BERT本质上就是Transformer模型的encoder部分, 并且对encoder做了一些改进.
官方代码和预训练模型 Github: https://github.com/google-research/bert
下图中编码器部分即BERT的基本结构.

2.代码实现
import torch
from torch import nn
import dltools
2.1构建输入数据格式
def get_tokens_and_segments(tokens_a, tokens_b=None):
#classification 分类
#BERT是两句话作为一对句子一同传入的,也可以单独传一句话,若序列长度长,可以补padding
#假设先传一句话tokens_a
tokens = ['<cls>'] + tokens_a + ['<sep>'] #tokens_embedding层的处理
segments = [0] * (len(tokens_a) + 2) #判断词元属于哪一句话,加标记,0属于第一句话
if tokens_b is not None:
tokens += tokens_b + ['sep']
segments += [1] * (len(tokens_b) + 1)
return tokens, segments
#测试上面的函数
get_tokens_and_segments([1, 2, 3], [4, 5, 6])
(['<cls>', 1, 2, 3, '<sep>', 4, 5, 6, 'sep'], [0, 0, 0, 0, 0, 1, 1, 1, 1])
2.2定义BERT编码器的类
class BERTEncoder(nn.Module):
#由于前馈网络的ffn_num_outputs