zeruiz99
zeruiz99
预训练的loss你们最后超过1了吗,我在4左右降不下去了哇
> > 预训练的loss你们最后超过1了吗,我在4左右降不下去了哇 > > 降到4以下了,没降到1以下 epoch需要放大会比较好吗,数据集89万条这样
> 你们用89万数据就降到4了?过拟合了吧 4.45,用的数据类型很垂直
> 首先,基于bge-large-zh-1.5,难负例微调,微调一个embedding模型 再基于这个微调后的embedding模型,难负例挖掘,微调reranker模型 第二步的neg是80(记得很清楚,因为当时大部分的参数都不行),第一步当时没做多参数的对比测试,用的默认数量,15 有没有尝试过用相同的难负例数据集微调embedding和reranker呢
> 微调前后使用embedding / embedding + reranker的结果分别是多少呢 微调前embedding召回分数是75 68;bge-m3 + bge-reranker-v2-minicpm-layerwise的分数recall 100是72.6, 20的分别是39 41 51 直接会降就很怪,但是可能和我的max_len没有涵盖住所有的回答对有关系,但是依旧不是一个正常用reranker会提升的状态
> reranker是对top-200排序吗,训练后结果比训练前还差吗 训练的时候如果数据支持的话train_group_size可以适当增大点,只用一个hard negative有点少 reranker是对top100,训练后结果也超不过单独使用微调后的embedding的召回分数 train_group_size放到8也试了,召回率差不多 然后想问下那个参数max_len是问题+答案一起的长度吗还是什么
> max_len是问题+答案一起的长度 只对top-100重排的话embedding的recall@100和使用reranker后的recall@100应该是同一个值,是不会出现75.68和72.4的情况的 39 41 51这三个分别是什么结果呢 是的,只对top100的话是recall@100的分数都一样,给一个最新的分数吧,微调后embedding的recall@20的分数是0.72329,然后微调后embedding+微调后reranker-m3-v2的分数 dense和sparse层的recall@20的分数也和embedding的一样是0.72329,colbert层的recall@20的分数是0.492,使用了reranker以后的召回分数并不能超过只使用微调embedding的分数
> 应该还是领域相关的问题,在特定领域上reranker需要进行微调,同时数据量越多越好,num_train_epochs也不需要那么大,基本上一两个epoch就可以收敛,每组数据最好多放点hard negative,如果hard negative数量少于train_group_size - 1的话,那么只是简单的重复hard negative,并不会带来提升 关于reranker与embedding效果一样这方面,可以测一下MRR或NDCG等指标,看是否存在差距 数据大概是8万5千条,然后挖掘负例用的是80个负例去挖的,取10-120好像是,然后train_group_size太大的话会out of memory,之前试了train group size放8
> 数据量是足够的,可以使用gradient_checkpointing / deepspeed / fp16 / bf16等节省显存 把train_group_size 调到16,换了几次评估,然后dense和sparse的召回率依旧是和微调后的embedding得分一样,唯一就是colbert的分数不一样,感觉不太对劲
> 1. 在训练的时候添加`save_steps`参数就可以了 > 2. 可以修改这部分代码 > > ``` > qry_inputs = self.tokenizer.encode(qry_encoding, > truncation=True, > max_length=self.args.max_len * 3 // 4, > add_special_tokens=False) > doc_inputs = self.tokenizer.encode(doc_encoding, > truncation=True, >...