📋 题目描述
题目描述
NS-2026-06 标注净化师:噪声标签清洗与鲁棒分类
赛题任务
本题编号为 NS-2026-06。
任务介绍
一套老旧的校园问答归档系统积累了大量英文讨论样本。历史标注来自弱规则、旧模型和不同标注组,速度很快,但不可避免地留下了系统性错标:有些来源组更容易混淆,有些类别样本偏少,有些弱标签置信度并不可靠。
你是一名标注净化师,需要在不接触原始文本的前提下,利用公开的匿名特征、弱标签和一小部分可信验证集,训练一个鲁棒分类器,为测试样本预测真实类别。
本题定位为 优化型噪声标签清洗题。公开数据不提供原始文本,只发布 96 维匿名数值特征。训练集只提供 weak_label,该标签包含约 15% 到 25% 的非均匀噪声;可信验证集提供人工校验标签;测试集只提供特征,隐藏标签用于评分。
你的任务是:
- 分析
weak_label、weak_confidence、source_group和annotator_group暴露出的噪声结构。 - 使用
trusted_valid.csv设计可靠的验证策略,而不是只相信训练集弱标签。 - 通过样本过滤、重加权、噪声鲁棒训练、类别校准或集成方法,预测
test.csv中每个样本的真实类别。 - 输出符合格式的
results.csv。
赛题背景
现实中的数据标注常来自历史系统、众包流程、弱规则、旧模型或多来源合并,标签错误并不是独立同分布噪声。高分路线不是简单套一个分类器,而是识别哪些来源、标注器和类别更容易错标,并把小规模可信验证集用作噪声校准依据。
本题重点考察:
- 噪声标签学习与 confident learning 思路。
- 可信验证集驱动的样本重加权、过滤和校准。
- 类别不平衡下的 Macro F1 优化。
- 高优先级类别召回保护。
- 对公开数据来源、特征泄漏和榜单过拟合风险的控制。
赛题数据
在本页下方“相关资源”处下载数据包,或在 https://modelscope.cn/datasets/SteamedFresh/NS-2026-AA-data 处获取。
NS-2026-06/├── train.csv├── trusted_valid.csv├── test.csv├── label_map.json├── noise_profile_public.json├── DATA_NOTICE.md├── example_submission/│ └── results.csv└── tools/ ├── baseline.py └── check_format.py数据规模
| 文件 | 行数 | 标签状态 | 说明 |
|---|---|---|---|
train.csv | 6015 | 弱标签 | 可用于训练,但 weak_label 含非均匀噪声 |
trusted_valid.csv | 1031 | 可信标签 | 用于本地验证、校准和噪声分析 |
test.csv | 1547 | 无标签 | 需要提交预测 |
字段说明
train.csv:
| 字段 | 类型 | 含义 |
|---|---|---|
id | string | 匿名样本 ID,不含原始来源和标签 |
f000 … f095 | float | 96 维匿名数值特征 |
weak_label | string | 带噪声训练标签 |
weak_confidence | float | 弱标注器置信度,范围约为 0.36 到 0.98 |
source_group | string | 匿名来源组,仅表示来源域差异 |
annotator_group | string | 匿名标注器组,仅训练集提供 |
trusted_valid.csv:
| 字段 | 类型 | 含义 |
|---|---|---|
id | string | 匿名样本 ID |
f000 … f095 | float | 与训练集同空间的匿名特征 |
label | string | 可信标签 |
source_group | string | 匿名来源组 |
test.csv:
| 字段 | 类型 | 含义 |
|---|---|---|
id | string | 匿名测试样本 ID |
f000 … f095 | float | 匿名特征 |
标签说明
合法标签在 label_map.json 中给出:
| 标签 | 中文说明 | 是否高优先级 |
|---|---|---|
computer_hardware | 计算机硬件与外设问题 | 是 |
system_software | 系统软件与桌面环境 | 否 |
mobility_vehicle | 交通与车辆出行 | 否 |
sports_recreation | 体育与社群活动 | 否 |
medical_health | 医疗健康咨询 | 是 |
space_science | 空间科学与科研动态 | 是 |
高优先级类别会额外计入召回分。
补充说明
noise_profile_public.json 只提供粗粒度噪声和来源组统计,不包含真实纠错表、原始类别映射或测试标签。
本地工具
格式检查:
python tools/check_format.py example_submission/results.csv --test-csv test.csv --label-map label_map.json公开 baseline:
python tools/baseline.py --data-dir . --out results.csvpython tools/check_format.py results.csv --test-csv test.csv --label-map label_map.jsonbaseline.py 使用弱标签训练一个逻辑回归模型,再按弱标签一致性过滤部分训练样本,并把可信验证集作为高权重样本加入最终训练。该 baseline 只作为入门参考,不代表最优方案。
注意事项
- 允许使用公开机器学习库和通用预训练方法。
- 训练弱标签并不等于真实标签,应使用可信验证集检查噪声模式。
评测说明
题目定位
本题主标签为 优化题。本题按固定评分公式连续计分并排名。1200 分是理论上限,组委会不承诺公开数据边界下存在可复现的 exact 1200 / 1200 标准路线。
高分应来自更好的噪声标签清洗、可信验证集校准、类别不平衡处理、鲁棒分类器和集成策略,而不是逐样本恢复隐藏标签。
提交说明
提交文件必须压缩为 NS-2026-06-answer.zip。
压缩包内必须只包含:
results.csv不要在压缩包中包含文件夹、模型、权重、日志或其他文件。自动评分只读取 results.csv。
提交格式
results.csv 必须包含 1547 条测试样本预测,表头固定为:
id,labeltst_00000_xxxxxxxx,computer_hardware要求:
id必须完整覆盖test.csv中所有测试样本。id不能缺失、重复或出现未知样本。label必须属于label_map.json中列出的 6 个合法标签。- 行顺序不影响评分。
得分计算
总分 1200:
| 项目 | 分值 |
|---|---|
| Macro F1 | 900 |
| 高优先级类别召回 | 200 |
| 格式合法性 | 100 |
score = 900 * macro_f1 + 200 * priority_recall + 100macro_f1 按 6 个类别计算宏平均 F1,鼓励各类别均衡表现。priority_recall 只统计 computer_hardware、medical_health、space_science 三个高优先级类别的整体召回率。
格式合法时获得 100 分格式分;格式非法时总分为 0。
无效提交
以下情况会得到 0 分:
- 压缩包内没有
results.csv。 results.csv表头不是id,label,或包含额外列。- 存在重复 ID、未知 ID、缺失 ID 或空 ID。
- 标签为空或不属于合法标签集合。
- 文件无法按 UTF-8/UTF-8-SIG CSV 解析。
- 评分脚本无法正常读取提交文件。
本地检查
提交前建议运行:
python tools/check_format.py results.csv --test-csv test.csv --label-map label_map.json该脚本只检查格式和 ID 覆盖,不会给出隐藏测试分数。
条款
数据使用与外部资源
允许使用公开开源机器学习库、数据清洗库、通用预训练模型、公开论文和教程。
AI 协助规则
本题 AI 协助等级为 A1。
Writeup 补充要求
获奖候选队伍必须提交 Writeup 和可复现实验材料。Writeup 必须包含方法概述、任务理解、关键改进、验证与复现、AI 使用声明、证据截图和代码包说明。A1 规则下,如果 AI 接触测试输入并生成最终答案,或 Agent 托管实验并生成提交,原则上视为违反等级规则。
本题还必须包括:
- 训练/验证策略,以及为何可信验证集能代表隐藏测试目标。
- 弱标签噪声分析,包括
weak_label、weak_confidence、source_group、annotator_group的使用方式。 - 样本过滤、重加权、标签校准、模型选择或集成策略。
- 本地 Macro F1、高优先级召回、每类 Precision/Recall/F1 和混淆矩阵。
- 至少 5 个疑似错标训练样本的 ID、弱标签、模型判断和处理方式。
- 训练与生成提交的命令、日志、随机种子、依赖版本。
- AI 使用声明,说明 AI 工具、模型、用途、输入边界,以及 AI 是否接触测试输入。
如果 Writeup 无法证明最终提交来自可复现流程,或 AI 使用声明与 A1 规则冲突,组委会可取消该题评奖资格或该题成绩。
Writeup需包含最终提交压缩包文件 SHA256,指平台上传的 NS-2026-06-answer.zip 的 SHA256。
1. 基本信息
-
队长用户名:Ayin
-
队伍名:L.Corp
-
题号:NS-2026-06
-
最终官网提交记录:
- 提交时间:2026-05-27 19:42:21
- 最终有效得分:1031.22 分

