wangyuxinwhy / uniem

unified embedding model
Apache License 2.0
814 stars 61 forks source link

复现不到模型效果 #85

Open huangjiaheng opened 1 year ago

huangjiaheng commented 1 year ago

🐛 bug 说明

作者好, 我尝试使用你的train_m3e.py的配置在v100 32g使用了8卡复现了m3e-small. 使用了batch_size=32,epoch=1,ndcg和map都没有达到你开源的m3e-small的效果,ndcg差了6个点。

看到你在hugging face上面写到: “M3E 使用 in-batch 负采样的对比学习的方式在句对数据集进行训练,为了保证 in-batch 负采样的效果,我们使用 A100 80G 来最大化 batch-size,并在共计 2200W+ 的句对数据集上训练了 1 epoch。训练脚本使用 uniem,您可以在这里查看具体细节。”

但是m3e-small和m3e-base和m3e-large的batch size应该是不一样的吧? 想知道m3e-small的batch_size用了多少?m3e-base的batch_size用了多少?m3e-large的batch_size用了多少? 另外train_m3e.py里面的数据集能对得上吗? 我们在业务集上面使用m3e-large效果很差,跟m3e-base相比差距非常大,是啥原因?

Python Version

None

wangyuxinwhy commented 1 year ago
  1. m3e 系列模型都是在 80G 显卡上尽可能的让 batch_size 更大,具体的参数我只能记个大概了,max_length small 是512,base 和 large 是400,batch_size small 256,base 80 ,large 32 。
  2. 训练使用的数据集就是 Model Card 上介绍的数据集,其中部分在 HuggingFace 开源的数据集提供了处理脚本,另外部分的数据集由于 license 的原因没有提供处理脚本,需要自行处理,但是数据集就是页面上介绍的那些。
  3. m3e-large 没有在英文上训练,m3e-large 的 batch_size 太小了,所以 ReRanking 的效果比较差。
huangjiaheng commented 1 year ago

请问你们用了多少张卡呢? 大概需要多长时间? 另外都是一个epoch就结束了吗?

wangyuxinwhy commented 1 year ago
  1. 一张卡
  2. 具体的时间记不清了,最长的 large 也就不到三天
  3. 就跑一个 epoch
lucheng07082221 commented 1 year ago

@wangyuxinwhy 为什么不跑多个epoch呢?跑多轮epoch精度会不会有提高阿

wangyuxinwhy commented 1 year ago

因为数据集太大了,计算资源有限,所以没有跑多个 epoch,跑多个 epoch 可能效果还会有提升,不过我预计提升幅度不会很大。

gaoxiao commented 1 year ago

m3e-small 用下面的参数, A100 80G就会爆显存: --batch-size 128 --max-length 512

lucheng07082221 commented 1 year ago

@wangyuxinwhy 明白,如果要训练自己的数据集,有什么好的数据处理工具吗?比如我有很多个文档。

wangyuxinwhy commented 1 year ago

这部分没有特别的建议,数据处理我主要使用的是 huggingface 的 datasets 。

wangyuxinwhy commented 1 year ago

m3e-small 用下面的参数, A100 80G就会爆显存: --batch-size 128 --max-length 512

使用半精度了吗?

gaoxiao commented 1 year ago

半精度是哪个参数?

wangyuxinwhy commented 1 year ago

mixed_precision ,--mixed-precision fp16

gaoxiao commented 1 year ago

mixed_precision ,--mixed-precision fp16

还是不行, small的batch 最大到64 这是我用的参数: python scripts/train_m3e.py 'moka-ai/m3e-small' all_data/ --batch-size 64 --max-length 512 --epochs 1 --mixed-precision fp16 --temperature 0.01

wangyuxinwhy commented 1 year ago

只凭目前这些信息,我也没有思路,你的环境为啥会爆显存。

AugustLHHHHHH commented 9 months ago

🐛 bug 说明

作者好, 我尝试使用你的train_m3e.py的配置在v100 32g使用了8卡复现了m3e-small. 使用了batch_size=32,epoch=1,ndcg和map都没有达到你开源的m3e-small的效果,ndcg差了6个点。

看到你在hugging face上面写到: “M3E 使用 in-batch 负采样的对比学习的方式在句对数据集进行训练,为了保证 in-batch 负采样的效果,我们使用 A100 80G 来最大化 batch-size,并在共计 2200W+ 的句对数据集上训练了 1 epoch。训练脚本使用 uniem,您可以在这里查看具体细节。”

但是m3e-small和m3e-base和m3e-large的batch size应该是不一样的吧? 想知道m3e-small的batch_size用了多少?m3e-base的batch_size用了多少?m3e-large的batch_size用了多少? 另外train_m3e.py里面的数据集能对得上吗? 我们在业务集上面使用m3e-large效果很差,跟m3e-base相比差距非常大,是啥原因?

Python Version

None 想来请教一下负样本采样的方法对应到代码是在哪里啊