Путаница с обработкой меток в примере run_tf_ner - PullRequest
0 голосов
/ 18 марта 2020

Это, кажется, простой ответ, но глубоко смущает меня.

В строке 510 run_rf_ner пример

labels = get_labels(args["labels"])
num_labels = len(labels) + 1
pad_token_label_id = 0
config_class, model_class, tokenizer_class = MODEL_CLASSES[args["model_type"]]
config = config_class.from_pretrained(
     args["config_name"] if args["config_name"] else args["model_name_or_path"],
     num_labels=num_labels,
     cache_dir=args["cache_dir"] if args["cache_dir"] else None,
)

Зачем нам нужно num_labels = len(labels) + 1? Я не понимаю +1 здесь. Более поздняя операция tf.reshape также предполагает, что размер выходных логитов равен len(labels)+1.

Похоже, что это сделать дополнительный индекс для pad_token_label_id. Но при построении набора обучающих данных в convert_examples_to_features() я не вижу кода, который бы сдвигал индексы меток вправо. Что еще более запутанно, так это то, что +1 logi c не входит в run_ner, версию этого примера, написанную на pytorch.

Выполнение оценки на обученной модели в одном предложении также, кажется, показывает, что индексы неверны (сдвинуты на 1 позицию)

Может кто-нибудь объяснить это? Спасибо!

...