Sentence Transformers中出现Key Error:111该如何解决?
Sentence Transformers编码遇Key Error:111的排查方案
我正在开展基于DataFrame的语义文本提取商品匹配项目,此前多次使用Sentence Transformers进行文本编码,但目前遇到Key Error:111问题,尝试多种方法仍无法解决。相关代码如下:
a = model.encode(H['Text_HE'], convert_to_tensor=True) b = model.encode(DN['Text_DNE'], convert_to_tensor=True) c = model.encode(TH['Text_TE'], convert_to_tensor=True) d = model.encode(TH['Text_TE'], convert_to_tensor=True)
Key Error:111本质是tokenizer编码时找不到对应ID的词汇,结合你用DataFrame列作为输入的场景,给你几个可行的排查和解决步骤:
- 检查DataFrame文本列有效性
确认H['Text_HE']、DN['Text_DNE']、TH['Text_TE']这些列里没有异常数据:空值、非文本类型(比如数字、None)、乱码字符。可以用df['列名'].isna().sum()统计空值数量,或者抽几行内容手动检查。 - 确保tokenizer与模型配套
有时候加载模型时tokenizer没正确匹配,导致词汇表不对应。可以打印tokenizer词汇表大小验证:
如果发现异常,重新加载模型,或者手动指定对应tokenizer。from sentence_transformers import SentenceTransformer model = SentenceTransformer('你的模型名称') print("Tokenizer词汇表大小:", len(model.tokenizer.vocab)) - 预处理文本列
对文本列做清洗,过滤或替换异常内容:# 填充空值为空白字符串 H['Text_HE'] = H['Text_HE'].fillna('') # 强制转换为字符串类型 H['Text_HE'] = H['Text_HE'].astype(str) - 单条文本测试定位问题
先拿DataFrame里的单条文本做编码测试,看是单条异常文本导致,还是批量处理的问题:
如果单条没问题,再逐步扩大测试范围,找到出错的那条文本单独处理。test_text = H['Text_HE'].iloc[0] print(model.encode(test_text, convert_to_tensor=True)) - 调整Sentence Transformers版本
版本兼容性也可能引发这类错误,试试升级到最新稳定版或者回退到常用版本:pip install --upgrade sentence-transformers # 或者指定稳定版本 pip install sentence-transformers==2.2.2
内容的提问来源于stack exchange,提问作者Simba Mgp
相关产品推荐
相关产品推荐

