FlagEmbedding icon indicating copy to clipboard operation
FlagEmbedding copied to clipboard

关于微调reranker的一些疑问

Open Gladiator566 opened this issue 2 years ago • 8 comments

您好,非常棒的工作! 我对bge-reranker的微调部分有一些疑问如下:

  1. 目前bge-reranker使用的基座模型是xlm-roberta-base,如果我想替换为其他huggingface上中文效果更好的bert类模型,是否只需要修改微调reranker时的model_name_or_path参数即可?还是说需要重新预训练一个reranker才行
  2. reranker模型目前支持的max len是512,如果我的输入长度大于512,而又不想截断丢失语义信息的话,是否有其他好办法可以支持更长的文本长度?诸如longformer或roformer等模型是否可以在微调阶段使用?
  3. 如果我想实现在保留排序能力的前提下,实现相关性检测的分类功能,即判断检索排序结果中哪些是真正相关的正样本,由于正样本的个数不确定,所以我不太想使用卡阈值或者取topn的方式来实现,请问reranker如何改进可以实现这种功能吗?

还请能够帮我解答一下,谢谢!

Gladiator566 avatar Dec 13 '23 09:12 Gladiator566

谢谢~

  1. 微调时修改model_name_or_path即可
  2. 没有试过,但huggingface上有的模型应该都能支持
  3. 如果想做分类,可以使用分类损失训练reranker,目前使用的是infocse损失做排序学习。

staoxiao avatar Dec 13 '23 13:12 staoxiao

感谢回复~ 关于第三点分类问题可以麻烦具体说明一下有哪些要改的吗?还没有太理解要怎么做。 比如数据集的格式和组成需要修改吗?改loss是修改reranker modeling代码里面的哪部分呢? 还望大佬不吝赐教 @staoxiao

Gladiator566 avatar Dec 14 '23 01:12 Gladiator566

感谢回复~ 关于第三点分类问题可以麻烦具体说明一下有哪些要改的吗?还没有太理解要怎么做。 比如数据集的格式和组成需要修改吗?改loss是修改reranker modeling代码里面的哪部分呢? 还望大佬不吝赐教 @staoxiao

可以参考sentence transformers的训练方式:https://github.com/UKPLab/sentence-transformers/blob/master/examples/training/cross-encoder/training_nli.py

staoxiao avatar Dec 14 '23 08:12 staoxiao

@Gladiator566 哈喽,你好,请问你有找到中文效果更好的bert类模型作为reranker的基座模型吗?感谢分享🙏

mechigonft avatar Dec 27 '23 09:12 mechigonft

@Gladiator566 另外,我想请问一下,你指的替换模型路径,是在微调脚本替换?我理解难道不是在预训练reranker的时候替换吗? 然后微调节点用的reranker基座模型就是你基于更优中文bert类模型预训练的reranker模型 更优中文bert类模型->预训练->reranker裸模型->微调

mechigonft avatar Dec 27 '23 09:12 mechigonft

@staoxiao 你好,我没理解你对第一点的回答,我看了你们bge-reranker的介绍,你们基于xlm-roberta-base进行了预训练才得到了bge-reranker,具体如下 【This reranker is initialized from xlm-roberta-base, and we train it on a mixture of multilingual datasets:

Chinese: 788,491 text pairs from T2ranking, MMmarco, dulreader, Cmedqa-v2, and nli-zh English: 933,090 text pairs from msmarco, nq, hotpotqa, and NLI Others: 97,458 text pairs from Mr.TyDi (including arabic, bengali, english, finnish, indonesian, japanese, korean, russian, swahili, telugu, thai) In order to enhance the cross-language retrieval ability, we construct two cross-language retrieval datasets bases on MMarco. Specifically, we sample 100,000 english queries to retrieve the chinese passages, and also sample 100,000 chinese queries to retrieve english passages.

Currently, this model mainly supports Chinese and English, and may see performance degradation for other low-resource languages.】 那我在微调reranker的时候,如果模型路径选择其他中文bert类模型,它们肯定没有经过你们上述的数据的预训练,那我微调的reranker,效果肯定不行啊,你为什么说【微调时修改model_name_or_path即可】,我觉得应该是要先预训练一个

mechigonft avatar Dec 27 '23 09:12 mechigonft

@staoxiao 你好,我没理解你对第一点的回答,我看了你们bge-reranker的介绍,你们基于xlm-roberta-base进行了预训练才得到了bge-reranker,具体如下 【This reranker is initialized from xlm-roberta-base, and we train it on a mixture of multilingual datasets:

Chinese: 788,491 text pairs from T2ranking, MMmarco, dulreader, Cmedqa-v2, and nli-zh English: 933,090 text pairs from msmarco, nq, hotpotqa, and NLI Others: 97,458 text pairs from Mr.TyDi (including arabic, bengali, english, finnish, indonesian, japanese, korean, russian, swahili, telugu, thai) In order to enhance the cross-language retrieval ability, we construct two cross-language retrieval datasets bases on MMarco. Specifically, we sample 100,000 english queries to retrieve the chinese passages, and also sample 100,000 chinese queries to retrieve english passages.

Currently, this model mainly supports Chinese and English, and may see performance degradation for other low-resource languages.】 那我在微调reranker的时候,如果模型路径选择其他中文bert类模型,它们肯定没有经过你们上述的数据的预训练,那我微调的reranker,效果肯定不行啊,你为什么说【微调时修改model_name_or_path即可】,我觉得应该是要先预训练一个

我们训练bge-reranker时中文数据也只有788,491条,这个数据量并不大,所以有数据的话可以换成其他模型底座直接训练。如果训练数据不多,可以先用一些公开数据进行预训练,如我们使用的T2ranking, dulreader。

staoxiao avatar Dec 27 '23 14:12 staoxiao

@staoxiao 感谢回复,请问现在有推荐的中文bert类模型用来替换xlm-roberta-base吗?

mechigonft avatar Dec 28 '23 03:12 mechigonft