machine-learning - 使用 spaCy 进行额外命名实体识别所需的训练数据量是多少?
问题描述
我正在使用 spaCy 模块来查找输入文本的名称实体。我正在训练模型来预测医学术语。我目前可以访问 200 万份医疗记录,我编写了一个程序来对这些记录进行注释。
我将医学笔记与用于注释任务的约 9 万个术语的预定义列表进行交叉引用。以目前的批注速度,批注 10000 条笔记大约需要一个半小时。注释当前的工作方式,我最终得到了大约 90% 的注释没有注释(我目前正在努力获得更好的交叉引用术语列表),所以我采用大约 1000 个注释注释并训练模型在这些上。
我已经检查过,模型对它所看到的已知注释术语做出了响应(例如,该术语tachycardia
之前已经从注释中看到过,并且有时会在该术语出现在文本中时将其拾取)。
这个背景可能与我的特定问题不太相关,但我想我会为我目前的职位提供一点背景。
我想知道是否有人在 spaCy 中成功训练了一个新实体,是否可以让我深入了解他们在训练量方面的个人经验,这对于至少有一定程度的可靠实体识别是必要的。
谢谢!
解决方案
我从头开始训练希腊语的命名实体识别器,因为没有可用的数据,所以我会尝试为您总结一下我在我的案例中注意到的事情。
我用Prodigy注释工具训练了 NER 。根据我的个人经验,您的问题的答案取决于以下几点:
- 您希望识别器能够预测的标签数量。有意义的是,当标签(可能的输出)数量增加时,您的神经网络更难以区分它们,因此您需要的数据量也会增加。
- 标签有多么不同。例如,GPE 和 LOC 标记非常接近,并且经常在相同的上下文中使用,因此神经网络在开始时非常混淆它们。建议提供更多与彼此接近的标签相关的数据。
- 训练方式。这里几乎有两种可能性:
- 完全注释的句子。这意味着您告诉您的神经网络您的注释没有丢失的标签。
- 部分注释的句子。这意味着您告诉您的神经网络您的注释是正确的,但可能缺少一些标签。这使得网络更难依赖您的数据,因此需要提供更多数据。
- 超参数。微调网络以充分利用数据集非常重要。
- 数据集的质量。这意味着,如果数据集代表您将要求您的网络预测的事物,则需要较少的数据。但是,如果您正在构建一个更通用的神经网络(可以在不同的上下文中正确回答),则需要更多的数据。
对于希腊模型,我尝试在 6 个足够清晰的标签中进行预测,我提供了大约 2000个完整注释的句子,并花费了大量时间进行微调。
结果:70% F-measure,这对于任务的复杂性来说是相当不错的。
希望能帮助到你!
推荐阅读
- raspberry-pi - 3.5 Waveshare Raspberry Pi A - 向 LCD 写入命令
- python - Python:仅在其中一个中使用“maxsplit”,我需要多次拆分字符串
- javascript - 使用 :host 和不使用它有什么区别?
- python - 与 symbolab 相比,我的输出似乎是错误的
- android - android sdk 30 中的 CONTROL_REQUEST_CODE 是什么?
- vba - .RefreshWithRefreshAll 属性以 Application 或 object-defined 错误结尾
- tree - 有没有办法使用 DFS 来查找以 u 为根的子树中的节点数,使用堆栈数据结构而不是递归?
- python - 并行 Python 从一个站点获取请求
- css - shadow dom 中的 web 组件样式,取决于其父级
- github - 如何在不重命名文件的情况下重命名 GitHub wiki 上的页面/主题?