如何在trust_remote_code=False下运行jinaai/jina-embeddings-v2-base-en生成嵌入
解决jina-embeddings-v2-base-en禁用trust_remote_code后的运行问题
问题根源
当trust_remote_code=False时,Hugging Face默认用内置的BertModel加载模型,但BertModel没有Jina模型特有的encode方法。你之前修改auto_map时路径错误,导致无法正确加载Jina的自定义模型类。
步骤1:补全本地模型文件
确保本地模型目录/Users/rahulkmu/Downloads/jinaai_bkp包含以下文件(直接从模型仓库下载对应文件):
configuration_jina_bert.pymodeling_jina_bert.pytokenizer_config.jsonvocab.txt- 模型权重文件(如
pytorch_model.bin)
步骤2:修正config.json的auto_map配置
将auto_map改为正确的类路径,对应本地的自定义代码文件:
"auto_map": { "AutoConfig": "configuration_jina_bert.JinaBertConfig", "AutoModelForMaskedLM": "modeling_jina_bert.JinaBertForMaskedLM", "AutoModel": "modeling_jina_bert.JinaBertModel", "AutoModelForSequenceClassification": "modeling_jina_bert.JinaBertForSequenceClassification" }
步骤3:修正代码并运行
先修正原代码中的拼写错误(from_pretrained_singley是笔误,应为from_pretrained),然后按以下方式运行:
from transformers import AutoModel, AutoTokenizer import torch cpu_device = torch.device('cpu') # 加载模型和tokenizer,禁用trust_remote_code model = AutoModel.from_pretrained('/Users/rahulkmu/Downloads/jinaai_bkp', trust_remote_code=False).to(cpu_device) tokenizer = AutoTokenizer.from_pretrained('/Users/rahulkmu/Downloads/jinaai_bkp') # 手动实现嵌入生成(避免依赖自定义encode方法) def generate_embedding(text, model, tokenizer, device): inputs = tokenizer(text, return_tensors='pt', padding=True, truncation=True).to(device) with torch.no_grad(): outputs = model(**inputs) # 取<[BOS_never_used_51bce0c785ca2f68081bfa7d91973934]>token的隐藏状态作为嵌入 embeddings = outputs.last_hidden_state[:, 0, :] # 归一化嵌入 embeddings = torch.nn.functional.normalize(embeddings, p=2, dim=1) return embeddings corpus_embeddings = generate_embedding("test", model, tokenizer, cpu_device) print(corpus_embeddings.tolist())
说明
- 手动实现嵌入生成是为了避免依赖模型的自定义
encode方法,确保在trust_remote_code=False时稳定运行。 - 如果修正
auto_map后模型的encode方法可以正常调用,也可以直接使用原代码中的model.encode方式。
内容的提问来源于stack exchange,提问作者avy
相关产品推荐
相关产品推荐

