返回列表

5th Place Detailed Solution

644. WSDM Cup - Multilingual Chatbot Arena | wsdm-cup-multilingual-chatbot-arena

开始: 2024-11-18 结束: 2025-03-10 自然语言处理 数据算法赛
第五名详细解决方案

第五名详细解决方案

作者: Chenyu Lin (及队友)
发布时间: 2025-03-12
竞赛排名: 第 5 名

祝贺所有获奖者!感谢队友 @mianwang1024@zhengnie233。我要感谢另外两位队友教会了我什么是坐享其成,并揭示了人性中的贪婪。感谢组织者举办如此有趣的比赛。我感激 Kaggle 社区提供的创新思想和引人入胜的讨论。我学到了很多。以下是详细的解决方案作为补充。

任务

预测用户更喜欢大型语言模型 (LLMs) 支持的聊天机器人之间的哪些回复。
一个简单的想法是使用大型模型进行二元分类。与较小的模型相比,它具有更高的表示能力,更适合此任务。但也带来了一些挑战:

  • 大型模型对文本中答案 A/B 的位置非常敏感,表现出位置偏差。
  • 大型模型需要基于真实数据学习额外的知识,因为用户偏好不仅限于答案的合理性,还包括答案的准确性、风格程度、语言、长度和流畅度。
  • 比赛要求在短时间内通过大量数据进行推理。

思路

  • LoRA 可能比 QLoRA 更好更快。较高的 rank 可以帮助模型强调更多关于偏好的知识。全量训练可能比 LoRA 更好。
  • 在提示词中交换答案 A/B 的位置进行数据增强是一个直接的选择,也许在交换后进行额外的多样性更改会更好。
  • 在这种情况下,软标签可能比硬标签更容易学习,logits 分布可能比标签本身更容易学习。
  • 输入提示词应经过特殊处理以保留更多信息。
  • 使用 AutoModelForCasualLM 可能比 AutoModelForSequenceClassification 更好,以便通过 vllm 进行更快的推理并获得更好的推理能力。
  • 后处理可能能够解决大型模型难以区分两个答案的问题。

数据

我们聚合了多个数据源:
WSDM48k
LMSYS_55K
Add_33k
open-model(8.5k+13k+5k) 感谢 @nbroad

我过滤掉了重复数据,并通过交换进行了数据增强。
最终数据包含 2*120k 行。

模型

我们尝试了 Qwen2.5-14b-it, Gemma2b-it, deepseek-r1-distill-14b。与 Qwen2.5-14b-it 相比,我们发现 deepseek-r1-distill-14b 使 CV 提高了约 0.001,但 LB 下降了约 0.003。(我认为这主要是由于我们只生成 1 个 token,deepseek-r1 会失去其推理能力)Gemma2b-it 在这两方面都较低。所以我们最终选择了 Qwen2.5-14b-it。

训练

1. 提示词 (Prompt)

为了减轻截断造成的信息丢失,我们将截断问题和两个回复的中间部分,并用省略号替换它们,类似于将 "Have a nice day" 截断为 "Have ... day"。

'''You are a skilled judge evaluating responses from two large language models(LLMs). Your task is to select the response that best meets the user's needs based on the query provided.

**Input Format:**
<Query>
[User's original query to both LLMs]
</Query>

<Response_A>
[First LLM's response]
</Response_A>

<Response_B>
[Second LLM's response]
</Response_B>

**Your Task:**
Carefully analyze both <Response_A> and <Response_B> in relation to the Query. Determine which response is more likely to be selected by a user based on the following criteria:
- Completeness in addressing the query
- Accuracy of information
- Clarity and coherence
- Conciseness vs appropriate detail
- Helpful examples or explanations when needed
- Professional yet engaging tone
- Sound reasoning and logic
- Format and presentation

Here is your input to process now-
Input:

<Query>
{row['prompt']}
</Query>
{'---'*10}
<Response_A>
{row['response_a']}
</Response_A>
{'---'*10}
<Response_B>
{row['response_b']}
</Response_B>

Which response is more likely to be selected by a user? (A or B)\nOutput:\n'''

