bert预训练代码

1.输入emb层

在modeling.py文件中,首先对token进行emb词向量查询

然后进行emb后处理,获取sentence emb/位置emb:

 sentence emb也就是segment emb,即不同句子的初始化嵌入向量:

下面是pos emb:

 https://blog.csdn.net/Kaiyuan_sjtu/article/details/90265473

注意,在Transformer论文中的position embedding是由sin/cos函数生成的固定的值,而在这里代码实现中是跟普通word embedding一样随机生成的,可以训练的。作者这里这样选择的原因可能是BERT训练的数据比Transformer那篇大很多,完全可以让模型自己去学习。
https://blog.csdn.net/Kaiyuan_sjtu/article/details/90288178,关于处理输入的部分。

https://blog.csdn.net/Kaiyuan_sjtu/article/details/90298807,任务训练的目标函数

3.2个任务

get_masked_lm_output:
#就是每一个word在encoder之后都会有一个输出,根据这个和那些mask掉的做标记,经过softmax计算损失,其实这个还蛮好理解的。
get_next_sentence_output:
#输入为BertModel的最后一层pooled_output输出([batch_size, hidden_size]),
# 因为该任务属于二分类问题,所以只需要每个序列的第一个token【CLS】即可。
0表示是next 句子,1 表示是随机选择的句子。
原文地址:https://www.cnblogs.com/BlueBlueSea/p/13170004.html