Shitao Xiao
Shitao Xiao
可能是由于基座模型hfl/chinese-roberta-wwm-ext带来的问题,由于都是使用的这一中文基座模型,导致了这种现象。可以查看一下其他,比如英文模型,是否有这种现象。
可以使用reranker模型进行微调,增加flag输入,将loss改为二元分类损失。 直接使用的话只能通过输出相似度,根据阈值进行判断,但可能存在一些bad case。
> @staoxiao , finetine 代码 是可以用多个gpu进行训练的吗? 支持的
huggingface平台上有一些第三方转换后的onnx,可以试试。
> @mechigonft 尝试了老哥你的方案,发现reranker模型训练确实有问题,最后输出的结果没有区分度了。我还尝试训练了一个epoch的方式,reranker模型还是会存在问题;但是换成其他的向量模型挖掘,或者不使用难负例去微调,reranker模型输出就还算正常,recall 50 大概有0.01的提升 这种情况下,可能是负样本中包含了一些伪负列(即与query相关,但不在pos列表里),可以通过该表采样范围来降低负样本难度,如range_for_sampling设为60-300,从top60-top300中采取负样本,这样的话不会从top60以内采取样本,降低伪负列概率。
Hi, 我们发现reranker的微调在transformers版本大于等于4.35时会出现问题,模型存储出错,加载时会显示 `Some weights of XLMRobertaForSequenceClassification were not initialized from the model checkpoint at *** and are newly initialized`, 这种情况下会重新初始化模型参数,没有经过训练,输出的分数会非常接近。 目前模型存储的代码已更新,如果加载时出现以上warning,可以重新训练模型并存储。
--gradient_checkpointing 需要在开启deepspeed的情况下使用
你好,可以尝试换个基座模型,我们使用xlmroberta只是因为其具有多语言能力。英文推荐deberta,中文我们还未尝试过其他基座训练reranker。
查看了代码,没发现问题。可能是你的corpus就这么大?