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 表示是随机选择的句子。