wangyuxinwhy / uniem

unified embedding model

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

train_m3e细节

kuku1128 opened this issue · comments

commented

背景:之前基于text2vec的代码,使用in-batch的loss方式,在自己的数据集上进行finetune。对比了和uniem的训练脚本,逻辑基本一致,且保证参数一致,比如lr、weight_decay、num_warmup_steps、temperature等
问题:finetune发现,(1)使用text2vec的效果稍微优于uniem。这里指的是训练脚本,其中pretrain model均为m3e-model(2)相同batch size的情况下,uniem占用显存更少
猜测:之前以为是混合精度的原因导致的,但后来发现这个设置默认是"no"。

所以想要请教下,导致这个差异的原因可能是什么呢?期待大佬的答复。

这个变量有点太多了,我没仔细研究过 text2vec 的代码... 我需要去调研一下,之后做一些实验才能解答。

数据层面上,max_length 是不是一致的?我记得 text2vec 的 max_length 好像默认不是 512

commented

首先感谢答复!

max_length我也改成512了

此外,我还有个疑问:直接拿text2vec-base-chinese和m3e-model在我们自己的数据集上预测,m3e-model的指标明显高于text2vec-base-chinese,但是用我们的数据fintune后,m3e-model反而微弱于text2vec-base-chinese,这是为啥呀?

text2vec-base-chinese

这有可能是基础模型的问题,可能 hfl/roberta 没有 hfl/macbert 适合你的使用场景。另外,微调的程度不同,模型的灾难性遗忘水平也不同。如果你微调的轮数比较多,那么模型的能力可能主要就取决于架构了,之前学习到的参数分布可能就不重要了(遗忘掉了)。当然,上述都是猜测,我只是根据过往的经验来推断的。