返回列表

5th Place solution - Diverse Ensemble

674. Jigsaw - Agile Community Rules Classification | jigsaw-agile-community-rules

开始: 2025-07-23 结束: 2025-10-23 内容安全 数据算法赛
第五名解决方案 - 多样化集成

第五名解决方案 - 多样化集成 (5th Place Solution - Diverse Ensemble)

作者: Kishan Vavdara (及团队成员)
竞赛排名: 第 5 名
发布日期: 2025-10-26

首先,感谢组织者、精彩的公共 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。
  • 行去重:移除完全重复的行,将训练集大小减少到 <10k 示例,训练更快且 LB 无明显下降。

性能评估

我们使用了“信任公共 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 设置上的端到端运行时间。

训练与推理

LLaMA-3.1 8B Instruct & Qwen-3 8B (LoRA, DDP)

  • 设置:2×T4 配合 DDP,fp16 + 梯度检查点,训练 + 推理 seq len 512。
  • LoRA: 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"].
  • 优化器/调度:paged_adamw_8bit, LR≈2e-4, cosine, warmup≈10%。

提示词 :

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)。

每规则 pipeline

  • 去重与去偏:在每个规则内聚类近似重复项(cosine > 0.95–0.97)并降低其权重,以防分类器过拟合重复模式。
  • 训练两个轻量级头(6 折交叉验证):
    • 逻辑回归: grid over 31 C 值。
    • KNN: grid over K=10–15, 距离加权。
    • 对于每个嵌入模型和规则,保留最佳的 CV 设置。
  • 头融合(每规则):0.7 · LR + 0.3 · KNN 以结合校准 (LR) 与局部邻域线索 (KNN)。
  • 模型集成搜索(每规则):GPU 加速 simplex/grid 搜索六个嵌入模型的权重以最大化 CV AUC(约束,非负,和为 1)。
  • 稳定化:最终每规则得分 = 0.9 · 集成概率 + 0.1 · 排名均值(防止尾部偏差/跨规则尺度漂移)。
  • 输出:每行每规则的校准概率——随后在整体集成中与其他模型家族融合。
    (这个嵌入堆栈是我们最早强 baseline;我们在去重阈值、CV 折数和嵌入模型上进行了大量迭代)

DeBERTa NLI (规则感知 zero-shot → TTT)

基础模型: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×)。

Qwen 2.5 32B LLM 与非对称示例选择

核心思想:在每次推理之前,使用嵌入选择上下文相关的示例——然后 prompt LLM。

  • 正样本:选择与评论最相似的(清晰的违规原型)。
  • 负样本:选择最不相似的(困难的、多样的非违规项)。
    这种非对称配对 tightened 决策边界。

流程:

  1. 使用 Qwen3-0.6B 嵌入规范样本(每规则 2 正 + 2 负)。
  2. 对于每条评论:编码 (rule+comment) → 计算 cosine sims → argmax pos, argmin neg, 带简单质量阈值。
  3. 用选定的正/负示例构建 prompt。

使用 Qwen-32B-Instruct (GPTQ) + LoRA 推理;约束输出为 Yes/No 和 softmax logits。
结果:相比 vanilla few-shot 提升 +0.006——表明相关正样本 + 困难负样本显著改善了分类。

Triplet + FAISS

在公共解决方案中包含训练集。
额外训练一个 epoch

集成 (stack-as-you-go, 每规则排名)

我们增量式地进行集成,每当一个新的强模型出现,我们就将其堆叠在当前混合之上,而不是从头重建。每个提交的分数按规则进行排名归一化,以消除模型间的校准漂移(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)并保持校准稳定。

引用

同比赛其他方案