4

我正在尝试使用 spaCy 版本 3 为自定义标签训练命名实体识别 (NER) 模型。我浏览了他们网站上的所有文档,但我不明白创建管道模型的正确方法是什么。显然,如果我尝试使用en_core_web_trf,我无法添加自己的标签,因为最终的输出分数都是零。但它适用于en_core_web_sm.

但是,如果我尝试通过创建一个空白的英语模型然后手动添加变压器模型en_core_web_trf和 ner 模型来做一些临时方法en_core_web_sm,它可以工作。

我的问题是 - 除了这个临时方法之外,还有更好的方法来初始化我的模型和管道方法吗?我不关心 LOCATION 等预训练实体。我只想根据我在数据集中定义的自定义实体来训练我的模型(使用基于转换器的方法)。

def load_spacy():
    spacy.require_gpu()

    # 1) 'Makeshift' method
    source_nlp = spacy.load("en_core_web_sm")
    source_nlp_trf = spacy.load("en_core_web_trf")
    nlp = spacy.blank("en")
    nlp.add_pipe("transformer", source=source_nlp_trf)
    nlp.add_pipe("ner", source=source_nlp)
    
    # 2) trf only method
    nlp = spacy.load("en_core_web_trf")
    
    # Getting the pipeline component
    ner = nlp.get_pipe("ner")
    return ner, nlp

编辑:我使用的确切训练方法已在python 脚本中fit()定义类的函数中进行了描述NerModel

脚本中的(第load_spacy()16 行)使用小模型,但我正在试验变压器模型并使用load_spacy()我在本问题开头定义的定义。

PS:我一直在 Google Colab(又名笔记本)上进行实验,以便将 GPU 用于 Transformer,但源代码和方法几乎相同。

4

0 回答 0