主动学习实验:熵采样真的比随机采样更有效吗
这次实验想验证一个很具体的问题:
当标注数据有限时,主动学习能不能比随机挑样本更划算?
实验任务是 IMDB 情感分类。
我把训练集看成一个“未标注池”,一开始只给模型少量已标注样本。之后模型每一轮自己挑一批样本进行“标注”。这里的标注是模拟的,因为 IMDB 原本就有真实标签,只是实验中先把它们藏起来。
本次主要比较两种采样策略:
random samplingentropy sampling最终结果如下:
| 策略 | 标注比例 | 标注样本数 | Accuracy | F1 |
|---|---|---|---|---|
| random | 10% | 2500 | 0.8526 | 0.8572 |
| random | 30% | 7500 | 0.8751 | 0.8758 |
| random | 50% | 12500 | 0.8801 | 0.8798 |
| entropy | 10% | 2500 | 0.8529 | 0.8539 |
| entropy | 30% | 7500 | 0.8768 | 0.8747 |
| entropy | 50% | 12500 | 0.8843 | 0.8830 |
整体看,熵采样在 Accuracy 上略高于随机采样,但优势不算大。
一、为什么要做主动学习
Section titled “一、为什么要做主动学习”很多机器学习任务里,数据本身并不难获得,难的是标签。
比如文本分类任务中,原始文本可以批量收集,但每条文本属于哪个类别,需要人工判断。
如果每条数据都人工标注,成本会很高。
主动学习的思路是:
不要盲目标注所有数据让模型优先挑选最值得标注的样本更直白一点:
模型先告诉我们它最拿不准哪些样本,然后我们优先给这些样本打标签。
这样做的目标不是让模型看更多数据,而是让有限的标注预算更有价值。
在文本分类任务中,常见主动学习策略包括:
随机采样不确定性采样熵采样margin samplingleast confidence多样性采样代表性采样这次实验只做课程要求里的两个策略:
random samplingentropy sampling二、实验任务:IMDB 情感分类
Section titled “二、实验任务:IMDB 情感分类”IMDB 是一个经典英文电影评论情感分类数据集。
任务很简单:
输入:一段电影评论输出:正面评价或负面评价标签含义是:
0 = negative1 = positive数据规模如下:
训练集:25000 条测试集:25000 条我使用全样本进行实验。
训练集被当作主动学习的样本池,测试集只用于最终评估。
三、实验设置
Section titled “三、实验设置”本实验没有使用 BERT,而是采用传统文本分类方案:
TF-IDF 特征SGDClassifier 线性分类器modAL 主动学习框架这样做有两个原因。
第一,图片要求中明确提到了 modAL。这个框架更适合和 scikit-learn 模型配合,用来快速实现池式主动学习。
第二,主动学习需要反复训练模型、查询未标注池。如果直接用 BERT,每一轮都要重新训练和预测,成本会明显增加。用 TF-IDF 加线性分类器,实验更快,也更容易观察采样策略本身的影响。
实验参数如下:
| 配置项 | 设置 |
|---|---|
| 数据集 | IMDB |
| 特征方法 | TF-IDF |
| 最大特征数 | 50000 |
| 分类器 | SGDClassifier |
| 初始标注数 | 500 |
| 每轮查询数 | 500 |
| 记录点 | 10%、30%、50% |
| 评价指标 | Accuracy、F1 |
实验流程可以概括为:
随机抽取 500 条样本作为初始标注集训练分类器使用采样策略选择下一批样本读取真实标签,模拟人工标注加入训练集重新训练在 10%、30%、50% 标注比例处评估模型四、随机采样
Section titled “四、随机采样”随机采样是最简单的 baseline。
它不考虑模型当前的判断,也不看样本难度,只是随机选择一批未标注样本加入训练集。
它的作用是提供一个对照:
如果不用主动学习策略,只是随机标注,模型能达到什么效果?
随机采样结果如下:
| 标注比例 | 标注样本数 | Accuracy | F1 |
|---|---|---|---|
| 10% | 2500 | 0.8526 | 0.8572 |
| 30% | 7500 | 0.8751 | 0.8758 |
| 50% | 12500 | 0.8801 | 0.8798 |
可以看到,随机采样本身已经很强。
只用 10% 标注数据时,Accuracy 就达到了 0.8526。
这说明 IMDB 这个任务在 TF-IDF 加线性分类器设置下并不算特别困难。
熵采样属于不确定性采样的一种。
它关注的是模型预测分布的不确定程度。
对于二分类任务,如果模型预测某条评论为正类的概率接近 0.5,说明模型很犹豫,这条样本就更值得标注。
简单理解:
模型越不确定样本信息量可能越高越应该优先标注熵采样的结果如下:
| 标注比例 | 标注样本数 | Accuracy | F1 |
|---|---|---|---|
| 10% | 2500 | 0.8529 | 0.8539 |
| 30% | 7500 | 0.8768 | 0.8747 |
| 50% | 12500 | 0.8843 | 0.8830 |
熵采样在 Accuracy 上三个记录点都略高于随机采样。
不过 F1 指标在 10% 和 30% 标注比例下略低于随机采样,只有在 50% 时超过随机采样。
所以这次实验不能简单说熵采样全面胜出。
更准确的说法是:
熵采样在 Accuracy 上略有优势,但整体提升有限。
六、结果对比
Section titled “六、结果对比”两种策略的 Accuracy 对比如下:
| 标注比例 | Random Accuracy | Entropy Accuracy | 提升 |
|---|---|---|---|
| 10% | 0.8526 | 0.8529 | +0.0003 |
| 30% | 0.8751 | 0.8768 | +0.0017 |
| 50% | 0.8801 | 0.8843 | +0.0042 |
F1 对比如下:
| 标注比例 | Random F1 | Entropy F1 | 变化 |
|---|---|---|---|
| 10% | 0.8572 | 0.8539 | -0.0033 |
| 30% | 0.8758 | 0.8747 | -0.0011 |
| 50% | 0.8798 | 0.8830 | +0.0032 |
平均来看:
Accuracy 平均提升约 0.0021F1 平均变化约 -0.0004也就是说,熵采样确实带来了一点 Accuracy 提升,但幅度并不明显。
七、采样效率曲线
Section titled “七、采样效率曲线”Accuracy 曲线中,两条线整体走势接近。
随着标注比例增加,随机采样和熵采样的效果都在提升。
10% → 30%:提升比较明显30% → 50%:提升变小这说明模型在前期对新增标注数据更敏感。
当标注比例已经达到 30% 以后,再继续增加标注样本,收益开始变小。
这种现象也比较符合直觉:模型一开始缺少标签,多给一些标注样本能快速改善效果;后面模型已经学到主要模式,新增数据带来的边际收益会下降。
八、为什么熵采样提升不大
Section titled “八、为什么熵采样提升不大”这个结果其实很正常。
我觉得主要有三个原因。
1. IMDB 任务本身比较标准
Section titled “1. IMDB 任务本身比较标准”IMDB 是经典二分类任务。
TF-IDF 加线性分类器已经能得到不错的结果。
随机采样在 10% 标注比例下就达到了:
Accuracy = 0.8526baseline 已经很高,熵采样可提升空间自然有限。
2. 批量查询会削弱精细选择能力
Section titled “2. 批量查询会削弱精细选择能力”本实验每轮查询:
500 条样本批量查询的好处是运行快。
但它也会带来一个问题:模型一次性挑很多样本,样本之间可能重复、相似,主动学习的选择优势会被稀释。
如果每轮只查询 50 条或 100 条,熵采样可能更有优势,但实验轮数会增加很多。
3. 不确定性不等于多样性
Section titled “3. 不确定性不等于多样性”熵采样只看模型是否犹豫。
但模型最犹豫的样本,不一定覆盖了足够多的数据模式。
有些高熵样本可能非常相似。
如果只挑这些样本,模型获得的信息不一定比随机采样多很多。
这也是主动学习中经常遇到的问题:只看不确定性,可能忽略样本多样性。
九、这次实验说明了什么
Section titled “九、这次实验说明了什么”这次实验的主要结论有三个。
第一,更多标注数据确实能提升模型效果。
无论是随机采样还是熵采样,Accuracy 和 F1 大体上都随着标注比例增加而提高。
第二,熵采样在 Accuracy 上略优于随机采样。
尤其在 50% 标注比例下:
random Accuracy = 0.8801entropy Accuracy = 0.8843提升为:
+0.0042第三,主动学习并不是一定大幅领先随机采样。
在这次实验里,熵采样的优势比较小,F1 指标在部分记录点还低于随机采样。
这说明主动学习效果会受到很多因素影响,例如:
任务难度特征表示模型类型不确定性估计质量查询批大小样本多样性十、主动学习适合什么任务
Section titled “十、主动学习适合什么任务”结合这次实验,我觉得主动学习更适合这些场景:
数据容易收集,但标签昂贵未标注样本数量很大人工标注预算有限模型能给出相对可靠的不确定性样本之间差异较大希望尽快找到高价值训练样本例如:
医学文本标注法律文档分类舆情风险识别工业缺陷检测专业领域文本审核低资源语种分类这些任务的共同点是:原始数据不一定难拿,但高质量标签很贵。
这种情况下,主动学习的意义会比 IMDB 这种标准数据集更明显。
十一、如果继续优化实验
Section titled “十一、如果继续优化实验”这次实验只是一个基础版本。
后续可以继续做几个改进。
1. 减小查询批大小
Section titled “1. 减小查询批大小”当前每轮查询 500 条样本。
可以改成:
50100200这样能更细地观察主动学习策略的影响。
缺点是训练轮数会增加。
2. 多次随机种子取平均
Section titled “2. 多次随机种子取平均”当前只跑了一个随机种子。
如果要让结果更稳,可以跑:
seed = 1seed = 2seed = 3seed = 4seed = 5然后取平均值和标准差。
这样可以避免某次随机初始样本影响结论。
3. 加入更多采样策略
Section titled “3. 加入更多采样策略”除了随机采样和熵采样,还可以加入:
least confidencemargin samplingBALDcore-setdiversity sampling这样可以更完整地比较主动学习策略。
4. 使用深度模型
Section titled “4. 使用深度模型”当前实验使用 TF-IDF 和线性模型。
后续可以尝试:
BERT-tinyDistilBERTbert-base-uncased不过主动学习需要反复训练和预测,使用深度模型后耗时会明显增加。
这次实验用 IMDB 情感分类任务比较了随机采样和熵采样两种主动学习策略。
实验结果表明:
熵采样在 Accuracy 上整体略优于随机采样两种策略的 F1 差距很小标注比例越高,模型效果越好主动学习收益在当前设置下并不明显最核心的结果是:
| 策略 | 10% Accuracy | 30% Accuracy | 50% Accuracy |
|---|---|---|---|
| random | 0.8526 | 0.8751 | 0.8801 |
| entropy | 0.8529 | 0.8768 | 0.8843 |
我的理解是:
主动学习不是一个保证稳赢随机采样的方法,它更像是一种节省标注成本的策略。它是否有效,取决于模型的不确定性是否可靠,以及被选中的样本是否真的能补足模型当前的弱点。
在这次 IMDB 实验中,熵采样确实略有优势,但优势不大。
如果放到标注成本更高、类别更复杂、样本差异更大的任务里,主动学习的价值可能会更明显。