Ошибка длины последовательности индексов токена при использовании метода encode_plus - PullRequest
0 голосов
/ 20 апреля 2020

Я получил странную ошибку при попытке кодировать пары вопрос-ответ для BERT с использованием метода encode_plus, предоставленного в библиотеке Transformers.

Я использую данные этого конкурса Kaggle, Учитывая название вопроса, тело вопроса и ответ, модель должна предсказать 30 значений (проблема регрессии). Моя цель - получить следующую кодировку в качестве входных данных для BERT:

[CLS] question_title question_body [SEP] ответ [SEP]

Однако, когда я пытаюсь использовать

tokenizer = transformers.BertTokenizer.from_pretrained("bert-base-uncased")

и кодировать только второй вход из train.csv следующим образом:

inputs = tokenizer.encode_plus(
            df_train["question_title"].values[1] + " " + df_train["question_body"].values[1], # first sequence to be encoded
            df_train["answer"].values[1], # second sequence to be encoded
            add_special_tokens=True, # [CLS] and 2x [SEP] 
            max_len = 512,
            pad_to_max_length=True
            )

Я получаю следующую ошибку:

Token indices sequence length is longer than the specified maximum sequence length for this model (46 > 512). Running this sequence through the model will result in indexing errors

Это говорит о том, что длина индексов токена равна длиннее указанной максимальной длины последовательности, но это не так (как видите, 46 не> 512).

Это происходит для нескольких строк в df_train. Я что-то здесь не так делаю?

1 Ответ

0 голосов
/ 30 апреля 2020

Модель 'bert-base-uncased' не прошла предварительную подготовку для обработки длинных текстов [CLS] + Question + [SEP] + Context + [SEP]. Любая другая модель из моделей Huggingface , специально предназначенная для наборов вопросов-ответов отряда, будет обрабатывать длинную последовательность.

Например, если я использую модель ALBERT, я бы выбрал go для модели 'ktrapeznikov / albert-xlarge-v2-squad-v2'.

...