Когда я должен использовать GoldParse при обучении NER? - PullRequest
0 голосов
/ 20 сентября 2019

Рассматривая пример кода для обучения 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 в этом примере?Результаты потерь немного отличаются, но я не чувствую, что действительно понимаю, в чем разница.

1 Ответ

0 голосов
/ 21 сентября 2019

Под ними они должны быть одинаковыми.Если вы закомментируете случайное перемешивание, я ожидаю, что потери будут одинаковыми.

...