FlagEmbedding
FlagEmbedding copied to clipboard
finetune垂类数据集 loss不降低
你好,finetune垂直领域的数据集大约6500条,query是从单条document里用大模型抽样出来的问题,pos是那条document,负样本是用了BAAI/bge-large-zh-v1.5模型计算与大概8万条documents的score,随机取了top30-100的5条。但训练发现loss不降低,尝试过多个epoch
torchrun --nproc_per_node 1
-m FlagEmbedding.baai_general_embedding.finetune.run
--output_dir model_6
--model_name_or_path model_large
--train_data toy_finetune_data_100.jsonl
--learning_rate 1e-5
--fp16
--num_train_epochs 10
--per_device_train_batch_size 10
--dataloader_drop_last True
--normlized True
--temperature 0.02
--query_max_len 100
--passage_max_len 100
--train_group_size 5
--logging_steps 10
--query_instruction_for_retrieval "为这个句子生成表示以用于检索相关文章:"
document长度一般有多少?我看参数里passage_max_len和query_max_len一样都只设了100。
document长度一般有多少?我看参数里passage_max_len和query_max_len一样都只设了100。
document长度是100,query最长是90。
最后训完loss还是在1.9左右,没有收敛。
训完的模型加载后不可用,与相关语句最匹配的是空字符串或者数字。
可能是因为使用fp16
- 我使用fp16,训练5个epoch,loss依然不降低。而且loss还会有nan情况,模型的参数也不更新
- 后来将fp16设置为False,loss才正常降低
用这个训练框架,搞了一个星期左右,怎么训练,loss都不行,后来还是自己写一个训练框架吧,感觉bge的finetune的loss,可能有点小问题,这是我的仓库代码https://github.com/yuanzhoulvpi2017/SentenceEmbedding
用这个训练框架,搞了一个星期左右,怎么训练,loss都不行,后来还是自己写一个训练框架吧,感觉bge的finetune的loss,可能有点小问题,这是我的仓库代码https://github.com/yuanzhoulvpi2017/SentenceEmbedding
感谢反馈~ BGE使用的是对比学习常用的loss: InfoNCE, 会将batch内部所有的其他文本视为neg,这能增加负样本数量,但同时数据处理不当容易出现伪负例。大致看了一下该项目,只使用了neg里的作为负样本,loss是bpr形式的pairwise loss。我们后期会考虑增加此类loss,也欢迎您提交PR。