如何在 Transformers 库中截断 Bert 分词器

Tom*_*nič 2 python nlp huggingface-transformers

我正在使用 Scibert 预训练模型来获取各种文本的嵌入。代码如下:

from transformers import *

tokenizer = AutoTokenizer.from_pretrained('allenai/scibert_scivocab_uncased', model_max_length=512, truncation=True)
model = AutoModel.from_pretrained('allenai/scibert_scivocab_uncased')
Run Code Online (Sandbox Code Playgroud)

我已将最大长度和截断参数添加到分词器,但不幸的是,它们不会截断结果。如果我通过分词器运行更长的文本:

inputs = tokenizer("""long text""")
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

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

现在很明显,由于张量序列太长,我无法在模型中运行它。截断输入以适应最大序列长度 512 的最简单方法是什么?

cro*_*oik 6

truncation不是类构造函数(类引用)的参数,而是__call__方法的参数。因此,您应该使用:

tokenizer = AutoTokenizer.from_pretrained('allenai/scibert_scivocab_uncased', model_max_length=512)

len(tokenizer(text, truncation=True).input_ids)
Run Code Online (Sandbox Code Playgroud)

输出:

512
Run Code Online (Sandbox Code Playgroud)