Spacy NER - 训练仅具有实体集合的模型



我有一个包含数千种产品的数据库,我们正在系统上开发一个NLP模块,该模块应该能够读取文本并从中识别所有产品。

问题是:我们有许多实体要标记,但我们没有足够的样本来训练模型。所以我们所做的只是生成一些随机文本并添加这些实体,如下所示:

Training_data = [
("I'm looking for the P1.n", {'entities': [(20, 22, 'Product')]}),
('I bought P2 last week.n', {'entities': [(9, 11, 'Product')]}),
('P1 is better than P2.', {'entities': [(0, 2, 'Product'), (18, 20, 'Product')]})
]

我正在努力找到一种方法来传递包含我们所有产品的集合来执行空间训练。这可能吗?有什么更好的解决方案或方法吗?

spaCy的制造商表示,您需要5,000个示例才能看到某种结果。 spaCy 2 略低 500 - 1000,但您的里程会有所不同。

若要向实体识别器提供训练示例,首先需要创建 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)

最新更新