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也当作一个词参与训练,得到对应与其他词汇关系的词向量。