674. Jigsaw - Agile Community Rules Classification | jigsaw-agile-community-rules
高效利用指令微调 LLM 进行分类
非常感谢组织者举办了一场运行良好的比赛。作为这个社区的新人,这是一次很棒的学习经历。这次挑战也展示了指令微调的 LLM 结合可调整的数据,如何能够提供强大的分类性能——尤其是在 SALSA (Single-pass Autoregressive LLM Structured Classification; 论文) [1] 可以大放异彩的场景中。SALSA 是我最近的工作——这是我过去一年进行的研究论文。
我的提交基于 SALSA (Single-pass Autoregressive LLM Structured Classification)。通过提示词模板和与任务对齐的微调,指令微调的 LLM 可以实现接近 SOTA 的性能。在 SALSA 中,模型在微小的固定答案词汇表(例如 "0", "1")上的下一个 token 的 logits 被视为标签的 贝叶斯估计量。通常,指令模型越大且对齐得越好,SALSA 信号就越强——因为训练是从更强的零样本基线开始的。为了挤出一点额外的 AUC,我引入了 广义交叉熵 (Tsallis) 和 伪标签 阶段。
计算限制。 在 Kaggle 的时间预算内训练 ~32B 参数(或更大)的模型是一个重大的技术挑战,所以我没有尝试。我使用 AWQ 基座模型,因为根据我的经验,AWQ 在每比特上保留模型能力的效果优于 GPTQ 或简单的权重裁剪。
尝试的基座模型。 Qwen-3 4B 和 Qwen-3 14B。
鲁棒损失函数。 为了减轻标签噪声,我用 广义交叉熵 (Tsallis) 替换了交叉熵,并根据本地 CV 和公共 LB 采样将 q 设置为 0.955。这提高了公共分数,而私人分数仅略有变化——表明效果适中。
种子敏感性。 我观察到数据加载器种子变化导致约 0.002 AUC 的波动。在此约束下,低于该阈值的增益(包括来自 GCE 的增益)很难声称具有统计显著性。
| 模型 | 私人分数 (Private) | 公共分数 (Public) |
|---|---|---|
| Qwen-3 4B + GCE | 0.91874 | 0.92482 |
| Qwen-3 14B + GCE | 0.92313 | 0.92909 |
| Qwen-3 14B + CE | 0.92309 | 0.92803 |
为了使大模型保持在预算内,我使用了 简短模板 并将 评论放在最后,以最大化 前缀 KV-cache 的复用。在推理时,我 按规则批处理,以便规则文本也保持缓存。
提示词模板
<|im_start|>user
Does the comment violate the rule? Answer in the format:
<ANSWER>#Number</ANSWER>
Where the number is one of:
0 - No
1 - Yes
The rule:
<RULE>
{rule}
</RULE>
The Comment:
<COMMENT>
{body}
</COMMENT>
<|im_end|>
<|im_start|>assistant
<think>
</think>
<ANSWER>
对于较小的 Qwen-3 4B,将指令移到 末尾 产生了非常小的改进,在此设置中低于统计显著性。
为了在相同的计算包络内进一步提升 AUC:
| 系统 / 消融实验 | 私人分数 (Private) | 公共分数 (Public) |
|---|---|---|
| 获胜方案 (融合 0.8 / 0.2) | 0.9286 | 0.93382 |
| 无融合 (仅第二阶段) | 0.9264 | 0.93111 |
| Qwen-3 4B (单阶段) | 0.91874 | 0.92482 |
| Qwen-3 14B (单阶段) | 0.92313 | 0.92909 |
| 使用 Qwen-3 4B 的两阶段 | 0.92239 | 0.92642 |
| Qwen-3 4B (单阶段) 和 Qwen-3 14B (单阶段) 融合 | 0.92469 | 0.92921 |
实践说明。 两阶段流程增加了工程复杂性。~0.004 AUC 的增益在此决定了排名,但是否“值得”将取决于团队的时间/计算预算。
参考文献
[1] SALSA: Single-pass Autoregressive LLM Structured Classification.