Spacy - 使用具有两个不同数据集的两个可训练组件

问题描述

我想知道是否可以使用两个不同的数据集在 Spacy 中训练两个可训练的组件? 事实上,我想使用 NER 和文本分类器,但由于这两个组件的训练数据集应该有不同的注释,所以我不知道如何同时训练这两个组件......

我是否应该在单独的管道中训练每个任务并在最后组装两个管道? 或者我应该训练 NER,打包这个管道,然后使用这个包作为输入来训练文本分类器?

非常感谢您的帮助

解决方法

如果数据集不同,您将无法同时训练这些数据。

如果您使用 spaCy v3,将两个训练步骤合并为一个最终管道应该相对简单。例如,首先创建一个训练 NER 的配置,并将其存储到磁盘。然后,创建一个新配置,在其中source 来自先前训练的管道的 NER,然后将此 NER 组件定义为 frozen

[nlp]
pipeline = ["ner","textcat"]
...

[training]
frozen_components = ["ner"]
...

[components.ner]
source = "your_trained_ner_location"
component = "ner"

[components.textcat]
factory = "textcat"
...

现在在您的 textcat 上进行训练。

仅供参考 - 这种多步骤的工作流程可以通过 spacy projects

轻松设置

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...