如何发现和避免机器学习项目中的结构性偏见
构建原型:聚焦数据!
- 选择正确的数据
- 数据建模
- 构建适合数据的机器学习模型/算法
- 对数据进行评估
- 在数据模型和算法上进行迭代改进
为什么仍需要适当的黄金标注?
- 评估:衡量性能和进展
- 训练监督模型:更小、更专业的模型可能更具成本效益
- 调整大语言模型:少样本提示示例、微调开源大语言模型
评估你的评估
用例:实体链接或消歧
通过从维基链接组装训练数据,构建知识库并优化内存/准确性权衡。
- 随机基线:54%
- 使用spaCy和Thinc实现的实体链接模型:79%
- 先验概率基线:78.2%
模型仅略微优于简单基线,需要仔细检查数据质量。
数据模型与标注策略
用例:识别文本中的学校名称
初始NER模型获得92% F分数,但通过将模型应用回训练数据集发现标注错误和结构性问题。
建议:撰写标注指南
- 定义标签模式
- 为标注者提供详细指南
- 当实体的全名和缩写连续出现时,每个都应标注为单独的实体
建议:直观的标注框架
- 为繁琐和重复性任务提供支持
- 一次专注于单个任务
- 验证回调以帮助执行指南
建议:设计适当的标签方案
确保标签方案清晰明确,与建模方法相匹配,允许未来扩展,并与数据下游使用兼容。
建议:测量标注者间一致性
绘制不同标注者标签之间的重叠图,识别混淆区域,用于更新指南和标签方案。
建议:绘制学习曲线
绘制F分数与使用的训练数据百分比的关系图,估算通过标注更多数据可以获得多少收益。
建议:设置外部评估
内在评估对应ML/NLP任务的数据模型,外在评估对应下游需求的更高层次视图,对变化的数据模型具有鲁棒性。
外部评估揭示了什么是真正重要的,可能不会导致最终错误,即使严格评估设置中会出现误报和漏报。
语料库构建中的偏见
用例:识别动物群和海床沉积物
不同设备导致图像质量变化。
建议:原型阶段坚持有限范围
- 明确初始范围:来源、输入类型、标签集
- 向客户澄清模型不会超出原始范围泛化
- 设置可靠的基准
建议:超越原型 - 使模型鲁棒
- 数据增强:添加人工噪声,变换图像创建更多变化
- 探索不同架构和训练超参数
- 测量并避免过拟合
建议:生产环境 - 检测数据漂移
- 手动:定性分析和用户反馈,定期策划新的评估集
- 自动:测量预测标签分布,测量新预测的置信度分数
用例:识别新闻中的政治立场
客户目标:识别所有关于英国脱欧的政治参与者和观点。
基于关键词的语料库选择
- 文本选择:标题中提到"Brexit"的文章
- 基于关键词的预选阻止评估其他文章中的假阴性数量
- 可能错过不符合原始标准的相关信息
建议:形式化输入选择程序
- 首先训练简单的文档级分类器
- 区分政治新闻文章与其他类别
- 识别与英国脱欧相关的文章
- 在数据不平衡时特别有益
示例:瀑布策略 - 第1步
文本分类:快速文档级决策,训练ML分类器,可重用组件,易于过滤相关文档。
示例:瀑布策略 - 第2步
细粒度分析:仅在通过初始步骤的文档上执行,如命名实体识别。
两个独立步骤减少标注者的认知负荷,允许训练专门的ML模型。
避免:创建完全随机的数据集分割
在真实世界项目中不应这样做。
建议:文档级分割
- 将来自同一原始文档的所有示例保留在同一分割中
- 否则会从训练数据向测试数据"泄露"信息
- 人为提升性能数字
建议:确定性和可重复的分割
使用唯一文档ID的确定性哈希来确定分割,确保同一文档始终在同一分割中,即使扩展数据集或重新运行分割算法。
总结
运行机器学习项目的建议
- 通过形式化选择程序避免选择偏见
- 创建确定性、文档级的训练/开发/测试分割
- 仔细设计数据模型/标签方案
- 撰写详细的数据指南
- 设置有意义的外部评估
- 查看标注者间一致性统计并绘制学习曲线
- 将初步模型应用回训练数据
- 手动检查黄金标注和不正确预测
- 确保你在爬正确的山
- 数据质量应处于核心位置!