计算Jina Embeddings时本地推理与API结果存在差异的原因?
问题
我使用Python的transformers库、sentence-transformers库本地生成Jina v2嵌入向量,同时调用Jina API生成同款模型的向量。本地通过AutoModel或SentenceTransformer生成的embeddings_1与embeddings_2结果完全匹配,但API返回的embeddings_3与前两者存在平均绝对值约2e-4的差异,CPU和GPU环境下均出现该问题,请问操作中哪里出错了?
代码示例
本地推理代码
# 使用transformers库 from transformers import AutoModel sentences = ['How is the weather today?'] model = AutoModel.from_pretrained('jinaai/jina-embeddings-v2-base-en', trust_remote_code=True) embeddings_1 = model.encode(sentences)
# 使用sentence-transformers库 from sentence_transformers import SentenceTransformer model = SentenceTransformer('jinaai/jina-embeddings-v2-base-en') embeddings_2 = model.encode(sentences)
API调用代码
import requests url = 'https://api.jina.ai/v1/embeddings' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer jina_123456...' # 需替换为有效API密钥 } data = { 'input': sentences, 'model': 'jina-embeddings-v2-base-en' } response = requests.post(url, headers=headers, json=data) embeddings_3 = eval(response.content)["data"][0]["embedding"]
差异原因与解决建议
- 浮点精度差异:API服务可能采用FP16精度推理,而本地默认使用FP32,不同精度的计算会产生微小数值偏差。
- 模型部署优化:API端的模型可能做了部署优化(如量化、算子融合),这些优化不影响语义表达,但会带来数值上的细微差别。
- 后处理逻辑差异:本地库的
encode方法与API的后处理步骤可能存在细微差异,比如归一化的精度处理环节。
对应的解决建议:
- 切换本地推理精度:尝试将本地模型切换为FP16推理,验证是否与API结果更接近。
- 统一后处理步骤:手动对本地生成的向量执行L2归一化,确保和API的输出处理逻辑一致。
- 调整比对方式:嵌入向量的核心价值是语义相似度,微小数值差异不影响下游任务(如检索、聚类)效果,优先比对余弦相似度而非绝对数值。
内容的提问来源于stack exchange,提问作者Davide Fiocco
相关产品推荐
相关产品推荐

