返回列表

11th Place Solution

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

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

第 11 名解决方案

副标题:BERT 序列分类 + SentenceBERT(余弦相似度损失)+ 大语言模型 + 伪标签(硬标签)

作者: takaito, Muj!rush!, Sankurero, yukko08

发布时间: 2025-10-27

竞赛排名: 第 11 名

简介

我们(@takaito, @Muj!rush!, @Sankurero 和 @yukko08)想向组织者表达诚挚的感谢,感谢你们举办了如此出色的竞赛!我也发现许多公开的 Notebook 非常有帮助。同样感谢 Kaggle 社区!

我们的解决方案

解决方案架构图

我们的解决方案完全依赖于测试时训练(train-on-test / 在线训练)方法。我们为各种任务训练了多样的模型。像其他团队一样,我们通过结合 positive_example(正例)、negative_example(负例)和 body(正文)元素的提示词,或仅使用 body 的提示词进行分类,利用测试中提供的四个示例引入了多样性。我们 incorporate 了对比学习,并优先集成尽可能多的多样化方法。此外,对于仅 body 的分类任务,伪标签对 BERT 和 LLM 都被证明是有效的。
以下是各部分的解释。

BERT 序列分类(takaito 部分)

我在团队合并之前的方法是在线训练基于 BERT 的模型进行 body 分类,然后对它们进行集成。即使只是集成基于 BERT 的文本分类模型,也达到了 0.926 的公共分数。
一个关键的优化是使用两个 GPU 并行在线训练两个模型,这让我能够准备许多模型。
此外,由于选定的模型和超参数可以使用训练数据快速验证,我广泛探索了各种选项。
令人惊讶的是,base 模型在准确率上优于 large 模型。此外,多语言 BERT 证明非常强大。关于超参数,许多模型即使固定靠近输入的层也能保持高准确率,同时也加速了训练,所以我积极采用了这种方法。考虑到 xlarge achieves 更高准确率但速度较慢等因素,我们测试了各种模型。团队合并后,我们采用了其中最强的一个:gte-multilingual-base [1]。
gte-multilingual-base (LB: 0.914, 时间:9 分钟)
(确认通过 late submission 增加训练后有所改进。LB: 0.915, 时间:12 分钟)

deberta-v3-base(公开 Notebook)

https://www.kaggle.com/code/nahidhossainredom/deberta-v3-base-3-epochs-lb-0-906/notebook
由于 Muj!rush!&yukko&Sankurero 团队在团队合并之前就一直用它进行集成,所以我直到最后都把它保留在提交中。

SentenceBERT(Muj!rush! 部分)

我们构建了特定规则的嵌入模型并进行了在线学习。基于本地验证,我们采用了以下两种模型类型,并为每个规则调整了超参数:

  • bge-large-en-v1.5 [2]:超参数优化以匹配公共 LB。
  • gte-large-en-v1.5 [3]:超参数优化用于本地验证分数。

对于在线学习,我们仅使用测试数据。使用每个规则作为锚点,我们进行对比学习,将正例(pos example1/2)拉近锚点,将负例(neg example1/2)推远。损失函数使用的是 SentenceTransformers 中的 CosineSimilarityLoss。
在推理时,我们使用训练好的模型获取测试数据中每个规则和 body 的嵌入向量,并直接取规则和 body 嵌入之间的余弦相似度作为预测分数。所有六个规则的培训和推理大约在 35 分钟内完成。

大语言模型 (LLMs)

jigsaw_pseudo_training_llama-3.2-3b-instruct)
https://www.kaggle.com/code/wasupandceacar/jigsaw-pseudo-training-llama-3-2-3b-instruct/notebook

  • (Sankurero 部分)
    对于 LLM 实现,我们基于 wasupandceacar 的优秀公开代码(LB: 0.916)。以此实现为基础,我们实验了多种指令微调语言模型 — LLaMA-3.2-3B-Instruct [4], Qwen-3-4B-Instruct [5], LLaMA-3.2-1B-Instruct [6], 和 Gemma-2B-IT [7]。基于 leaderboard 结果,我们最终选择了 LLaMA-3.2-3B-Instruct 和 Qwen-3-4B-Instruct 作为我们的主要模型。

  • (takaito 部分)
    我们引入了测试时增强(TTA),通过不同的正例和负例组合进行多次推理传递,而不是随机选择一对。
    此外,我们通过从提示词中移除示例数据实现了零样本推理模式。这种配置在随后的伪标签阶段被证明是有效的。

伪标签(takaito 部分)

我们将伪标签(硬标签)应用于 BERT 和 LLM。对于测试集 body,我们集成了当前的预测值,并分别给前 xx% 和后 xx% 的数据分配标签 1 或 0,用于额外训练。由于 LLM 训练时间较长且倾向于从更多训练中受益,我们的目标是通过加载早期阶段 previously trained 的 LoRA 权重来减少训练时间。
在提交后的分析中,我们发现应用伪标签将私有分数从 0.92579 提高到了 0.92734。

未生效的方法

  • Few-shot 伪标签
    我们也实验了 few-shot 伪标签。然而,由于训练数据量很重要但提示词很长,训练花费了相当多的时间,迫使我们限制训练数据的大小。结果,相对于训练时间,准确率 improvement 不够充分,所以我们决定不采用这种方法。

  • 使用大于 4B 的模型
    我们实验了诸如 llama3 8B[8], gemma2 9b[9], 和 qwen2.5 14B[10] 等模型,但由于模型 size 较大,它们需要太多的推理时间,所以我们决定不在最终解决方案中使用它们。

  • LLM 的持续预训练
    我们假设 base LLM 尚未充分暴露于 Reddit 话语特有的 colloquial 和有时 impolite 的语言模式。为了解决这个问题,我们使用官方 Reddit API 收集了约 38 GB 的 Reddit 数据,并对两个选定的模型进行了持续预训练。
    虽然训练表现出合理的收敛性和稳定性,但它并没有在 leaderboard 上带来实质性的 improvement。因此,我们没有在最终系统中采用持续预训练的模型。我们怀疑 domain adaptation 和 instruction-following ability 之间的 trade-off 可能导致后者的 degradation,抵消了潜在的 domain-specific benefits。

同比赛其他方案