返回列表

15th Place Solution

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

开始: 2025-07-23 结束: 2025-10-23 内容安全 数据算法赛
第 15 名解决方案 - Jigsaw Agile Community Rules

第 15 名解决方案 - Jigsaw Agile Community Rules

作者: Kinosuke (chiman3se)
队友: kfsky, hasibirok0
竞赛排名: 第 15 名
耗时: 8 小时 10 分钟
公开榜: 0.93183 / 私有榜: 0.92657

首先,我们感谢主办团队举办这次比赛。这是一个学习实用 LLM 微调的绝佳机会。我们也感谢我们的队友 (kfsky, hasibirok0) 一起在漫长的赛程中竞争。

在这次比赛中,测试时训练 (Test-Time Training, TTT) 实际上是强制性的,这使得它与常规比赛的性质大不相同。我们将其视为一场在 12 小时限制内优化训练和推理以最大化分数的“游戏”,并享受了这一挑战。

概述

我们的解决方案使用了七个多样化模型的集成,获得了第 15 名(公开榜:0.93183 / 私有榜:0.92657)。
Qwen3-4B 是唯一一个单模型得分超过 0.92 的模型,但集成使我们总体达到了第 15 名。尽管高分单模型很少,但能获得如此强劲的结果很有趣。

集成概念:
我们专注于通过改变模型架构、任务和训练数据来最大化多样性。即使是单模型得分在 0.88x 范围内的模型也被包含在内,因为它们在集成中有所帮助。

验证策略

我们没有使用交叉验证 (CV);我们仅使用公开榜来评估有效性。测试集 (55k) 足够大,且公开/私有分割是随机的,所以我们信任公开榜。

数据处理

模型通用的预处理:

  • Subreddit 字段:保留为上下文(格式:r/{subreddit}
  • 去重:对分类模型应用 subset=[body, rule] 去重。对于因果模型,我们没有去重以保留数据多样性。
  • 测试时训练 (TTT):使用 test.csv 进行训练。由于 train.csv 的规则变化有限,我们将它与 TTT 结合用于某些模型以补充多样性。

合成数据 (kfsky):

  • gpt-oss-120b: 4,000 条
  • Qwen3-235B: 7,500 条
  • Qwen3-Next-80B: 7,500 条
  • 用于 DeBERTa 的继续训练和 Qwen2.5-7B

单模型性能

模型 任务 训练数据 公开榜 私有榜 时间 (分钟)
Qwen3-4B 因果 LM test.csv + train.csv (少样本) 0.920 0.914 278
Qwen2.5-7B 因果 LM test.csv + train.csv + 合成数据* (零样本) 0.902 0.899 193
Gemma2-2B 分类 test.csv (subreddit 去重) 0.914 0.906 90
DeBERTa-v3-base 分类 阶段 1: 合成数据*, 阶段 2: test.csv (subreddit 去重) 0.909 0.901 38
ModernBERT-base 分类 test.csv (subreddit 去重) 0.895 0.889 30
BGE-base 分类 test.csv (subreddit 去重) 0.903 0.895 56
E5-base 语义搜索 无训练 (仅检索) 0.887 0.877 15

关键技术

1. Qwen3-4B: 关注规则合规性的少样本学习 (hasibirok0)

基础: 最初的方法预测规则违规,公开榜得分为 0.918。

想法: 我们将任务从违规预测改为合规预测。

实现:

# 之前 (违规预测,0.918)
BASE_PROMPT = '''You are given a comment from reddit and a rule. Your task is to classify whether the comment violates the rule. Only respond Yes/No.'''

# 之后 (合规预测,0.920)
BASE_PROMPT = '''You are given a comment from reddit and a rule. Your job is to classify whether the comment complies with the rules or not. Please only answer "Yes" if it complies and "No" if it violates them.'''

提示词格式:

You are given a comment from reddit and a rule. Your job is to classify
whether the comment complies with the rules or not. Please only answer
"Yes" if it complies and "No" if it violates them.

Subreddit: r/{subreddit}
Rule: {rule}
Examples:
1) {negative_example}
Answer: Yes

