bert层次位置编码

今天学习了bert之中的层次位置编码,感觉可以很好地用到maxlen超出512的部分苏神的层次位置编码
层次位置编码的方案公式 q i ∗ n + j = α u i + ( 1 − α ) u j q_{i*n+j} = \alpha u_{i}+(1-\alpha)u_{j} qin+j=αui+(1α)uj
这里的初始alpha最好设定为0.4,也就是说0~511的位置编码不变,从第512的时候,对应的坐标为(1,0),计算公式为512/512 = 1,512%512 = 0,接下来计算公式
q 512 = 0.4 ∗ u 1 + 0.6 ∗ u 0 q_{512} = 0.4*u_{1}+0.6*u_{0} q512=0.4u1+0.6u0,同理 q 513 = 0.4 ∗ u 1 + 0.6 ∗ u 1 q_{513} = 0.4*u_{1}+0.6*u_{1} q513=0.4u1+0.6u1,后面的内容以此类推,
使用pythonicforbert调用层次位置编码的代码

maxlen = 500
batch_size = 4
origin_max_position_embeddings = config.max_position_embeddings
config.max_position_embeddings = maxlen
config.with_mlm = False
if maxlen > origin_max_position_embeddings:
    model_data = model.state_dict()
    roberta = Roberta(config)
    roberta = get_data(roberta,'/home/xiaoguzai/模型/hated-roberta/pytorch_model.bin')
    model = ClassificationModel(roberta,config,1)
    current_position_embedding = model_data['model.robertaembeddings.position_embeddings_layer.weight']
    new_position_embedding = current_position_embedding
    for currentindex in range(origin_max_position_embeddings,maxlen):
        index1 = currentindex//origin_max_position_embeddings-1
        index2 = currentindex%origin_max_position_embeddings
        embedding_data = 0.4*new_position_embedding[index1]+0.6*new_position_embedding[index2]
        embedding_data = torch.tensor([embedding_data.tolist()])
        new_position_embedding = torch.cat((new_position_embedding,embedding_data),0)
    print('new_position_embedding = ')
    print(new_position_embedding.size())
    model_data['model.robertaembeddings.position_embeddings_layer.weight'] = new_position_embedding
    model.load_state_dict(model_data)

有的时候maxlen更长效果不好并不一定是位置编码的原因,而可能是因为学到了更多无用的信息。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值