我正在尝试使用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
答案 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)
答案 1 :(得分:1)
spaCy文档讨论了如何在此处更新预先存在的模型:https://spacy.io/docs/usage/training-ner
我自己没有做到这一点,所以不确定它是否容易做/关注,但无论如何它似乎是一个好的起点。
答案 2 :(得分:1)
我意识到这是一个很晚的补充,但是当我偶然发现这篇文章并偶然找到答案时,我遇到了同样的问题。基本上,只需将nlp值设置为训练模型所在的目录即可:
nlp = spacy.load('/model')