【问题标题】:How to create a custom spaPcy pipeline component using the Thinc model如何使用 Thinc 模型创建自定义 spaPcy 管道组件
【发布时间】:2022-06-24 12:00:28
【问题描述】:

我想在 spaCy 中创建一个使用预训练的 Thinc 模型的自定义管道组件。我想修改来自 Thinc 的输出预测,然后将修改后的值传递回管道,即有效地修改 ner 管道组件。

我正在考虑通过自定义管道组件执行此操作,例如:

from spacy.language import Language

@Language.component(\"my_ner\")
def my_ner(doc):

    class_probabilities = thinc_do_something(data, model, num_samples)
    class_value = np.argmax(class_probabilities, axis=1)
    
    return doc

nlp = spacy.load(\"en_core_web_sm\", exclude=[\"ner\"])
nlp.add_pipe(\"my_ner\", after=\"parser\")  # Insert after the parser
print(nlp.pipe_names)  # [\'tagger\', \'parser\', \'my_ner\']
doc = nlp(\"This is a sentence.\")

我的目标是让管道按照原始 ner 组件运行,但使用我的自定义 ner 组件修改类概率。不幸的是,我从 spaCy 文档中无法理解:

  • 如何从管道内部访问预训练模型?
  • 如何访问管道内用于模型预测的数据?
  • 作为修改后的 ner 管道的一部分,我需要将模型预测值写回到哪里?
  • 有更好的方法吗?

    标签: nlp spacy spacy-3


    【解决方案1】:

    我以前没有听说过有人这样做,虽然有可能,但并不像你建议的那么简单。您拥有的示例组件适用于只是一个函数的简单无状态组件。为了修改可训练管道的工作方式,您必须通过子类化现有管道或其他方式来制作自己的管道。

    您应该查看现有管道以供参考,textcat 可能是较简单的管道之一。对于可训练管道,在管道中使用时,它们基本上使用predictset_annotations,如图in the TrainablePipe implementation

    与子类化相比,复制您想要使用的组件、修改一些位并给它一个新名称也可能更容易。

    【讨论】:

      猜你喜欢
      • 2013-07-31
      • 2022-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多