如何根据标记的长度对字符串进行切片

6 python tokenize python-3.x bert-language-model huggingface-transformers

当我使用时(带有长 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]))
Run Code Online (Sandbox Code Playgroud)

我收到输出错误

令牌索引序列长度长于该模型指定的最大序列长度 (3 > 512)。通过模型运行此序列将导致索引错误

查询有 1,244 个标记。

如何将 test_text 分成最大长度的块,并且知道它不会超过 512 个标记?然后对每个文本块提出相同的问题,从所有文本中取出最佳答案,并使用不同的切片点对文本进行两次检查,以防答案在切片期间被剪切。