1

我正在尝试训练 Spacy3.0 识别新的命名实体。我完全按照本文中的说明进行操作:https ://towardsdatascience.com/using-spacy-3-0-to-build-a-custom-ner-model-c9256bea098

for text, annot in tqdm(TRAIN_DATA): # data in previous format
    doc = nlp.make_doc(text) # create doc object from text
    ents = []
    
    for i in annot["entities"]:
        start = i[0]
        end = i[1]
        label = i[2]
 
        span = doc.char_span(start, end, label=label, alignment_mode="contract")
        ents.append(span)
    doc.ents = ents
    db.add(doc)
db.to_disk(r"train.spacy") # save the docbin object

一切正常,直到我在“ents”中添加了几个ner。

例如:-爸爸买苹果-工作正常。但是-爸爸买苹果和三星-不起作用。

我收到一个错误:“中止并保存最终的最佳模型。遇到异常:ValueError()”文件“spacy\pipeline_parser_internals\ner.pyx”,第 310 行,在 spacy.pipeline._parser_internals.ner.BiluoPushDown.set_costs ValueError

也许应该在 config.cfg 中更改某些内容,但我找不到什么。

4

1 回答 1

0

你提到config.cfg,但我没有看到它在你的代码中使用。你是如何定义你的nlp模型的TRAIN_DATA

从 spaCy v3 开始,建议使用 CLI 命令spacy train而不是实现自定义训练循环,这可能更脆弱。这里有更详细的迁移指南:https ://spacy.io/usage/v3#migrating

查看您收到的错误,似乎模型可能遇到了未在训练数据集中定义的命名实体类型?

不过我不确定,因为我无法确切了解正在发生的事情,而且我不知道您所说的“直到我在 'ents' 中添加几个 ner”是什么意思。你能提供一个最小的可重现代码片段吗?这将有助于帮助您调试它。

于 2021-04-15T16:10:12.827 回答