如何使用Spacy训练NER并将其集成到原始模型中

时间:2017-04-13 09:25:00

标签: model named-entity-recognition spacy

我正在尝试使用Spacy使用我自己的数据训练NER。我的问题是如何将我训练有素的NER整合到原始模型中?这样可以方便地连续训练并用于我的应用。我没有找到任何样品。

我在下面找到了一些类似的例子来训练NER,但似乎所有这些都没有保存训练好的模型并将其整合回Spacy。有些是在内存中保存,有些是将NER模型保存到附加文件夹中...那么如何以适当的方式来满足我的需求呢?谢谢 !!!

我正在使用spacy 1.7.3

https://github.com/explosion/spaCy/blob/master/examples/training/train_ner.py https://github.com/explosion/spacy-dev-resources/blob/master/spacy-annotator/displacy/parse.py

3 个答案:

答案 0 :(得分:2)

要向实体识别器提供培训示例,您首先需要创建GoldParse类的实例。您可以以对峙格式或令牌标记指定注释。

import spacy
import random
from spacy.gold import GoldParse
from spacy.language import EntityRecognizer

train_data = [
    ('Who is Chaka Khan?', [(7, 17, 'PERSON')]),
    ('I like London and Berlin.', [(7, 13, 'LOC'), (18, 24, 'LOC')])
]

nlp = spacy.load('en', entity=False, parser=False)
ner = EntityRecognizer(nlp.vocab, entity_types=['PERSON', 'LOC'])

for itn in range(5):
    random.shuffle(train_data)
    for raw_text, entity_offsets in train_data:
        doc = nlp.make_doc(raw_text)
        gold = GoldParse(doc, entities=entity_offsets)

        nlp.tagger(doc)
        ner.update(doc, gold)
ner.model.end_training()

为简化此操作,您可以尝试此代码

doc = Doc(nlp.vocab, [u'rats', u'make', u'good', u'pets'])
gold = GoldParse(doc, [u'U-ANIMAL', u'O', u'O', u'O'])
ner = EntityRecognizer(nlp.vocab, entity_types=['ANIMAL'])
ner.update(doc, gold)

https://spacy.io/docs/usage/training-ner

答案 1 :(得分:1)

spaCy文档讨论了如何在此处更新预先存在的模型:https://spacy.io/docs/usage/training-ner

我自己没有做到这一点,所以不确定它是否容易做/关注,但无论如何它似乎是一个好的起点。

答案 2 :(得分:1)

我意识到这是一个很晚的补充,但是当我偶然发现这篇文章并偶然找到答案时,我遇到了同样的问题。基本上,只需将nlp值设置为训练模型所在的目录即可:

nlp = spacy.load('/model')