【发布时间】:2021-12-29 16:28:04
【问题描述】:
在 SparkNLP 的 PipelineModel 中,所有阶段都必须是 AnnotatorModel 类型。但是,如果其中一个注释器模型需要数据集中的某个列作为输入,而该输入列是 AnnotatorApproach 的输出,该怎么办?
例如,我有一个训练有素的 NER 模型(作为管道的最后阶段),它需要令牌和 POS 标签作为两个输入。 POS 标记器也需要令牌。但 Tokenizer 是 AnnotatorApproach,我无法将其添加到管道中。
这是 Tokenizer 的实例化方式(在 Java 中):
AnnotatorApproach<TokenizerModel> tokenizer = new Tokenizer();
这行得通:
Pipeline pipeline = new Pipeline().setStages( new PipelineStage[]{tokenizer} );
但这不起作用,因为 Tokenizer 不是 Transformer:
List<Transformer> list;
list.add(tokenizer);
PipelineModel pipelineModel = new PipelineModel("ID42", list);
【问题讨论】:
-
一种解决方法似乎是构造一个 Pipeline 而不是 PipelineModel,然后在此管道上调用
fit(data).transform(data)。这可行,但不知何故似乎违反直觉。也许我在这里遗漏了一些重要的概念点。 -
PS:另一个问题是,由于性能原因,我想使用
LightPipeline进行预测。但是,我无法从Pipeline构造LightPipeline,只能从PipelineModel构造。
标签: java apache-spark nlp johnsnowlabs-spark-nlp