使用sentence-transformers遇KeyError:__version__错误,求解决办法及替代方案
解决KeyError: version及缺失rust_model.ot文件的问题
核心修复步骤
- 重新完整下载模型:缺失
rust_model.ot大概率是下载中断或文件损坏导致的。手动删除本地模型目录(默认路径为~/.cache/huggingface/hub/models--sentence-transformers--all-MiniLM-L6-v2),重新运行加载代码让sentence-transformers自动完整拉取所有文件;若手动下载,需确保包含rust_model.ot、config.json、model.safetensors等全部关键文件。 - 验证config文件完整性:检查模型目录下的
config.json是否存在"version"字段。该字段缺失是触发KeyError的直接原因,若config文件损坏,需重新下载官方完整的config.json文件。 - 锁定兼容版本组合:即使已调整版本一致,也要确保使用经过验证的兼容组合,推荐:
sentence-transformers==2.2.2transformers==4.26.1torch==1.13.1
执行命令pip install sentence-transformers==2.2.2 transformers==4.26.1 torch==1.13.1重新安装,规避版本不匹配引发的隐性问题。
替代方案
- 换用同系列模型:若问题持续,可尝试
all-MiniLM-L12-v2或all-MiniLM-L6-v1,这类模型结构相近,主题建模效果差异小,且文件完整性问题出现概率更低。 - 手动实现编码逻辑:跳过sentence-transformers封装,直接用transformers加载模型组件自行实现句子编码:
这种方式绕开sentence-transformers的版本依赖限制,可快速验证模型可用性。from transformers import AutoTokenizer, AutoModel import torch tokenizer = AutoTokenizer.from_pretrained('sentence-transformers/all-MiniLM-L6-v2') model = AutoModel.from_pretrained('sentence-transformers/all-MiniLM-L6-v2') def encode_texts(texts): encoded_input = tokenizer(texts, padding=True, truncation=True, return_tensors='pt') with torch.no_grad(): model_output = model(**encoded_input) # 取<[BOS_never_used_51bce0c785ca2f68081bfa7d91973934]>token均值作为句子嵌入向量 sentence_embeddings = torch.mean(model_output.last_hidden_state, dim=1) return sentence_embeddings
内容的提问来源于stack exchange,提问作者Xenon
相关产品推荐
相关产品推荐

