FlagEmbedding icon indicating copy to clipboard operation
FlagEmbedding copied to clipboard

reranker(bge-reranker-large) loss compute problem

Open Jeremyywb opened this issue 1 year ago • 2 comments

作者你好,我研读源码时发现一个比较疑惑的问题,想请教一下。

  • 问题所在代码路径是这里: https://github.com/FlagOpen/FlagEmbedding/blob/master/FlagEmbedding/reranker/modeling.py

  • 具体的问题出现在代码中,计算loss部分的: 计算loss时候所用代码为

    loss = self.cross_entropy(scores, self.target_label)
    
    • 其中target_label: 代码初始化时,注册了一个target_label,是一个长为batch_size,且全为0,的一维tensor。
    • scores是一个,size为(batch_size, train_group_size)的tensor
  • 我问题是需要确认以下理解是否有误: 这里整个过程是否是如此:输入为 (batch_sizetrain_group_size, seq_len )也即每个(query,doc)单独输入模型,输出一个logit其size为(batch_sizetrain_group_size,1)=> 对于每个query,将其所有相关的doc打包起来,间接认为是一个多分类的输出也即 scores的(batch_size, train_group_size)=> 认为第一个打包的query结果其标签都是0,也即我们的正样本pos,故而target_label 都为0 => 计算cross_entropy

Bge-Rerank微调

Jeremyywb avatar Sep 18 '24 06:09 Jeremyywb

@Jeremyywb ,0指的是这样本的位置,训练目标是最大化该位置的概率,可以参考torch官方文档对cross-entropy损失的描述:https://pytorch.org/docs/stable/generated/torch.nn.CrossEntropyLoss.html#torch.nn.CrossEntropyLoss

staoxiao avatar Sep 20 '24 06:09 staoxiao

所以其实bge-reranker-large 的损失函数就是交叉熵,而不是对比学习的那种形式咯

LawsonAbs avatar May 13 '25 03:05 LawsonAbs