FlagOpen / FlagEmbedding

Retrieval and Retrieval-augmented LLMs
MIT License
6.81k stars 491 forks source link

关于unified finetuning bge-m3问题 #982

Open zhujlfree opened 1 month ago

zhujlfree commented 1 month ago

作者您好,我在unified finetuning bge-m3时遇到了一些问题,希望能得到您的帮助,感谢!

1、下面是我unified微调时的参数,我微调之后发现,在我的测试集上大部分数据(大约5w条)的“稀疏向量”全变成了0,而微调前只有400条是0。请问是我的参数设置有问题吗,还是因为数据的原因呢?

2、unified finetuning后,dense embedding检索比单独的dense finetuning的效果要差一些, dense finetuning时per_device_train_batch_size=80, unified finetuning时per_device_train_batch_size=70,其他参数一致。

3、self_distill_start_step需要设置吗?

4、我有两个任务: 1)相似问题对(qq); 2)问答对(qa); qq的文本较短,集中在100以内;qa的文本较长,集中在300左右。那么unified finetuning的时候是可以直接将他们混合打乱一起训练吗,或者使用efficient batching strategy来按长度分割训练?

nohup torchrun --nproc_per_node 4 \ -m FlagEmbedding.BGE_M3.run \ --output_dir /data1/melo/embedding_models/emb_1 \ --model_name_or_path /home/model/bge-m3 \ --train_data /data1/melo/embedding_models2_train_data/train_data_split \ --learning_rate 2e-5 \ --fp16 \ --deepspeed /data1/melo/embedding_finetune/model_training/finetune/ds_config.json \ --gradient_checkpointing \ --num_train_epochs 50 \ --per_device_train_batch_size 70 \ --dataloader_drop_last True \ --normlized True \ --temperature 0.01 \ --query_max_len 128 \ --passage_max_len 512 \ --train_group_size 4 \ --negatives_cross_device \ --logging_steps 100 \ --save_steps 500 \ --same_task_within_batch True \ --unified_finetuning True \ --use_self_distill True \ --self_distill_start_step 6000

staoxiao commented 1 month ago

可以设置self_distill_start_step=0看看效果。self_distill_start_step指的是从多少step开始使用蒸馏loss,如果训练step数据没有6000步,可能导致根本没有使用蒸馏。