PyTorch Huggingface BERT-NLP для распознавания именованных объектов

Я уже давно использую реализацию Google BERT от PyTorch от HuggingFace для набора данных MADE 1.0. До последнего времени (11 февраля) я использовал библиотеку и получал F-Score 0,81 для своей задачи распознавания именованных объектов с помощью Fine Tuning модели. Но на этой неделе, когда я запустил точно такой же код, который был скомпилирован и запущен ранее, при выполнении этого оператора возникла ошибка:

input_ids = pad_sequences([tokenizer.convert_tokens_to_ids(txt) for txt in tokenized_texts], maxlen=MAX_LEN, dtype="long", truncating="post", padding="post")

ValueError: Длина последовательности индексов токена превышает указанную максимальную длину последовательности для этой модели BERT (632 > 512). Выполнение этой последовательности через BERT приведет к ошибкам индексации

Полный код доступен в этой записной книжке.

Чтобы обойти эту ошибку, я изменил приведенное выше утверждение на приведенное ниже, взяв первые 512 токенов любой последовательности, и внес необходимые изменения, чтобы добавить индекс [SEP] в конец усеченной / дополненной последовательности, как того требует BERT.

input_ids = pad_sequences([tokenizer.convert_tokens_to_ids(txt[:512]) for txt in tokenized_texts], maxlen=MAX_LEN, dtype="long", truncating="post", padding="post")

Результат не должен был измениться, потому что я рассматриваю только первые 512 токенов в последовательности, а затем урезаю их до 75 как мое (MAX_LEN=75), но мой F-Score упал до 0,40, а моя точность до 0,27, тогда как Recall остается то же самое (0,85). Я не могу предоставить доступ к набору данных, так как подписал предложение о конфиденциальности, но могу заверить, что вся предварительная обработка, как того требует BERT, была выполнена, и все расширенные токены, такие как (Johanson -> Johan ##son), были помечены знаком X и заменены. позже после прогноза, как сказано в документе BERT.

Кто-нибудь еще сталкивался с подобной проблемой или может уточнить, в чем может быть проблема или какие изменения люди PyTorch (Huggingface) недавно сделали для своей цели?

1 ответ

Я нашел решение, чтобы обойти это. Выполнение того же кода с pytorch-pretrained-bert==0.4.0 решает проблему, и производительность восстанавливается до нормальной. В обновлении BERT Tokenizer или BERTForTokenClassification есть что-то, что влияет на производительность модели. Надеюсь, что HuggingFace скоро это прояснит.:)

pytorch-pretrained-bert == 0,4,0, тест F1-оценка: 0,82

pytorch-pretrained-bert == 0.6.1, тест F1-оценка: 0.41

Благодарю.

Я думаю, тебе стоит использовать batch_encode_plus и вывод маски, а также кодирование.

См. Batch_encode_plus в https://huggingface.co/transformers/main_classes/tokenizer.html

Другие вопросы по тегам