Рассматривая пример кода для обучения NER с помощью SpaCy, я вижу, что GoldParse иногда используется, а иногда нет.
TRAINING_DATA = [
("How to preorder the iPhone X", {'entities': [(20, 28, 'GADGET')]})
#Lots of other things
]
(Затем обычные вещи, добавление меток в канал NER, отключение других каналов и т. Д.)
Тогда я вижу два подхода:
for iteration in range(10):
random.shuffle(TRAINING_DATA)
losses = {}
for text, annotations in TRAINING_DATA:
doc = nlp.make_doc(text)
entity_offsets = annotations["entities"]
gold = GoldParse(doc, entities=entity_offsets)
nlp.update([doc], [gold], drop=0.5, sgd=optimizer, losses=losses)
print('Losses with gold', losses)
ИЛИ
for iteration in range(10):
random.shuffle(TRAINING_DATA)
losses = {}
batches = minibatch(TRAINING_DATA, size=compounding(4.0, 32.0, 1.001))
for batch in batches:
texts, annotations = zip(*batch)
nlp.update(texts, annotations, drop=0.5, sgd=optimizer, losses=losses)
print('Losses without gold', losses)
Какую цель (если есть) выполняет GoldParse в этом примере?Результаты потерь немного отличаются, но я не чувствую, что действительно понимаю, в чем разница.