1

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

nlp = spacy.load('path_to_distilbert')

是否有可能,请您提供执行此操作的确切步骤。

4

2 回答 2

2

您可以spacy-transformers为此使用。在 spaCy v3 中,您可以使用配置文件transformer训练自定义管道,您可以在其中使用您喜欢的任何 HF 模型定义组件components.transformer.model.name

[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"

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

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

于 2021-09-23T11:31:33.640 回答
1

似乎唯一可以开箱即用的变压器是他们的roberta-base模型。在文档中,它提到能够连接数千个 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")
于 2021-09-22T04:19:48.190 回答