ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

外包标注翻车 3 次后,机器学习基础的 5 条止血军规救回了模型精度

外包标注翻车 3 次后,机器学习基础的 5 条止血军规救回了模型精度 外包标注翻车 3 次后,机器学习基础的 5 条止血军规救回了模型精度去年我接手一个电商评论情感分析项目,任务是把 2 万条用户评价分成正面、负面、中性。时间紧,我直接把标注外包给了某平台。两周后数据到手,我兴冲冲训练了一版 BERT 微调模型,验证集准确率卡在 78.3%,怎么都上不去。我以为是模型结构不够深,加大层数、换优化器、调学习率和 batch size,折腾了一周超参调优,准确率纹丝不动。直到周一例会上,技术总监甩出一句「你验过标注一致性吗」,我才冷汗直冒。那天下午我打开机器学习基础课程的数据质量那一章,对照着学到的标注质量控制方法,写了个一致性检查脚本,结果发现 2 万条数据里有 3100 多条标注不一致--同样一条评价,不同标注员打出了完全相反的标签。我立刻按机器学习基础里讲的规范重新清洗数据和补标,模型准确率跳到 91.5%。这段经历让我意识到,标注质量对模型精度的影响比模型结构大得多,也促使我整理了 5 条来自机器学习基础的止血军规。标注外包为什么总翻车我复盘时发现,外包团队给的是 Excel 表格和一句话「标记情感倾向」,没有标注规范文档,没有样例说明,没有模糊案例处理指南。标注员凭感觉工作,对于「还行吧」「也就那样」这类评价,有人标正面有人标中性。机器学习基础课程里专门有一节讲数据预处理中的标注偏差,强调要定义标注规则、制定样例并做标注员培训。我当时根本没做这些,直接导致了系统性偏差。这门课还展示了数据漂移场景--训练数据和线上数据分布偏移时,即使标注准确模型也可能失效,而我没做任何数据分布分析。现在回想,如果我一开始就学完机器学习基础这门课,至少能避免 80% 的标注翻车。我试过哪些错误方法模型不准时,我第一反应是调模型。尝试过换 Transformer 层数、增加 dropout、改用 focal loss 处理类别不均衡,甚至用超参调优工具跑了两天自动搜索。准确率还在 79% 左右打转。后来我怀疑数据量不够,又让外包追加标注了 5000 条,结果模型只在训练集上涨了 3 个点,验证集反降--典型的过拟合。机器学习基础里讲得很清楚:脏数据越多,模型越容易学到噪声而非真实模式。我相当于用更多带有标注错误的数据去训练,让模型把标注员的差错当成了规律。如果没有学机器学习基础,我可能还在烧钱堆数据。怎么用机器学习基础知识止血我回过头老老实实看完机器学习基础中关于数据预处理和机器学习管道的章节,按以下步骤重建标注流:制定标注规范:明确正面/负面/中性的定义,附 200 条标注样例。标注一致性检验:同一批数据安排双人标注,计算 Cohens Kappa 系数,低于 0.6 的批次打回重标。混淆矩阵分析:用初始模型在验证集上输出混淆矩阵,发现「中性」类别被错分成「负面」的比例特别高,说明标注规范里两者的边界没划清。一致性检查的脚本大致如下:# 计算标注员之间的一致性 from sklearn.metrics import cohen_kappa_score import pandas as pd df pd.read_csv(double_labeled.csv) k cohen_kappa_score(df[label_a], df[label_b]) print(fCohen Kappa: {k:.3f}) # 筛选不一致样本,发送给仲裁员 inconsistent df[df[label_a] ! df[label_b]] inconsistent.to_csv(need_arbitration.csv, indexFalse)学完机器学习基础后,我还把整个数据处理流整理成机器学习管道,从数据摄入、清洗、特征工程到模型训练一气呵成,避免手动操作引入新错误。AWS 基础知识里 S3 存储和 IAM 权限的那部分也帮了大忙,我统一用 S3 管理标注版本,再没出现过「用错文件」的乌龙。主动学习怎么砍掉一半标注成本清理完旧数据后,还要补标一批新样本。全量二次标注太贵,我用机器学习基础里学到的主动学习思路写了个选样脚本:先用现有模型预测未标注数据,挑出模型最不确定的样本(预测概率接近 0.5)送去人工标注,这样每条标注都能带来最大的信息增益。# 主动学习不确定采样 import numpy as np def uncertainty_sampling(probs, n_samples500): # probs 是模型输出的概率矩阵,shape (n, num_classes) uncertainty 1 - np.max(probs, axis1) # 置信度越低越不确定 top_n_idx np.argsort(uncertainty)[-n_samples:] return top_n_idx原本计划再标 8000 条,改成主动学习策略后,只补标了 3500 条高价值样本,模型准确率就稳在 91% 以上,标注成本省了超过一半。机器学习基础这门课把主动学习的原理和适用场景讲得很透,我才能快速落地。如果你也在外包标注上烧钱,建议翻一翻机器学习基础里主动学习那部分。学完机器学习基础后我变在哪我把这套流程固化下来,用在了后续三个 NLP 项目上。最大的变化是思维转变:以前模型不准就改模型,现在第一反应是检查数据质量。亚马逊云科技机器学习提供的 SageMaker Clarify 这类工具,帮我自动检测数据偏差和标注错误,配合机器学习基础教的手动检查方法,两者互补。上个月,一个新项目上线前灰度测试,模型准确率有 93%,同事惊讶问我是不是换了个大模型,我说只是把机器学习入门课里讲的标注规范做扎实了,连模型都是去年那个版本。机器学习入门和机器学习基础这两门课,一个帮我快速上手 ML 工程,一个帮我补齐底层认知,搭配着学效果最好。给你的 5 条止血军规先定标注规范再动手:参考机器学习基础的数据质量章节,定义类别边界和样例,否则后续全是填坑。一致性检验必须做:双人标注 Kappa 系数是底线,低于 0.6 的数据集宁愿重标也别硬投训练。用混淆矩阵定位数据问题:别光看总准确率,矩阵能告诉你哪两类标签之间边界模糊。主动学习省成本:先让模型挑不确定样本,再定向标注,标注预算对半砍是常有的事。把数据管道写进代码:从预处理到训练形成机器学习管道,每一步可追溯,别再靠人肉拷文件。这 5 条每一条都来自机器学习基础课程里的实战教训,这门课把数据标注、机器学习管道、过拟合判断、混淆矩阵解读这些点串联成体系,值得点进去把相关内容系统过一遍。AWS 基础知识也建议同步补上,避免在权限和存储上踩低级坑。标注外包翻车不可怕,可怕的是翻车后只怪模型不改数据。如果你也在经历类似瓶颈,不妨回头把机器学习基础重新拉一遍,或许能像我一样,少花两周无用功。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进