返回列表

13th Place Solution: Using Positive Examples from Other Rules as Negative Exampl

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

开始: 2025-07-23 结束: 2025-10-23 内容安全 数据算法赛
第 13 名解决方案:利用其他规则的正样本作为负样本

第 13 名解决方案:利用其他规则的正样本作为负样本

作者: YANGJIAHUA 及其团队
发布时间: 2025 年 10 月 25 日
竞赛排名: 第 13 名

首先,我要感谢竞赛组织者举办本次活动,为我们提供了一个宝贵的学习和探索新技术的机会。

其次,我要向我的导师 @zwzwyang 以及我的两位队友 @mavicbf@mikeoscar1 表达诚挚的谢意——他们在整个过程中都发挥了不可或缺的作用。

最后,我要感谢暨南大学广东智慧教育研究院的支持。

方法概述

我们的主要思路是利用公共测试集(Public)中的正样本和负样本进行训练。
在数据增强过程中,我们将其他规则下的正样本转换为当前规则下的负样本(30%)(Public-1),以更好地拟合测试分布。

# 采样 30% 的数据
sampled = dataframe.sample(frac=0.3, random_state=42).copy()

all_rules = dataframe["rule"].unique().tolist()
def get_different_rule(current_rule):
    choices = [r for r in all_rules if r != current_rule]
    return pd.Series(choices).sample(1).iloc[0]

sampled["rule"] = sampled["rule"].apply(get_different_rule)
sampled["rule_violation"] = 0  # 始终为负样本
dataframe = pd.concat([dataframe, sampled], axis=0).reset_index(drop=True)

模型集成

模型 公共分数 Public-1 分数 私有分数 训练时间
Qwen3-8b-gptq-int4 0.922 0.927 0.923 8 小时
Qwen3-1.7b-gptq-int4 0.911 0.918 0.912 1.5 小时
DeBERTa-base 0.906 0.911 0.903 1 小时
DeBERTa-small 0.900 0.5 小时

我们没有为 DeBERTa-small 使用额外数据,因为实验表明包含它会略微降低整体集成性能。
我们的开源代码地址:
https://www.kaggle.com/code/yangjiahua/finall-qwen3-8b-int4

其他想法

  1. 在测试正文文本上预训练: 在训练 DeBERTa 之前,我们可以使用 test.csv 中的 body 列对其进行预训练,这可能会有所帮助。由于时间限制,我们未能探索这一想法。
  2. 强化学习 (RL) 微调: 我在 Qwen3-1.7B 上 experimented 了强化学习,其表现优于 LoRA 微调。有了高质量的数据集和 RL 训练,我们相信性能可以进一步提高。
  3. 使用大语言模型构建数据集: 我们使用大语言模型(如 Gemini 和 Qwen)为测试集中的私有规则生成训练数据。
    例如,私有规则 3 的合成数据集帮助提高了性能——将 Qwen2.5-14B-Instruct 从 0.886 提升至 0.888。不幸的是,其他生成的规则对模型性能产生了负面影响。
同比赛其他方案