这类问题我又碰上了一次。两百条“回答是否命中知识库”的样本,两名标注员一致率只有 0.72,各自跑出的评测均分差 15 分,同一版模型的结论一个合格一个不合格。
第一反应是「两人拿到的上下文长度不同,判断依据不一样」,验证下来不成立。
真正麻烦的地方在于,几个原因的现象几乎一样。标注指南没定义部分命中算不算命中;边界样本没有第三方仲裁,各自按感觉判;样本顺序固定,疲劳导致后半段偏严。
上来先抽三十条重合样本对齐判定
python -c "print({'overlap':30,'agreement':0.72})"
接着把指南改成可判定的判定树
python -c "print('命中=答案含知识库中的关键数值且无相反表述')"
算一次 Cohen kappa 衡量一致性
python -c "from sklearn.metrics import cohen_kappa_score;print(cohen_kappa_score([1,0,1],[1,0,0]))"
等前面都确认过,再分歧样本交给第三人仲裁后回填
python -c "print({'arbitrated':18,'updated':18})"
恢复的判定其实很直接。两人一致率升到 0.91,kappa 超过 0.8,重跑同一版模型两人给出的均分差在 2 分以内。
这里还有个坑。评测结论打架时先怀疑标注口径而不是模型,指南里凡是出现“较好”“基本符合”这类词,就一定会出现两种理解。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
