使用 encode_plus 方法时的标记索引序列长度错误

Posted

技术标签:

【中文标题】使用 encode_plus 方法时的标记索引序列长度错误【英文标题】:Token indices sequence length error when using encode_plus method 【发布时间】:2020-08-02 22:38:08 【问题描述】:

我在尝试使用 Transformers 库中提供的 encode_plus 方法为 BERT 编码问答对时遇到一个奇怪的错误。

我正在使用来自this Kaggle competition 的数据。给定问题标题、问题正文和答案,模型必须预测 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 中的几行都会出现这种情况。我在这里做错了吗?

【问题讨论】:

您使用的是哪个版本的transformers?另外,您能否在问题中而不是在标题中发布完整的错误消息? 我在 Google Colab 中使用最新的公开版本 (2.8.0)。好的,会更新的。 【参考方案1】:

“bert-base-uncased”模型未经过预训练以处理 [CLS] + Question + [SEP] + Context + [SEP] 的长文本。来自Huggingface models 的任何其他专门用于小队问答数据集的模型都可以处理长序列。

例如,如果我使用 ALBERT 模型,我会选择“ktrapeznikov/albert-xlarge-v2-squad-v2”模型。

【讨论】:

以上是关于使用 encode_plus 方法时的标记索引序列长度错误的主要内容,如果未能解决你的问题,请参考以下文章

tokenizer.tokenize(), tokenizer.encode() , tokenizer.encode_plus() 方法介绍及其区别

AttributeError:“NoneType”对象没有属性“encode_plus”

Pandas - 查找和索引与行序列模式匹配的行

在使用WORD时,需要制作一个关键词和页码的索引页面。请问如何根据关键词速查出其所在的页码?

解决 N 个皇后时的数组索引超出范围异常

python 序列常见使用方法