2. 两阶段训练

数据:wsdm-5th-2stage-data

第一阶段

数据集
WSDM48k
LMSYS_55K
Add_33k 带有硬标签 [0,1]。

训练

  • 我们使用 LoRA 在 fp16 精度下训练 Qwen2.5-14b-it 模型,基于硬标签直接优化其答案 A 和 B 的输出概率分布,同时忽略其他 token 的 loss。
  • LoRA 参数设置为 r=64, alpha=128(较大的 r 可能会更好,但我们没有时间实施)。学习率设置为 lora_a 为 1e-5,lora_b 为 5e-5(我们参考了这个 方法,感谢 @conjuring92),batch size 为 16,max_length 设置为 4096。Epochs = 1。
  • 训练在 6 块 A100 GPU 上大约耗时 12 小时完成。

预测 logits

  • 通过交换所有数据进行数据增强,并将它们成对 shuffle 作为最终训练数据。
  • 使用训练好的模型对 open-model 数据集进行 logits 推理,以获得答案 A 和 B 的概率。

第二阶段

数据集
WSDM48k
LMSYS_55K
Add_33k 带有软标签,如 [0,1]->[0.05,0.95]
open-model(8.5k+13k+5k) 带有由第一阶段推理出的软标签。

训练

  • 与第一阶段相同,只需对 loss 函数进行一些调整。
  • 训练在 6 块 A100 GPU 上大约耗时 16 小时完成。

推理

我们利用 VLLM 进行推理,以半精度加载模型,提示词和输出最大长度合计为 8192,由于 T4 GPU 内存不足,实施了 CPU 卸载。在推理过程中,模型配置为仅生成一个 token,从中我们提取答案 A 和 B 的 logits。logit 值较高的答案被选为最终响应。在两个答案的 logits 太接近的情况下,我们应用后处理来确定最终响应。

一些发现

以下是 LB 上的一些实验(部分实验仅在 CV 上测试,因此不在表中):

模型 数据 操作 LB
qwen2.5-14b-it wsdm zeroshot (零样本) 0.6254
qwen2.5-14b-it wsdm mid_cut+0.7*dpo+0.3*bce 0.689
qwen2.5-14b-it wsdm left_cut+lora 0.6907
qwen2.5-14b-it wsdm mid_cut+random_fewshot 0.6910
qwen2.5-14b-it wsdm mid_cut (中间截断) 0.6938
qwen2.5-14b-it wsdm+lmsys+add_33k mid_cut 0.6964
qwen2.5-14b-it wsdm mid_cut+swap (交换) 0.6967
qwen2.5-14b-it wsdm mid_cut+cot_multi_task 0.6973
qwen2.5-14b-it wsdm+lmsys+add_33k mid_cut+swap 0.7038
qwen2.5-14b-it wsdm+lmsys+add_33k mid_cut+swap+postprocess 0.7039
qwen2.5-14b-it wsdm+lmsys+add_33k+open_model mid_cut+swap +softlabel 0.706812 (最终 LB=0.712)
  • 以下是一些实验发现:
    以下结果仅在 CV 上测试,未显示显著改进:
  • 在单个输入中,使用均值提取问题、答案 A 和答案 B 的向量表示,并在训练期间 alongside 交叉熵训练引入了额外的对比学习。
  • 提示词措辞对训练结果的影响并不特别显著。
    以下结果在 CV 和 LB 上进行了测试:
  • 在训练期间引入随机 few-shot 学习导致 CV 略有改善,但 leaderboard (LB) 分数下降。
  • 使用更大的模型生成 CoT,并基于此 CoT 对 14B 模型应用多任务学习。结果更好,潜在改进 0.003。由于对实际机制理解不完全,最终未采用此方法。
    以下结果仅在 LB 上进行了测试:
  • 训练最大长度增加到 8192。LB 下降。
  • 模型训练了两轮。LB 下降。
  • 还添加了 DPO 训练以优化模型的偏好概率以及 A 和 B 的 BCE loss。LB 下降。
同比赛其他方案