Results 2 issues of AndrewHR

#运行脚本 官方example:https://github.com/FlagOpen/FlagEmbedding/blob/master/examples/finetune/embedder/encoder_only/m3_same_dataset.sh 上述脚本,修改per_device_train_batch_size=4(原始是2不会报错) # 报错代码: ``` File "/mnt/bn/rc-tob-lq/users/huangrong.max/FlagEmbedding/FlagEmbedding/finetune/embedder/encoder_only/m3/modeling.py", line 426, in forward [rank1]: ensemble_scores, ensemble_loss = compute_loss_func( [rank1]: File "/mnt/bn/rc-tob-lq/users/huangrong.max/FlagEmbedding/FlagEmbedding/abc/finetune/embedder/AbsModeling.py", line 149, in _compute_no_in_batch_neg_loss [rank1]: local_scores = self.compute_local_score(q_reps, p_reps, compute_score_func,...

背景: 请问我做bge-m3的finetune,训练数据是自有的分类数据,最终finetune样本示例: {"query": "这商品真差,质量一点也不好", "pos": ["评价非常差,评分应为1"], "neg":["评价非常高,评分应为5","评价还不错,评分应为4","评价一般,评分应为3","评价一般,评分应为2"] 问题: 1. 我理解finetune阶段如果negatives_cross_device设置为true,则会采样其他样本的neg扩充negatives,但元数据是5分类,大概率采样到当前样本对应的pos?这个需要去修改训练参数吗? 2. 但官方bge-m3的finetune脚本https://github.com/FlagOpen/FlagEmbedding/blob/master/examples/finetune/embedder/encoder_only/m3_same_dataset.sh,里面也有一个分类任务/example_data/classification-no_in_batch_neg,看起来negatives_cross_device会产生通用的问题,导致计算nce loss的时候负样本里大概率包含正样本? 3. 通过2中脚本的设置,我做了消融实验(数据包含ABCD四标签,均剔除一个标签D的数据作为outdomain测试),用原始bge-m3,自有监督数据训练bge-m3-w-label、自有数据+bge-m3-data混合训练。发现加上自有数据后,在ABC分类上比bge-m3都要强不少,但是D的分类上,加入自有数据随着step增加,性能会不断下降且低于原始bge-m3。请问有什么合适的方案去减少这种知识遗忘吗?在D分类上能尽量不损失性能。