Hugging Face分词器padding机制及BERT分词器补全到指定max_length的方法
问题原因
padding=True的默认规则是仅将序列填充到当前批次内的最长序列长度,单样本输入时就会直接填充到样本本身的长度,不会触发到max_length的补全逻辑。要强制填充到你指定的max_length数值,需要将padding参数设置为字符串'max_length'。
修正后的代码
tokenizer = BertTokenizer.from_pretrained(MODEL_TYPE, do_lower_case=True) sent = "I hate this. Not that." _tokenized = tokenizer( sent, padding='max_length', # 替换原有padding=True max_length=20, truncation=True ) # 原代码存在变量名笔误,_tknzr未定义,替换为实例化的tokenizer print(tokenizer.decode(_tokenized['input_ids'])) print(len(_tokenized['input_ids']))
输出结果
[CLS] i hate this. not that. [SEP] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] 20
padding参数可选规则说明
padding=True/padding='longest':仅填充到当前批次的最长序列长度,单样本输入时无额外填充padding='max_length':强制填充到max_length参数指定的长度,若序列本身长度超过max_length会按照truncation配置截断padding=False/padding='do_not_pad':不执行任何填充操作
内容的提问来源于stack exchange,提问作者MsA
相关产品推荐
相关产品推荐

