深度学习:bert模型

时间:2024-11-09 14:23:54

multi-headed机制

1、通过不同的head得到多个特征表达,一般8个head
2、将所有特征拼接在一起
3、降维,将Z0~Z7连接一个FC全连接实现降维

多层堆叠

位置编码

如何实现位置编码?

(1)为每个时间步添加一个0-1范围内的数字,其中0表示第一个单词,1表示最后一个单词。

我喜欢吃洋葱 【0 0.16 0.32.....1】

我真的不喜欢吃洋葱【0 0.125 0.25.....1】

问题:我们可以看到,如果句子长度不同,那么位置编码是不一样,所以无法表示句子之间有什么相似性。

(2)1-n正整数范围分配

我喜欢吃洋葱 【1,2,3,4,5,6】     

我真的不喜欢吃洋葱【1,2,3,4,5,6,7】   

 问题:往往句子越长,后面的值越大,数字越大说明这个位置占的权重也越大,这样的方式无法凸显每个位置的真实的权重。

三角函数位置编码

word embedding:是词向量,由每个词根据查表得到

pos embedding:就是位置编码。

composition:word embedding和pos embedding逐点相加得到,既包含语义信息又包含位置编码信息的最终矩阵

pos:指当前字符在句子中的位置(如:”你好啊”,这句话里面“你”的pos=0),

dmodel:指的是word embedding的长度(例“*”的word embedding为[1,2,3,4,5],则dmodel=5),

2i表示偶数,2i+1表示奇数。取值范围:i=0,1,...,dmodel−1。

偶数使用公式(1),奇数时使用公式(2)。

当pos=3,dmodel=128时Positional Encoding(或者说是pos embedding)的计算结果为:

优点:

1、可以使PE分布在[0,1][0,1]区间。

2、不同语句相同位置的字符PE值一样(如:当pos=0时,PE=0)。

训练数据

训练数据集是什么?

(方法1)随机的将句子中的15%的词汇进行mask。让模型去预测mask的词汇。 注:一般选择字进行mask,词的可能性太多,例如今天,明天,后天,上午,下午,没有,再次等等。

方法2)预测两个句子是否应该连在一起。

CLS:分类标记(Classification Token)用于表示输入序列的开始。在输入序列中,CLS应放置在句子的开头。在训练过程中,CLS也当作一个词参与训练,得到对应与其他词汇关系的词向量。 SEP:分隔符标记(Separator Token)用于分隔两个句子或表示单个句子的结束。在处理多个句子时SEP应放置在每个句子的结尾。在训练过程中,SEP也当作一个词参与训练,得到对应与其他词汇关系的词向量。