如何发现并避免机器学习项目中的结构性偏见
Sofie Van Landeghem
NLP和机器学习自由职业者 & 开源维护者
PyData London 2024
管理期望
稳健解决方案
- 迭代数据模型
- 策划数据集
- 微调机器学习模型
- 提升准确性与效率
初始原型
- 创建数据模型
- 组装数据集
- 构建初步机器学习模型
- 建立准确性与效率基线
构建原型:聚焦数据!
- 选择正确数据
- 建模数据
- 构建适配数据的机器学习模型/算法
- 对数据进行评估
- 对数据模型和算法进行迭代改进
为何需要标注数据?
即使现代LLM具备零样本学习能力,我们仍然需要:
- 评估:衡量性能和进展
- 训练监督模型:小型专业化模型可能更具成本效益
- 调整LLM:少样本提示示例、微调开源LLM
评估你的评估策略
用例:实体链接(EL)或消歧
从维基链接组装训练数据,构建知识库(KB)并评估:
- 修剪KB以实现内存/准确性平衡
- 随机基线:54%
- 使用spaCy和Thinc实现的实体链接模型:79%
但通过与先验概率比较发现,模型仅 marginally 改进基线(78.2% vs 79%),揭示数据集中存在的结构性问题。
关键建议:确保攀登正确的山峰
- 数据是否可靠?
- 测试集是否能代表真实世界数据?
- 评估是否考虑层次概念?
- 相关概念的误判是否受到同等严厉的惩罚?
- 是否使用合理的基线评估模型准确性?
数据模型与标注策略
用例:识别文本中的学校名称
初始NER模型获得92% F分数,但通过将模型应用回训练数据发现:
- 预测错误可能实际上是标注错误
- 揭示结构性问题或偏见
- 需要制定详细的标注指南
推荐实践
- 编写标注指南:定义标签模式,提供详细标注说明
- 构建直观标注框架:支持繁琐重复任务,减少认知负荷
- 设计合适的标签方案:确保清晰无歧义,适合建模方法
- 测量标注者间一致性:识别标签混淆,更新指南
- 绘制学习曲线:估计通过标注更多数据可获得的收益
设置外部评估
内部评估:基于字符的标注,对应ML/NLP任务的数据模型
外部评估:更高层次的视角,对应下游需求的数据,对数据模型变化具有鲁棒性
外部评估揭示什么是真正重要的,例如在NER任务中,严格评估可能显示错误,但下游处理仍能正确识别实体。
语料库构建中的偏见
用例:识别动物群和海底沉积物
不同设备导致图像质量差异,建议:
- 原型阶段:限定范围,设定可靠基准
- 超越原型:通过数据增强、探索不同架构使模型稳健
- 生产环境:通过人工分析和自动检测监控数据漂移
用例:识别新闻中的政治立场
基于关键词的语料选择可能导致假阴性,建议:
- 形式化输入选择程序:训练文档级分类器
- 采用瀑布策略:减少标注者认知负荷,训练专业化模型
数据分割建议
避免:创建完全随机的数据集分割
推荐:
- 文档级分割:将同一文档的所有示例保持在同一切割中
- 确定性和可重复的分割:使用文档ID的确定性哈希值
总结建议
运行机器学习项目时的关键建议:
- 通过形式化选择程序避免选择偏见
- 创建确定性、文档级的训练/开发/测试分割
- 精心设计数据模型/标签方案
- 编写详细的数据指南
- 建立有意义的外部评估
- 查看标注者间一致性统计并绘制学习曲线
- 将初步模型应用回训练数据
- 手动检查黄金标注和错误预测
- 确保攀登正确的山峰
- 数据质量应置于核心位置!