Dataset Curator 是一个用于整理和清洗机器学习训练数据集的技能,目标是帮助用户为机器学习模型准备高质量的训练数据。资料指出,数据质量是模型性能最重要的单一因素,但往往投入不足。该技能帮助用户系统性地清洗、验证、增强和维护数据集,从而获得更好的模型。
用途 该技能覆盖从初始收集到持续维护的完整数据准备流程,包括去重、标签质量评估、偏差检测、增强策略和版本控制。它应用生产级机器学习系统的最佳实践,确保数据集不仅干净,而且针对学习目标进行策略性优化。适用于构建分类器、微调大语言模型或训练自定义模型的场景。
主要能力 该技能提供三个核心工作流。
工作流一:评估数据集质量。对数据集进行画像,包括规模与维度、标签分布与平衡、缺失值模式、特征统计。识别质量问题,包括重复项(精确重复与近似重复)、错误标注样本、异常值与离群点、数据泄漏、偏差与代表性缺口。测量质量指标,资料中给出的示例代码为:
def assess_quality(dataset): return { "size": len(dataset), "duplicate_rate": find_duplicates(dataset).ratio, "missing_rate": dataset.isnull().mean(), "label_balance": compute_entropy(dataset.labels), "outlier_rate": detect_outliers(dataset).ratio, "estimated_label_noise": estimate_label_noise(dataset) }
随后按影响程度对问题排序,并制定修复计划。
工作流二:清洗与准备数据。去除重复项:精确重复使用基于哈希的去重,近似重复使用基于相似度的聚类,并决定保留第一条、最佳一条或合并。处理缺失值:理解缺失机制(MCAR、MAR、MNAR),并相应地进行插补、删除或标记。修复标签质量:通过置信度评分识别可能的错误标注,转交人工审核或自动纠正,并记录标注指南。规范化与标准化:统一格式、进行模式验证、统一编码。最后验证清洗后的数据集。
工作流三:增强与平衡。分析类别不平衡:计算不平衡比率,评估对模型训练的影响。应用平衡策略:对少数类过采样(SMOTE、随机)、对多数类欠采样、在训练中使用类别权重。生成增强数据:文本使用复述、同义词替换、回译;图像使用旋转、翻转、颜色抖动、mixup;表格数据使用噪声注入、特征扰动。验证增强质量:确保增强样本真实合理,检查是否引入偏差,并对变更进行版本记录和文档化。
使用方式 资料提供了快速参考,列出触发方式:评估质量使用“Check quality of this dataset”;查找重复使用“Find duplicates in dataset”;清洗标签使用“Fix mislabeled data”;平衡类别使用“Handle class imbalance”;增强数据使用“Augment dataset for [task]”;数据集版本化使用“Set up dataset versioning”。
最佳实践 资料列出多项最佳实践:处理前先画像,在修改数据前理解数据,计算统计量并可视化分布,记录原始状态以供参考,识别问题中的模式;保留溯源,跟踪每一次转换,像管理代码一样对数据集进行版本控制,记录所有清洗操作,维护原始数据与清洗后数据之间的映射;优先保证标签质量,垃圾标签进则垃圾模型出,投入制定清晰的标注指南,使用多个标注者并测量一致性,定期对标签进行质量审计;测试清洗影响,在原始数据与清洗后数据上分别训练模型,跟踪哪些清洗步骤最有效,避免损害性能的清洗;谨慎分层划分,在训练/验证/测试中保持分布,按标签和关键特征分层,将相关样本保留在同一划分中,如适用则确保时间顺序;记录一切,包括带关键统计量的数据集卡片、已知问题与局限、收集方法与偏差。
高级技术 资料介绍了若干高级技术。标签噪声的置信学习:使用 cleanlab 的 find_label_issues 识别并修复错误标注样本,示例代码为:
from cleanlab import find_label_issues
Train model to get predicted probabilities
model.fit(X_train, y_train) pred_probs = model.predict_proba(X_train)
Find likely mislabeled examples
issues = find_label_issues( labels=y_train, pred_probs=pred_probs, return_indices_ranked_by="self_confidence" )
Review and correct top issues
for idx in issues[:100]: review_and_correct(X_train[idx], y_train[idx])
基于相似度的去重:使用嵌入去除近似重复,示例代码为:
def deduplicate_semantic(texts, threshold=0.95): embeddings = embed(texts) clusters = cluster_by_similarity(embeddings, threshold)
# Keep one representative per cluster
deduplicated = []
for cluster in clusters:
representative = select_best(cluster) # longest, most recent, etc.
deduplicated.append(representative)
return deduplicated
用于高效标注的主动学习:优先分配标注精力,示例代码为:
def active_learning_loop(unlabeled_pool, labeled_set, budget): while len(labeled_set) < budget: # Train on current labeled data model.fit(labeled_set)
# Score unlabeled by uncertainty
uncertainties = model.uncertainty(unlabeled_pool)
# Select most uncertain for labeling
to_label = select_top_k(unlabeled_pool, uncertainties, k=10)
labels = human_label(to_label)
# Update sets
labeled_set.add(to_label, labels)
unlabeled_pool.remove(to_label)
return labeled_set
数据切片分析:发现存在问题的子群体,示例代码为:
def find_weak_slices(model, data, features): # Evaluate on all slices slices = generate_slices(data, features)
weak_slices = []
for slice_name, slice_data in slices:
performance = evaluate(model, slice_data)
if performance < overall_performance - threshold:
weak_slices.append({
"slice": slice_name,
"size": len(slice_data),
"performance": performance
})
return sorted(weak_slices, key=lambda x: x["performance"])
常见陷阱 资料列出需要避免的常见陷阱:像清洗训练数据一样清洗测试数据(导致泄漏);过度激进的去重,移除了有效的变体;在不理解缺失机制的情况下插补数值;以引入不真实样本的方式进行增强;直到模型训练失败才处理类别不平衡;不对数据集进行版本控制,导致实验不可复现;假设数据越多越好(质量优于数量);未能记录数据收集的偏差与局限。
适用场景与限制 该技能适用于需要为机器学习模型准备训练数据的场景,包括构建分类器、微调大语言模型或训练自定义模型。资料未提供关于收费、价格、平台支持范围或具体效果保证的信息。