FlagEmbedding icon indicating copy to clipboard operation
FlagEmbedding copied to clipboard

请教colbert实现的问题

Open NLPJCL opened this issue 1 year ago • 3 comments

非常棒的工作。我看代码过程中有一些疑问,辛苦您解答并确认下。

1.看代码的时候,发现colbert,在训练时,算score的时候并没有mask掉query和doc中的padding的部分,预测的时候,却mask掉了padding的部分,请问下是这样嘛?(还是因为数据的加载方式,其实训练的时候并没有padding)如果是这样的话,训练和预测不一致了,不会影响效果嘛? 2.看colbert的代码实现,发现相比原论文,有一些改变,请问下有做过加或者不加的实验嘛?加了效果会好嘛? 2.1 算出来的得分除了0.02的温度因子。 2.2算出来的得分除了query的长度。

NLPJCL avatar Mar 03 '24 14:03 NLPJCL

  1. 参考https://github.com/FlagOpen/FlagEmbedding/blob/master/FlagEmbedding/BGE_M3/modeling.py#L119, 训练的时候把padding乘以0了,不影响分数。
  2. 不同于colbert计算向量内积,M3因为normlize了向量,算得是cosine similarity,需要一个温度系数。 除以query的长度能使得分数的scale一致,更容易训练和更可读,否则更长的query会导致分数更大,不同长度query分数大小不一致。

staoxiao avatar Mar 04 '24 09:03 staoxiao

为什么colbert,在得到向量的时候,把cls给去掉了呢?(有做过不去cls的实验嘛?) 1.是因为您的colbert是和向量模型一起训练的,向量模型的训练中,cls表征整个句子的意思。担心colbert的loss干扰向量模型的表征嘛?

NLPJCL avatar Mar 05 '24 17:03 NLPJCL

为什么colbert,在得到向量的时候,把cls给去掉了呢?(有做过不去cls的实验嘛?) 1.是因为您的colbert是和向量模型一起训练的,向量模型的训练中,cls表征整个句子的意思。担心colbert的loss干扰向量模型的表征嘛?

是的,避免过多影响单向量模型。

staoxiao avatar Mar 06 '24 08:03 staoxiao