Prodigy 食谱
这个仓库包含了我们脚本化的注释工具 Prodigy 的一系列食谱,用于文本、图像和其他数据。要使用这个仓库,您需要 Prodigy 的许可证——详情请参阅此页面。有关问题和错误报告,请使用 Prodigy 支持论坛。如果您发现了错误或漏洞,欢迎提交 pull 请求。
✨ 重要提示: 本仓库中的食谱与 Prodigy 自带的食谱不完全相同。它们被编辑以包含注释和更多信息,有些食谱被简化以便更容易理解并用作自定义食谱的基础。
📋 用法
一旦安装了 Prodigy,您应该能够从终端直接或通过 python -m
运行 prodigy
命令:
python -m prodigy
prodigy
命令会列出内置的食谱。要使用自定义食谱脚本,只需使用 -F
参数传递文件路径:
python -m prodigy ner.teach your_dataset en_core_web_sm ./data.jsonl --label PERSON -F prodigy-recipes/ner/ner_teach.py
您还可以使用 --help
标志查看食谱可用参数的概述,例如 prodigy ner.teach -F ner_teach_.py --help
。
一些实验
您可以编辑食谱脚本中的代码来定制 Prodigy 的行为。
- 尝试将
prefer_uncertain()
替换为prefer_high_scores()
。 - 尝试编写一个自定义排序函数。它只需要是一个生成器,给定
(score, example)
元组的序列,生成一系列example
字典。 - 尝试添加一个过滤器,从流中删除一些问题。例如,尝试编写一个过滤器,只询问实体长度为两个词的问题。
- 尝试自定义
update()
回调,以包含额外的日志记录或额外功能。
🍳 食谱
命名实体识别
Recipe | 描述 |
---|---|
ner.teach | 利用模型在循环中,收集命名实体识别模型的最佳训练数据。基于你的注释,Prodigy 会决定接下来要问哪些问题。 |
ner.match | 建议符合给定模式文件的短语,并标记它们是否是你感兴趣的实体。模式文件可以包含用于 spaCy 的 Matcher 的精确字符串或标记模式。 |
ner.manual | 通过令牌手动标记跨度。只需要一个分词器,不需要实体识别器,也不进行任何主动学习。可选地,根据模式预先突出显示跨度。 |
ner.fuzzy_manual | 类似于 ner.manual ,但使用来自 spaczz 库的 FuzzyMatcher 来预先突出显示候选对象。 |
ner.manual.bert | 使用 BERT 词片分词器进行高效的手动 NER 注释,以用于变压器模型。 |
ner.correct | 通过手动纠正模型的预测,创建金标准数据。这个食谱以前称为 ner.make_gold 。 |
ner.silver-to-gold | 使用二进制接受/拒绝注释合并现有的“银”数据集,在注释中定义的约束下找到最佳分析,然后手动编辑以创建完美且完整的“金”数据集。 |
ner.eval_ab | 通过比较两个 NER 模型的预测并从流中构建评估集来评估两个 NER 模型。 |
ner_fuzzy_manual | 通过令牌手动标记跨度,并使用 spaczz fuzzy 匹配器来预先突出显示候选对象。 |
文字分类
Recipe | 描述 |
---|---|
textcat.manual | 手动注释适用于文本的类别。支持具有单个和多个标签的注释任务。多个标签可以选择性地标记为互斥。 |
textcat.correct | 手动纠正文本分类模型的预测。超过接受阈值的预测将自动预选(默认 0.5)。Prodigy 将根据组件配置推断类别是否应该互斥。 |
textcat.teach | 利用模型在循环中,为文本分类模型收集最佳训练数据。基于你的注释,Prodigy 会决定接下来要问哪些问题。 |
textcat.custom-model | 使用自定义模型进行主动学习驱动的文本分类。为了演示它的工作原理,这个演示食谱使用一个简单的虚拟模型来“预测”随机分数。但你可以用任何你选择的模型替换它,例如使用 PyTorch、TensorFlow 或 scikit-learn 实现的文本分类模型。 |
术语
Recipe | 描述 |
---|---|
terms.teach | 使用词向量和种子术语引导术语列表。Prodigy 将根据词向量建议相似术语,并相应更新目标向量。 |
图像
Recipe | 描述 |
---|---|
image.manual | 通过在图像上绘制矩形边界框或多边形形状来手动标注图像。 |
image-caption | 用标题注释图像,使用 PyTorch 实现的图像标题模型预填充标题并执行错误分析。 |
image.frozenmodel | 使用 Tensorflow's 目标检测 API 在循环中进行手动标注。 |
image.servingmodel | 使用 Tensorflow's 目标检测 API 在循环中进行手动标注。这使用了 Tensorflow Serving。 |
image.trainmodel | 使用 Tensorflow's 目标检测 API 在循环中进行手动标注和训练。 |
其他
Recipe | 描述 |
---|---|
mark | 单击浏览预先准备好的示例,没有模型参与。 |
choice | 使用多项选择选项注释数据。已注释的示例将有一个额外的属性 "accept": [] ,映射到所选选项的 ID。 |
question_answering | 使用自定义 HTML 界面注释问题/答案对。 |
社区食谱
Recipe | 作者 | 描述 |
---|---|---|
phrases.teach | @kabirkhan | 现已成为 sense2vec 的一部分。 |
phrases.to-patterns | @kabirkhan | 现已成为 sense2vec 的一部分。 |
records.link | @kabirkhan | 使用 dedupe 库在多个数据集中链接记录。 |
教程食谱
这些食谱曾出现在我们的教程中。
Recipe | 描述 |
---|---|
span-and-textcat | 同时进行 spancat 和 textcat 注释。非常适合聊天机器人! |
terms.from-ner | 通过以前的 NER 注释生成术语。 |
audio-with-transcript | 同时处理手动音频标注和转录。 |
progress | 用于跟踪标注速度的 update 回调演示。 |
📚 示例数据集和模式
为便于上手,我们还提供了一些示例数据集
,包括原始数据以及使用 Prodigy 创建的带注释的数据。有关基于令牌的匹配模式的示例,用于诸如 ner.teach
或 ner.match
之类的食谱,请参阅示例模式
目录。