FlagEmbedding icon indicating copy to clipboard operation
FlagEmbedding copied to clipboard

bge模型评估过程中,embedding+rerank后的recall分数比embedding自己的recall分数低

Open zeruiz99 opened this issue 1 year ago • 12 comments

使用的bge-m3 embedding模型,想问下跑完MultiVector and All Rerank这个评估过程以后,embedding+rerank的召回分数还降低了这个正常嘛,两个都是原本的比原embedding分数低,两个都是微调过的比微调过的embedding分数低

zeruiz99 avatar Apr 12 '24 15:04 zeruiz99

理论上MultiVector效果应该要比单纯dense embedding要好的。如果使用的是https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/BGE_M3#compute-score-for-text-pairs 这个函数的话,可以通过调整weights_for_different_modes 来控制不同分数的权重。 另外,可以直接使用reranker模型进行重排:https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/llm_reranker#for-normal-reranker-bge-reranker-base--bge-reranker-large--bge-reranker-v2-m3-

staoxiao avatar Apr 13 '24 13:04 staoxiao

理论上MultiVector效果应该要比单纯dense embedding要好的。如果使用的是https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/BGE_M3#compute-score-for-text-pairs 这个函数的话,可以通过调整weights_for_different_modes 来控制不同分数的权重。 另外,可以直接使用reranker模型进行重排:https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/llm_reranker#for-normal-reranker-bge-reranker-base--bge-reranker-large--bge-reranker-v2-m3-

被训练过的数据集上score表现是很好,但我放进MKQA里去跑召回率的时候 召回率会降

zeruiz99 avatar Apr 15 '24 03:04 zeruiz99

被训练过的数据集上score表现是很好,但我放进MKQA里去跑召回率的时候 召回率会降

正常现象,模型在新数据上微调会遗忘原本知识。

staoxiao avatar Apr 15 '24 08:04 staoxiao

被训练过的数据集上score表现是很好,但我放进MKQA里去跑召回率的时候 召回率会降

正常现象,模型在新数据上微调会遗忘原本知识。

那请问下因为embedding用的train data是一个,而rerank用的train data是另一个导致的吗? 期望其实应该是rerank以后的召回率前20比单独用embedding的高才正常吧

zeruiz99 avatar Apr 15 '24 09:04 zeruiz99

被训练过的数据集上score表现是很好,但我放进MKQA里去跑召回率的时候 召回率会降

正常现象,模型在新数据上微调会遗忘原本知识。

我的训练方式是有一个自己的类似mkqa问答对的数据集,然后切了大部分进去训练,然后难负例挖掘给rerank用来微调,结果在评测集上embedding单独的召回率比embedding+rerank的召回率高很多,后者在除sparse层以外掉非常多

zeruiz99 avatar Apr 15 '24 09:04 zeruiz99

我的训练方式是有一个自己的类似mkqa问答对的数据集,然后切了大部分进去训练,然后难负例挖掘给rerank用来微调,结果在评测集上embedding单独的召回率比embedding+rerank的召回率高很多,后者在除sparse层以外掉非常多

这个sparse层值得是什么?embedding召回时使用了dense+sparse?

staoxiao avatar Apr 16 '24 02:04 staoxiao

我的训练方式是有一个自己的类似mkqa问答对的数据集,然后切了大部分进去训练,然后难负例挖掘给rerank用来微调,结果在评测集上embedding单独的召回率比embedding+rerank的召回率高很多,后者在除sparse层以外掉非常多

这个sparse层值得是什么?embedding召回时使用了dense+sparse?

https://github.com/FlagOpen/FlagEmbedding/blob/master/C_MTEB/MKQA/README.md 我使用了这里面multivector and all rerank的过程,但是rerank出来的召回结果分数比embedding print出来的召回分数低特别多 是不是因为rerank模型用的数据集小的原因?建议reranker finetune使用多大的数据集呢

zeruiz99 avatar Apr 22 '24 03:04 zeruiz99

https://github.com/FlagOpen/FlagEmbedding/blob/master/C_MTEB/MKQA/README.md 我使用了这里面multivector and all rerank的过程,但是rerank出来的召回结果分数比embedding print出来的召回分数低特别多 是不是因为rerank模型用的数据集小的原因?建议reranker finetune使用多大的数据集呢

这里的rerank用的还是向量模型,只是用上了三种模式:稠密+稀疏+多向量。想要同时训练三种模式需要使用该脚本: https://github.com/FlagOpen/FlagEmbedding/tree/master/examples/unified_finetune#3-train,趣确认是否正确。 另外,建议直接使用一个专门的reranker模型,如bge-raranker-v2-m3.

staoxiao avatar Apr 22 '24 05:04 staoxiao

https://github.com/FlagOpen/FlagEmbedding/tree/master/examples/unified_finetune#3-train,趣确认是否正确。

是的,是根据这里面的unified finetune去训练的bge m3 embedding模型,微调效果还可以,然后hard neg数据集以后去训练bge-reranker-v2-m3,再用这两个微调过的模型,去使用multivector and all rerank,rerank召回分数很不好

zeruiz99 avatar Apr 22 '24 06:04 zeruiz99

是的,是根据这里面的unified finetune去训练的bge m3 embedding模型,微调效果还可以,然后hard neg数据集以后去训练bge-reranker-v2-m3,再用这两个微调过的模型,去使用multivector and all rerank,rerank召回分数很不好

bge-reranker-v2-m3的使用方式按照这里的吗:https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/llm_reranker#for-normal-reranker-bge-reranker-base--bge-reranker-large--bge-reranker-v2-m3-?他应该调用FlagReranker,并不是像bge-m3向量模型那样使用。

staoxiao avatar Apr 22 '24 12:04 staoxiao

https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/llm_reranker#for-normal-reranker-bge-reranker-base--bge-reranker-large--bge-reranker-v2-m3-?他应该调用FlagReranker,并不是像bge-m3向量模型那样使用。

对啊,直接是normal reranker嘛,所以微调方式使用的是类似bge-reranker-large的

zeruiz99 avatar Apr 23 '24 03:04 zeruiz99

是的,是根据这里面的unified finetune去训练的bge m3 embedding模型,微调效果还可以,然后hard neg数据集以后去训练bge-reranker-v2-m3,再用这两个微调过的模型,去使用multivector and all rerank,rerank召回分数很不好

bge-reranker-v2-m3的使用方式按照这里的吗:https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/llm_reranker#for-normal-reranker-bge-reranker-base--bge-reranker-large--bge-reranker-v2-m3-?他应该调用FlagReranker,并不是像bge-m3向量模型那样使用。

感觉可能是挖掘负样例的时候数据对模型有负面影响,有没有推荐的挖掘方式呀

zeruiz99 avatar Apr 23 '24 08:04 zeruiz99