如何更新现有的 spacy 模型?

How to update an existing spacy model?

我正在为我的硕士论文开发命名实体识别功能。 我想利用“en_core_web_sm”语言包,训练识别产品的能力。

在训练模型之前,未经训练的模型 ("en_core_web_sm") 能够识别不同的实体,例如 'PERSON'、'ORG'、'GPE'、'DATE',... 在“验证语句”中。偶尔会识别产品,但通常标签不正确。 训练模型后,仅识别出 'PRODUCT' 类型的实体,但没有识别出其他实体,尽管应该识别出人员、组织等。

我感觉我的模型忘记了其他实体,训练后只“知道”产品实体。

这是我的训练代码:

#nlp = spacy.load("en_core_web_lg")
nlp = spacy.load("en_core_web_sm")
ner = nlp.get_pipe("ner")

optimizer = nlp.create_optimizer()
#other_pipes = [pipe for pipe in nlp.pipe_names if pipe != "ner"]

pipe_exceptions = ["ner", "trf_wordpiecer", "trf_tok2vec"]
other_pipes = [pipe for pipe in nlp.pipe_names if pipe not in pipe_exceptions]
losses = {}
with nlp.disable_pipes(*other_pipes): # only train NER
    for itn in range(100):
        print(itn)
        random.shuffle(TRAIN_DATA)
        losses = {}
        for text, annotations in TRAIN_DATA:
            doc = nlp.make_doc(text)
            example = Example.from_dict(doc, annotations)
            nlp.update([example], drop=0.35, sgd=optimizer, losses=losses)
            print(losses)

如何更新默认的“en_core_web_sm”模型以保持识别 PERSON、DATE、ORG 等的能力,同时调整经过训练的 PRODUCT 部分?

我运行确实陷入了灾难性的遗忘问题。我也通过提供其他实体标记的训练数据解决了这个问题。