先把当时的情况摆出来。用主动学习给 12 万条未标注语料排序,策略取模型置信度最高的一批送标,花了两周预算标完 8000 条,加入训练后指标几乎没动。
真正麻烦的地方在于,几个原因的现象几乎一样。高置信度样本信息量最低,标注收益接近零。也可能是置信度取的是 softmax 最大值,模型过度自信。
另外,没有做不确定性加多样性的混合采样。少数情况下是采样后没去重,同一模板的样本占了七成。
动手时先分别按置信度高低各取 200 条对比
python -c "import pandas as pd;d=pd.read_csv('pred.csv');print(d.nlargest(200,'conf').label.value_counts().head())"
再往下改用熵或 margin 作为不确定性指标
python -c "import numpy as np;p=np.array([0.9,0.05,0.05]);print('entropy',-(p*np.log(p+1e-9)).sum())"
然后加聚类做多样性采样避免同模板堆积
python -c "from sklearn.cluster import KMeans;print(KMeans(n_clusters=20).fit_predict(__import__('numpy').random.rand(2000,64)).shape)"
末了对比两批样本训练后的指标增量
python train_eval.py --train base.csv --add high_conf.csv --eval test.csv
别只看报错消失,验证要多做一步。不确定性采样那一批在同样标注量下把 F1 拉高 4.2 个点,高置信度那批只有 0.3 个点,采样策略被换掉。
容易忽略的是,主动学习要的是模型最没把握的样本,挑最高分等于挑最简单的题,预算花完指标不动是必然结果。这类问题最好一次改到位,反复小改反而容易把原因搅混。