2) {positive_example}
Answer: No

---
Comment: {body}
Answer:

训练:

  • 少样本:一个正例 + 一个负例
  • 训练模型预测合规 ("Yes") 与违规 ("No")
  • 在推理时,使用 "No" 令牌的概率进行提交以保持一致性

结果: 0.918 → 0.920 公开榜 (+0.002)

确切的改进原因尚不清楚,需要进一步调查。


2. DeBERTa-v3: 使用合成数据继续训练 (kinosuke)

基础: 我们使用了一个 公开 notebook 作为基线,得分为 0.906。

想法: 使用合成数据作为预训练的两阶段继续训练。

实现:

阶段 1: 合成数据预训练

  • 在 19,000 个合成样本上训练 DeBERTa
  • 使用由 GPT-oss-120B, Qwen3-235B, 和 Qwen3-Next-80B 生成的 19,000 个合成样本进行训练,并使用 train.csv 进行验证。
  • 3 个轮次 (epochs)
  • 保存检查点权重

阶段 2: 测试数据微调

  • 加载阶段 1 的检查点
  • 继续在 test.csv 上训练 (基于 [body, rule] 去重)
  • 3 个轮次

结果: 0.906 → 0.909 公开榜 (+0.003)


3. Gemma2-2B: 通过扩展 LoRA 高效分类 (kinosuke)

我们 adapted LMSYS 的 公开 notebook 代码 用于 Jigsaw 任务,并扩展了 LoRA 的目标模块。

实现:

架构:

  • 基础: google/gemma-2-2b-it
  • LoRA: r=16, alpha=32, dropout=0.1
  • 将目标模块扩展到七个:q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj

训练:

  • 2 个轮次
  • 学习率:2e-5 (带线性预热)
  • 批次大小:16
  • 最大长度:384

数据:

  • test.csv (去重,subset=[body, rule])

输入格式:

{body}
{url_semantics}
Rule: {rule}
Subreddit: r/{subreddit}

结果: 90 分钟内获得 0.914 公开榜 / 0.906 私有榜

4. Qwen-2.5-7B (kfsky)

我们控制了步数并将其用作集成的一个组件。原始得分为私有榜 0.911,但在集成期间运行时成为瓶颈,因此我们减少了步数。减少步数会降低单模型得分,但会增加集成多样性,所以我们包含了它。

集成策略

排名平均

在混合之前将所有预测转换为排名:

r_model = predictions.rank(method='average') / (len(predictions) + 1)

最终权重

blend = (
    0.20 * r_causal_qwen25_7b +
    0.25 * r_causal_qwen3_4b +
    0.20 * r_seqcls_gemma2 +
    0.125 * r_cls_deberta +
    0.075 * r_seqcls_modernbert_base +
    0.075 * r_cls_bge +
    0.075 * r_e_e5
)

注意:我们发现权重调整对最终得分影响很小。

无效方法

  • EMA (指数移动平均): 尝试是因为它出现在顶级 MAP 竞赛解决方案中;在我们的实验中没有改进
  • 集成权重优化: 改变权重几乎不影响得分
  • 语义模型集成: 连接嵌入向量 + PCA 到 1024 维,与单模型相比性能变差
  • TTT 的合成数据
    • 仅在使用更多步数的 Qwen2.5-7B 零样本时有效
    • 对 Qwen3-4B 少样本无效
    • 对其他分类模型无效
  • 被拒绝的模型 (由于推理时间与得分的权衡)
    • DeepSeek-R1-7B
    • mpnet
    • ettin
    • Gemma2-9B
  • 提示词更改
    • 逐步推理提示
    • 思维链提示 (Chain-of-thought)
同比赛其他方案