Это, кажется, простой ответ, но глубоко смущает меня.
В строке 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 позицию)
Может кто-нибудь объяснить это? Спасибо!