You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用LangChain的Faiss与BGE模型时相似性分数偏低问题求助

问题:BGE-Large-ZH-V1.5嵌入模型与Faiss检索时,完全匹配文本的相似度分数未达1.0

我在使用LangChain的Faiss向量库搭配BAAI/bge-large-zh-v1.5嵌入模型时遇到异常:查询语句“无纸化发送失败?”已明确存在于向量库中,但调用similarity_search_with_score()方法返回的相似度分数仅为0.9069208,而非预期的1.0。

代码片段

model_name = "BAAI/bge-large-zh-v1.5"
model_kwargs = {'device': 'cuda'}
encode_kwargs = {'normalize_embeddings': True}  # set True to compute cosine similarity

model = HuggingFaceBgeEmbeddings(
    model_name=model_name,
    model_kwargs=model_kwargs,
    encode_kwargs=encode_kwargs,
    cache_folder="../model/",
)

db = FAISS.load_local('../dataset/bge_faiss_db', embeddings=model, index_name='index')

query = '无纸化发送失败?'
res = db.similarity_search_with_score(query, k=3)

运行结果

[(Document(page_content='无纸化发送失败?'), 0.9069208), (Document(page_content='凭证打包失败?'), 0.57983273), (Document(page_content='edi发送不了?'), 0.5719995)]

潜在原因分析

  • 浮点运算的微小误差:即使是完全相同的文本,模型在入库和查询时的前向传播过程中,GPU浮点计算(如FP16/FP32精度差异)可能产生极细微的向量偏差,经过归一化和余弦相似度计算后,分数会接近1但不等于1。Transformer架构的模型普遍存在这类数值级误差。
  • 文本隐形差异:检查入库文本与查询文本是否存在肉眼不可见的差异:
    • 全角/半角符号:比如入库用全角问号,查询用半角问号;
    • 不可见字符:文本中包含空格、换行符或控制字符;
    • 预处理不一致:入库时做了额外处理(如去标点、分词),但查询时未执行相同操作。
  • Faiss索引的精度损失:如果创建Faiss索引时使用了量化策略(如IVF_PQ),向量存储会被有损压缩,导致加载后的向量与原始嵌入存在偏差,影响相似度计算。可检查索引创建代码是否包含量化参数。
  • 编码参数不一致:确认入库和查询时的HuggingFaceBgeEmbeddings参数完全一致,尤其是normalize_embeddings是否都设为True,其他如batch_size等参数差异也可能影响嵌入结果。

内容的提问来源于stack exchange,提问作者Jaycee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 13:07:38