假设我想把distilbert https://huggingface.co/distilbert-base-uncased从拥抱脸引入到spaCy 3.0管道中。我认为这是可能的,我找到了一些关于如何将此模型转换为spaCy 2.0的代码,但它在v3.0中不起作用。我真正想要的是使用下面这样的方式加载这个模型
nlp = spacy.load('path_to_distilbert')有没有可能,你能提供具体的步骤吗?
发布于 2021-09-23 11:31:34
为此,您可以使用spacy-transformers。在spaCy v3中,您可以使用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"然后,您可以训练任何其他组件(NER、textcat等)在这个预先训练的变压器模型之上,变压器权重也将进一步微调。
你可以在这里的文档中阅读更多信息:https://spacy.io/usage/embeddings-transformers#transformers-training
发布于 2021-09-22 04:19:48
似乎唯一可以开箱即用的转换器是他们的roberta-base模型。在docs中,它提到能够连接数以千计的Huggingface模型,但没有提到如何将它们添加到SpaCy管道中。
同时,如果您想使用roberta模型,您可以执行以下操作。
# install using spacy transformers
pip install spacy[transformers]
python -m spacy download en_core_web_trfimport spacy
nlp = spacy.load("en_core_web_trf")https://stackoverflow.com/questions/69223520
复制相似问题