再次理解苏神的CoSENT损失函数的pytorch代码实现(终于搞懂了)

  1. 最近学习深度学习关于自然语言处理的有关内容时,看到了苏神关于在解决文本相似任务时提出的新的计算损失的方式:CoSENT损失。原文链接:CoSENT损失计算方式及原理。然后就想看看代码是怎么实现的。刚开始看属实是有点难,但还是给弄明白了,这里记录一下,供大家参考。

  2. 先看pytorch的代码实现,如下图:请添加图片描述

  3. 那么在这里主要给大家解释实现方式中的前三步:取出真实的标签、句子向量归一化、奇偶向量相乘(注:一定要先看CoSENT损失的表达式,理解之后再来看代码实现)。

    step1-取出真实的标签: 取真实标签:在最开始加载数据的时候,是逐个加载句子的,而不是以句子对的形式进行加载。例如: 进行相似度计算的句子对有1000对,那么加载数据到列表是有2000个句子的,相对应的真实标签也由原来的1000个变为2000个,所以再取标签时label要跳2取值。这也就是y_true = y_true[::2]的含义表达。

    step2-向量归一化: 向量归一化挺好理解的,即输出向量进行归一化,方便后续计算。

    step3-奇偶向量相乘: 奇偶向量相乘:前面说过,我们是要计算句子对之间的相似值的,但是现在是句子对以前后顺序进行存放,所以要分别取索引为奇数和偶数的向量输出,然后在相乘。例如: 现在有句子顺序是[1,2,3,4],我们是要[1,2]相乘,[3,4]相乘的。那么取奇数就是[1,3],偶数就是[2,4],然后对应索引相乘就是[1,2]、[3,4]相乘了。也就得到了每个句子对的相似值。这也就是代码y_pred = torch.sum(y_pred[::2] * y_pred[1::2],dim=1)的含义。后续的实现只要理解了损失函数怎么计算,代码理解就问题不大了。

  4. 以上就是我个人对CoSENT损失函数的理解。希望能帮助到你

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值