关于使用[MASK]做完形填空时需要注意的点

题目

关于使用[MASK]做完形填空时需要注意的点

关键点

Q1: 选取谁做[MASK]

A:关于这个问题取决于语料库中的每句话的平均长度

比如我在glue【sst2】中就对整个语料库中的所有句子进行了筛选【单词长度大于10】,取中选了第5个单词,又因为第一个token是[cls]所以input_ids[:,5],其实是选择了第四个单词

Q2:如何实现[MASK]

A:因为bert中的编码是根据每一个单词进行编码的,所以我们只需要取到对应单词的encode编码并将它变为[MASK]

step1:先取出index位置的encode编码

labels = input_ids[:,index].reshape(-1).clone()	# [batch_size]

这里解释一下为什么要用clone(),原因是单纯使用reshape会破坏input_ids的结构,它是创建了一个新的指向数据的指针,两者还是共享一份数据,所以clone的作用在于重新创建,开辟一块心得内存空间存储。

step2: 将对应的index位置变为[MASK]

input_ids[:,index] = tokenizer.get_vocab()[tokenizer.mask_token]
Q3: 为什么自己训练的模型loss不会下降

A:我一开始也遇到这个问题了,后来看了别人的经验是nn.Linear(bias=False),当对Linear函数里的偏置矩阵进行归0后,会发现loss开始下降。

  • 另一个可能是因为BertModel比较难训练,当我该用AutoModelForMaskedLM时,模型很快就能收敛
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

365JHWZGo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值