674. Jigsaw - Agile Community Rules Classification | jigsaw-agile-community-rules
首先,感谢组织者、精彩的公共 Notebook、社区以及一路上分享想法的每一个人。
我们的最终解决方案是一个刻意多样化的集成。我们结合了每规则专家模型(DeBERTa NLI 训练;嵌入模型配合逻辑回归 + k-NN)、仅推理大模型(Qwen-32B 在官方数据上训练并通过基于相似度的采样进行推理),以及 across all rules 的几个测试时训练 (TTT) 组件(公共 DeBERTa 训练;公共 FAISS + triplet pipeline;Qwen-3 1.7B 全量微调;Llama-3.1 8B LoRA)。所有模型使用一致的仅指令提示词和 Yes/No 约束解码,然后我们通过每规则排名归一化加权将它们融合。
subreddit - 被视为噪声/不稳定信号;移除它提高了 consistency。我们使用了“信任公共 LB"的方法。
| 模型 | 公共 LB | 私有 LB | 运行时间* |
|---|---|---|---|
| LLaMA-3.1 8B Instruct (TTT) | 0.92084 | 0.92618 | ~130 分钟 |
| Qwen-3 8B (TTT) | 0.91971 | 0.92314 | ~130 分钟 |
| Triplet + FAISS (公共,改进版) | 0.90082 | 0.91131 | ~70 分钟 |
| 6× 嵌入模型 → LR + kNN (每规则) | 0.90067 | 0.90976 | ~90 分钟 |
| DeBERTa (公共训练方案) | 0.90149 | 0.90767 | ~45 分钟 |
| DeBERTa NLI (自定义) | 0.89853 | 0.90636 | ~90 分钟 |
| Qwen-32B (仅推理,相似度采样) | 0.89065 | 0.89671 | ~300 分钟 |
* 在我们 2×T4 设置上的端到端运行时间。
r=256, lora_alpha=32, lora_dropout=0.0, bias="none", target_modules=["q_proj","k_proj","v_proj","o_proj","gate_proj","up_proj","down_proj"].Instructions: You are a expert Reddit Moderator, you are given a comment and a rule. Your task is to classify whether the comment violates the rule. Only respond Yes/No.
<Rule>{rule}</Rule>
<Comment>{body}</Comment>
Answer:
vLLM TP=2, max_model_len=512; 约束为 {Yes, No}, max_tokens=1, 取 Yes 概率;如果超出预算,仅截断 <Comment>。
使用的系列:E5 (base, large), Qwen3-Embedding (0.6B), BGE (small, large), GTE (large)。
基础模型:MoritzLaurer/deberta-v3-large-zeroshot-v2.0
NLI 框架:
- 前提:评论正文
- 假设:“这条评论违反了规则:{rule}。”( plus 8 个 paraphrases)
- 标签映射:Entailment → 违规,Contradiction/Neutral → 合规
每规则测试时训练 (TTT):
- 从测试规范正/负样本中构建小的规则特定集。
- 上采样至 ~25k 对;训练 2 个 epochs。
- 仅更新 biases + 分类器头 + LayerNorms(骨干冻结),训练更快。
平衡:动态 pos/neg 乘数至 ~50/50 (cap 32×)。
核心思想:在每次推理之前,使用嵌入选择上下文相关的示例——然后 prompt LLM。
流程:
使用 Qwen-32B-Instruct (GPTQ) + LoRA 推理;约束输出为 Yes/No 和 softmax logits。
结果:相比 vanilla few-shot 提升 +0.006——表明相关正样本 + 困难负样本显著改善了分类。
在公共解决方案中包含训练集。
额外训练一个 epoch
我们增量式地进行集成,每当一个新的强模型出现,我们就将其堆叠在当前混合之上,而不是从头重建。每个提交的分数按规则进行排名归一化,以消除模型间的校准漂移(LLMs vs. NLI vs. retrieval)。然后我们应用分层混合计划:从最强的检索(Embeddings LR+kNN)和最强的 NLI(DeBERTa-NLI)的 50/50 开始,逐步混合进 FAISS/Triplet, Qwen-32B (仅训练), DeBERTa-public, Qwen-3-8B (TTT), 和 LLaMA-3.1-8B (TTT)。每次添加使用固定的混合比例;之前的堆栈相应地降低权重(几何衰减),这自然地正则化并防止任何单个模型主导。最后,我们裁剪到 [1e-6, 1−1e-6]。此策略利用了范式之间的多样性(检索、NLI、LLM-TTT)并保持校准稳定。