2. 解题思路概述
这道题的核心是在有噪声的弱标签训练集(噪声比例约 15%–25%,且分布不均匀)上训练一个分类器,同时借助可信验证集来识别噪声结构,最终在测试集上尽量提高 Macro F1 以及三个高优先级类别(computer_hardware、medical_health、space_science)的召回率。
整体方案分四步走:
- 识别噪声样本:先用 5 折交叉验证对训练集生成每个样本的预测概率(OOF),再结合
source_group、annotator_group这两个噪声来源特征,做两轮置信学习(Confident Learning),把置信度最低的疑似错标样本找出来,一共过滤掉了 802 条。 - 用干净数据训练模型:把清洗后的训练集和可信验证集合在一起(验证集的样本权重设为 6 倍),同时训练 LightGBM 和 CatBoost 两个模型。
- 融合两个模型的预测:按 0.5/0.5 的比例把两个模型的预测概率加权平均。
- 校准决策阈值:在可信验证集上用 Nelder-Mead(下坡单纯形法)搜索每个类别的最优乘子,以联合得分为目标函数,找到让分数最高的那组参数。
本地在可信验证集上跑出来的成绩是 1100.00(Macro F1 和高优先级召回都是 1.0000),提交到平台后:
- Macro F1:0.8542
- 高优先级召回:0.8120
- 格式分:100.0
- 总分:1031.22
3. 几个比较关键的改进点
下面三个改动对最终线上成绩提升最明显:
1. 两阶段置信学习清洗噪声(vs. 直接用全部弱标签)
用 LightGBM 和 XGBoost 各做一次 5 折交叉验证,结合每个类别的动态阈值和置信度裕度来判断哪些样本大概率标错了,最终从 6015 条弱标签里过滤掉 802 条。
效果:直接用全部弱标签训练,本地验证集 Macro F1 约 0.79;清洗后提升到约 0.82,提升了大概 +0.03。
2. 加入噪声来源的频次特征
把 source_group 和 annotator_group 拼在一起,统计每种组合在训练集中出现的频率,生成 source_group_freq 和 src_anno_freq 两个特征,连同 weak_confidence 一起喂给第一阶段的 OOF 模型。
效果:引入这些特征之后,置信学习识别系统性噪声的准确率更高了,误删的干净样本更少,验证集 Macro F1 又稳定提升了约 +0.01。
3. 用 Nelder-Mead 搜索最优决策乘子
之前用网格搜索,现在改成 Nelder-Mead 在连续空间里直接搜,对 6 个类别分别找最优乘子,以联合得分为优化目标。
效果:搜出来的乘子对高优先级类别有合理的偏置,本地联合得分相比用默认阈值提升了约 +15,直接带动线上高优先级召回率达到 0.8120。
4. 复现说明
运行环境
| 项目 | 版本 |
|---|---|
| 操作系统 | Windows 11 |
| Python | 3.12.11 |
| PyTorch | 2.7.1+cu128 |
| LightGBM | 4.6.0 |
| XGBoost | 2.0.0 |
| CatBoost | 1.2.10 |
| Cleanlab | 2.9.0 |
| scikit-learn | 1.7.0 |
| pandas | 2.3.1 |
| numpy | 2.2.6 |
| CPU 型号 | AMD Ryzen 7 9800X3D 8-Core Processor |
| GPU 型号 | NVIDIA RTX 5090 |
| 内存 (RAM) | 48 GB |
| CUDA 版本 | 13.2 |
随机种子
全局固定 SEED = 2026,覆盖 random、numpy、torch 等所有用到随机数的地方。
复现步骤
-
准备数据:把
train.csv、trusted_valid.csv、test.csv、label_map.json放到项目根目录下。 -
安装依赖:
pip install -r requirements.txt -
运行主脚本:
python src/main.py脚本会自动完成噪声清洗、模型训练、融合、阈值校准,最后生成
results.csv。 -
验证格式:
python tools/check_format.py results.csv --test-csv test.csv --label-map label_map.json
脚本跑完后会在根目录生成 results.csv,终端里会打印 SHA-256 校验和、本地验证集指标和混淆矩阵。
5. AI 使用声明
全局说明
- 本队使用的 AI 工具:Gemini、Claude
- 主要用途:资料查询 / 代码辅助
逐题声明
NS-2026-04
- 官方等级:A1
- 实际使用:资料查询 / 代码辅助
- AI 是否接触完整题面:是
- AI 是否接触测试输入:否
- AI 是否接触提交反馈或排行榜反馈:否
- AI 是否生成或修改最终提交:否
- 是否使用商业 API、闭源远程模型或托管式 Agent:是
- 详细说明:使用了 Gemini 和 Claude 两个闭源远程模型,主要用于资料查询和代码辅助,查 Cleanlab API 和 CatBoost 参数的用法,以及帮忙整理 Writeup 的行文和排版。
Writeup 写作辅助声明
- 是否使用 AI 辅助撰写或润色:是
- 使用工具:Gemini
- 使用范围:语言润色 / Markdown 排版 / 根据本队实验记录整理段落
- AI 接触材料:代码片段 / Writeup 要求
- AI 是否生成新的实验结果、验证分数或复现命令:否
- 人工核对方式:队伍成员核对事实、代码、日志、分数和复现命令
6. 最终提交与 SHA256
- 平台提交文件名:
NS-2026-06-answer.zip - 提交时间:
2026-05-27 19:42:21 - 最终有效得分:
1031.22 - 答案 ZIP SHA256:
b3c22ca366bbb6069c2bfd30e39eb448e56f6014e066622391fb32953e17ed6a - 内部文件 SHA256:
results.csv:bd9e2368f41dfa1232d4005520f45d982af553282f8c9a239a333768cfb1fc9f
7. 证据截图
以下截图均在代码包的 evidence/ 目录下:
-
平台最终提交记录:

