Когда я использую (с длинным test_text и коротким вопросом):
from transformers import BertTokenizer
import torch
from transformers import BertForQuestionAnswering
tokenizer = BertTokenizer.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')
model = BertForQuestionAnswering.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')
input_ids = tokenizer.encode(question, test_text)
print('Query has {:,} tokens.\n'.format(len(input_ids)))
sep_index = input_ids.index(tokenizer.sep_token_id)
num_seg_a = sep_index + 1
num_seg_b = len(input_ids) - num_seg_a
segment_ids = [0]*num_seg_a + [1]*num_seg_b
start_scores, end_scores = model(torch.tensor([input_ids]),
token_type_ids=torch.tensor([segment_ids]))
Я получаю ошибку при выводе
Длина последовательности индексов токенов превышает указанную максимальную длину последовательности для данной модели (3 ›512). Выполнение этой последовательности через модель приведет к ошибкам индексации.
Запрос содержит 1244 токена.
Как я могу разделить test_text на фрагменты максимальной длины, зная, что он не превышает 512 токенов? А затем задайте один и тот же вопрос для каждого фрагмента текста, выбирая лучший ответ из всех, а также дважды просматривая текст с разными точками фрагмента, на случай, если ответ будет обрезан во время фрагмента.
text = text[:512]
, если это помогает - person user12769533   schedule 22.06.2020max_length
здесь? - person user12769533   schedule 22.06.2020