这个坑值得记一笔。情感标注项目做到 1.8 万条时产品改了规则,把「一般」拆成「偏正面」和「偏负面」两档,旧数据全是三分类,新标注员按五分类打,混在一起训练后验证集准确率反而掉了 6 个点。
刚开始盯着「拆分档位的边界描述含糊,标注员各自理解」,折腾了半个多小时,排掉了。
真正麻烦的地方在于,几个原因的现象几乎一样。新旧标签体系不同,直接合并后类别语义冲突;旧数据没有记录标注规范版本;验证集也混了两套标签,指标失去可比性。
动手时先统计两套标签的分布差异
python -c "import pandas as pd;d=pd.read_csv('labels.csv');print(d.groupby(['spec_ver','label']).size())"
给旧数据补上规范版本字段
python -c "import pandas as pd;d=pd.read_csv('labels.csv');d.loc[d.spec_ver.isna(),'spec_ver']='v2';d.to_csv('labels_v.csv',index=False)"
再往下对边界样本做一次双人重标并算一致性
python -c "from sklearn.metrics import cohen_kappa_score;print(cohen_kappa_score(['偏正','中性','偏负'],['偏正','偏负','偏负']))"
只把重标后的样本并入新训练集
python merge_labels.py --base labels_v.csv --relabel relabel.csv --out train.csv
改完先别撤,确认这几项。新旧标签映射表固定下来,边界样本的一致性系数升到 0.8 以上,重训后验证集准确率回到改动前水平。
容易忽略的是,标签体系变更时最贵的不是重标,而是没有版本字段导致无法回溯,规范版本应该和标签一起写进数据。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