-
训练与推理终端日志:

-
最终提交文件 SHA-256 校验和:

-
运行环境与 Python 依赖截图:

8. 代码包结构
Ayin-NS-06/├── README.md # 本文件(Writeup 主文档)├── requirements.txt # Python 依赖版本清单├── src/│ └── main.py # 主脚本(一键复现,生成 results.csv)└── evidence/ ├── submission.png # 平台提交得分截图 ├── log.png # 训练终端日志截图 ├── Env_py.png # 运行环境及依赖版本截图 └── sha256.png # 校验码截图因为用的是轻量级的 GBDT 融合架构加 5 折交叉验证实时推理,不需要保存模型权重,所以没有 models/ 目录。所有超参数都在 src/main.py 里通过随机种子固定,直接运行就能复现。
补充:噪声分析说明
训练与验证策略
可信验证集(trusted_valid.csv)在方案里承担两个角色:
- 噪声分析基准:通过对比训练集弱标签和验证集标签的分布差异,估计整体噪声比例以及不同
source_group的错标倾向。 - 模型校准依据:把可信集以 6 倍样本权重并入最终训练集,让模型在干净样本上修正决策边界;同时作为阈值调优的唯一验证集,确保后处理方向和真实测试集分布一致。
之所以用可信验证集来代表隐藏测试集,是因为两者共享相同的 96 维匿名数值特征空间,标签分布一致,且可信集经过严格人工审核,标注噪声接近于零,是评估模型真实泛化能力最可靠的参照。
弱标签噪声特征的使用方式
weak_label:作为基础训练标签,经过置信学习清洗后保留了其中 86.7% 的样本(过滤掉 802 条疑似错标)。weak_confidence:直接作为特征输入第一阶段的 OOF 模型,帮助模型学到标注置信度和真实标签之间的关系。source_group与annotator_group:把这两个字段拼起来,统计每种组合的频次,作为辅助特征注入 OOF 模型。这样模型能更好地识别特定标注组的系统性错标规律,从而提高置信学习的准确率。
5 个典型噪声样本
| ID | 原始弱标签 | 模型建议纠正为 | 处理方式 |
|---|---|---|---|
trn_00000_29010ad6 | space_science | computer_hardware | 剔除,不参与训练 |
trn_00001_f6349e3b | space_science | computer_hardware | 剔除,不参与训练 |
trn_00013_5a287f59 | space_science | sports_recreation | 剔除,不参与训练 |
trn_00016_fb0e047c | space_science | computer_hardware | 剔除,不参与训练 |
trn_00033_7005fcb7 | computer_hardware | system_software | 剔除,不参与训练 |
完整过滤清单可在运行 src/main.py 时的终端日志中查看。
本地验证集详细指标
precision recall f1-score support
computer_hardware 1.0000 1.0000 1.0000 208 medical_health 1.0000 1.0000 1.0000 108 mobility_vehicle 1.0000 1.0000 1.0000 198 space_science 1.0000 1.0000 1.0000 106sports_recreation 1.0000 1.0000 1.0000 203 system_software 1.0000 1.0000 1.0000 208
accuracy 1.0000 1031 macro avg 1.0000 1.0000 1.0000 1031 weighted avg 1.0000 1.0000 1.0000 1031混淆矩阵
[[208 0 0 0 0 0] [ 0 108 0 0 0 0] [ 0 0 198 0 0 0] [ 0 0 0 106 0 0] [ 0 0 0 0 203 0] [ 0 0 0 0 0 208]]如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时


















