主动学习实战:别乱标数据,让模型告诉你哪里不懂
标注数据的成本太高,很多时候我们随缘随机抽样交给标注员,结果发现 80% 的数据都是冗余的。主动学习(Active Learning)的核心逻辑其实很简单:让模型自己挑出那些它最“困惑”的样本,只标这些关键点。
下一篇
我的 The Stack v3 部署踩坑笔记 →
我之前在处理一个半监督学习的分类任务时,尝试用这种策略来减少标注量。最有效的方法是基于“不确定性采样”(Uncertainty Sampling),通过计算预测概率分布的熵来筛选样本。
一个简单的实现逻辑如下:
import numpy as np
def get_uncertain_samples(model, unlabeled_data, n_samples=10):
# 获取模型对未标注数据的预测概率
probs = model.predict_proba(unlabeled_data)
# 计算熵 (Entropy),熵越大代表模型越不确定
# Entropy = -sum(p * log(p))
entropy = -np.sum(probs * np.log(probs + 1e-10), axis=1)
# 选出熵最高的前 n 个样本索引
uncertain_indices = np.argsort(entropy)[-n_samples:]
return uncertain_indices在实际部署这个工作流时,我踩的一个坑是:如果模型初始状态太差,它挑选出的“困惑样本”可能是纯粹的噪声或异常值,导致模型在错误的方向上迭代。
建议的实操流程:
一、先用少量随机样本进行 Warm-up 训练,确保模型能分清基本面。
二、运行上述不确定性筛选,将样本推给标注员。
三、将新标注数据加入训练集,重新拟合模型。
四、重复循环直到性能达标。
这种方法比盲目扩充数据集要高效得多,尤其是对于那些专家标注成本极高的工业场景。
