使用 AutoNLP 和 Prodigy 进行主动学习
Hugging Face 展示了一种在机器学习中实现主动学习的工作流,使用 AutoNLP 进行自动化模型训练,并使用 Prodigy 进行迭代式数据标注。该流水线允许用户通过将人力集中在数据标注而非模型架构和超参数调优上,从而创建最先进的 (SOTA) 模型。
使用 AutoNLP 进行自动化模型训练
AutoNLP 是一个旨在以极少的编码构建 SOTA 深度学习模型的框架。它利用了 Hugging Face 现有的生态系统,包括 transformers、datasets 和 inference-api 库。
AutoNLP 的核心能力包括:
- 广泛的任务支持:它支持二分类、回归、多分类、标记分类(如 NER 或词性标注)、问答和摘要生成。
- 多语言支持:它支持包括英语、法语、德语、西班牙语、印地语和荷兰语在内的语言,并为不支持的语言提供自定义模型和分词器的选项。
- 自动化优化:AutoNLP 会自动处理模型选择、超参数调优以及训练多个候选模型以识别出表现最佳的模型。
使用 Prodigy 进行实时数据标注
Prodigy 由 Explosion 开发,是一款商业化的基于 Web 的标注工具,可实现实时数据标注。虽然它主要用于 NER 和文本分类等 NLP 任务,但也支持计算机视觉和自定义任务创建。在主动学习流水线中,Prodigy 作为人类迭代标注原始文本的界面,以创建 AutoNLP 所需的训练集。
案例研究:BBC 新闻分类与 NER
为了演示该流水线,Hugging Face 将这些工具应用于 Kaggle 的 BBC News Classification 数据集,该数据集包含分为五类的新闻文章:business、entertainment、politics、sport 和 tech。
多分类任务
使用 AutoNLP,在现有类别上训练了一个分类模型。该过程包括上传数据集并允许 AutoNLP 训练 15 个不同的模型。最终的最佳模型达到了 98.67% 的准确率。
通过主动学习进行命名实体识别 (NER)
由于 BBC 数据集缺乏实体标签,因此实施了主动学习过程以添加 NER 能力(标签:PERSON、ORG、PRODUCT、LOCATION):
- 初始标注:在 Prodigy 中标注了大约 20 个样本的小型集合。初始的 AutoNLP 模型显示出 86% 的准确率,但精确率和召回率均为 0,这表明模型尚未学习到模式。
- 迭代增长:随着标注数据集增长到 70 个样本,准确率上升到 92%,精确率为 0.52,召回率为 0.42。
- 性能突破:在约 150 个样本时,模型达到了 95.7% 的准确率、0.64 的精确率和 0.76 的召回率,在检测未见文本中的实体方面表现出显著提升。
- 最终优化:在标注约 250 个样本后,该过程达到了最佳结果的平台期,准确率约为 95.9%,精确率为 0.73,召回率为 0.79。
技术实现与工作流
由于 Prodigy 无法直接导出 AutoNLP 格式的数据,因此使用了一个基于 spacy 和 prodigy.components.db 的自定义 Python 脚本,将 Prodigy 的标注转换为 JSONL 文件。该文件随后被上传到 AutoNLP 的“Token Classification”任务下。
这种工作流将技术负担从模型工程转向了数据质量。通过使用 AutoNLP,开发者无需手动选择优化器、调度器,或进行手动预处理和后处理,从而使他们能够完全专注于标注数据的质量。
Sources
相关
- Dispatch
- Dispatch
- Dispatch
- Dispatch
- Dispatch