如何在 spaCy 3.0 中使用 Hugging Face 变压器

How to use Hugging Face transfomers with spaCy 3.0

假设我想将 Hugging Face 中的 distilbert https://huggingface.co/distilbert-base-uncased 包含到 spaCy 3.0 管道中。我认为这是可能的,我找到了一些关于如何为 spaCy 2.0 转换此模型的代码,但它在 v3.0 中不起作用。我真正想要的是使用类似这样的东西加载这个模型

nlp = spacy.load('path_to_distilbert')

这是否可能,能否请您提供具体的步骤。

似乎唯一开箱即用的转换器是他们的 roberta-base model. In the docs 它提到能够连接数千个 Huggingface 模型,但没有提到如何将它们添加到 SpaCy 管道。

同时,如果您想使用 roberta 模型,您可以执行以下操作。

# install using spacy transformers
pip install spacy[transformers]
python -m spacy download en_core_web_trf
import spacy

nlp = spacy.load("en_core_web_trf")

您可以使用 spacy-transformers to this end. In spaCy v3, you can train custom pipelines using a config file,您可以在 components.transformer.model.name:

中使用您喜欢的任何 HF 模型来定义 transformer 组件
[components.transformer]
factory = "transformer"
max_batch_items = 4096

[components.transformer.model]
@architectures = "spacy-transformers.TransformerModel.v1"
name = "bert-base-cased"
tokenizer_config = {"use_fast": true}

[components.transformer.model.get_spans]
@span_getters = "spacy-transformers.doc_spans.v1"

[components.transformer.set_extra_annotations]
@annotation_setters = "spacy-transformers.null_annotation_setter.v1"

然后您可以在此预训练的 transformer 模型之上训练任何其他组件(NER、textcat 等),并且 transformer 权重也将进一步微调。

您可以在此处的文档中阅读更多相关信息:https://spacy.io/usage/embeddings-transformers#transformers-training