使用add_tokens遇ValueError:数组真值判断歧义的解决问询
BERT分词器add_tokens批量添加报错的解决办法
报错根源
你遇到的ValueError不是因为批量传列表的方式错了,大概率是你的token列表里混进了numpy数组元素,而不是纯字符串。分词器的add_tokens内部会做真值校验,numpy数组没法直接用if判断真假,必须用any()或all(),但源码里没处理这种情况,所以触发了歧义报错。
修复方法
- 清洗token列表:把所有非字符串的元素转成纯字符串,比如从numpy数组转成字符串列表:
# 错误示例:包含numpy数组的token列表 import numpy as np bad_tokens = np.array(["[PRODUCT]", "[BRAND]"]) # 正确处理:转成纯字符串列表 clean_tokens = [str(tok) for tok in bad_tokens] - 正常调用add_tokens:用处理后的纯字符串列表传入即可:
from transformers import BertTokenizer tokenizer = BertTokenizer.from_pretrained("bert-base-uncased") added_count = tokenizer.add_tokens(clean_tokens) print(f"成功添加{added_count}个新token")
绕过真值检查的临时方案
如果必须从numpy等非字符串源取token,核心就是不让分词器直接接触numpy类型元素,提前转成字符串就行。要是不想批量处理,也可以逐个添加(适合少量token):
for tok in clean_tokens: tokenizer.add_tokens(tok)
内容的提问来源于stack exchange,提问作者Manny
相关产品推荐
相关产品推荐

