BERT源码解读,详细写记录从零实现BERT模型

目录

1、参数设置

2、数据预处理

3、预训练任务的数据构建部分(非常重要)

mask部分

(***)为什么在max_pred - 实际mask掉的单词数量上补0

4、模型整体架构

损失函数


1、参数设置

if __name__ == '__main__':
    # BERT Parameters
    maxlen = 30 # 句子的最大长度 cover住95% 不要看平均数 或者99%  直接取最大可以吗?当然也可以,看你自己
    batch_size = 6 # 每一组有多少个句子一起送进去模型
    max_pred = 5  # max tokens of prediction
    n_layers = 6 # number of Encoder of Encoder Layer
    n_heads = 12 # number of heads in Multi-Head Attention
    d_model = 768 # Embedding Size
    d_ff = 3072  # 4*d_model, FeedForward dimension
    d_k = d_v = 64  # dimension of K(=Q), V
    n_segments = 2

 max-pred一个句子中最大可以预测多少个token,控制每个句子最多有多少个单词被masked

因为如果一个句子mask掉3个单词,一个句子mask掉7个单词,就没法组成矩阵。

有的程序没有这个参数,那就是把这个句子中所有的单词全部输入到计算损失的函数中,也就是每个batch都填充过了,全都补齐到一个长度了。

计算损失的时候那些没被maks的单词不去计算就可以了

n-layer由多少个encoder进行堆叠,一般base有12个,large有24个

n_head多少个头

d_ff 前馈神经网络的维度

d_k,d_v 是Q,K维度的大小,两个必须维度一致

n_segment 是二分类任务中,区分多少不同句子

2、数据预处理

text = (
        'Hello, how are you? I am Romeo.\n'
        'Hello, Romeo My name is Juliet. Nice to meet you.\n'
        'Nice meet you too. How are you today?\n'
        'Great. My baseball team won the competition.\n'
        'Oh Congratulations, Juliet\n'
        'Thanks you Romeo'
    )
    sentences = re.sub("[.,!?\\-]", '', text.lower()).split('\n')  # filter '.', ',', '?', '!'
    word_list = list(set(" ".join(sentences).split()))
    word_dict = {'[PAD]': 0, '[CLS]': 1, '[SEP]': 2, '[MASK]': 3}
    for i, w in enumerate(word_list):
        word_dict[w] = i + 4
    number_dict = {i: w for i, w in enumerate(word_dict)}
    vocab_size = len(word_dict)

    token_list = list()
    for sentence in sentences:
        arr = [word_dict[s] for s in sentence.split()]
        token_list.append(arr)

192行去除原始文本中一些没有用的字符

 在定义word list时,0123分别代表特殊字符PAD CLS SEP MASK 

文本中的字符从3以后依次取(196行)

  • 5
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值