admin管理员组文章数量:1611397
因为没有循环神经网络做迭代,所以我们加上位置编码,以避免计算机无法区分“我是你爸”和“你是我爸”等等。
对于一个维度762的字向量
我们需要一个762维度的位置编码
之后相加操作喂入Transformer
位置嵌入的公式如下:
我对其纹理进行可视化:
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
plt.figure(figsize=(15, 10))
sns.set()
np.random.seed(0)
max_sequence_lenth = 500
embeding_dim=762
jishu=10000
i_max=int((embeding_dim-1)/2)
datas=[]
for pos in range(max_sequence_lenth):
posithon_embeding = []
for i in range(i_max+1):
posithon_embeding.append(np.sin(pos/(pow(jishu,(2*i)/embeding_dim))))
posithon_embeding.append(np.cos(pos/(pow(jishu,(2*i)/embeding_dim))))
datas.append(posithon_embeding)
uniform_data = np.array(datas)
ax = sns.heatmap(uniform_data)
plt.show()
对于0-1之间的线性维度标注法(那种按照位置1,2,3,4……500……这样不在0-1的编码可以完全pass了)
还有啊如果用i/sequence_length的也不行。
在短文本中字与字相差0.1可能代表相邻的两个字,而在长文本中0.1可能中间还间隔了几个字。
而同一采用上述的sin cos的纹理能很好得将训练完的模型适用于喂入各种长度的文本,不论文本长短,其位置编码按上图从上往下固定不变,(要采用该模型,就不变其维度762)
本文标签: BertPositionEmbedding
版权声明:本文标题:Bert_Position_Embedding 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1728604257a1165250.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论