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

SpaCy .similarity返回异常高得分,与ChatGPT结果不符原因排查

SpaCy短语相似度得分异常差异的原因分析

你遇到的问题是相同版本的SpaCy(v3.1.2)和en_core_web_md模型(v3.1.0),本地运行得到的相似度得分(0.69)远高于ChatGPT运行的结果(0.30),核心原因可能集中在以下几点:

1. 停用词处理逻辑不一致

en_core_web_md的Doc向量默认是对非停用词的词向量取平均得到的。如果你的环境中停用词列表被修改,或者部分常见停用词(比如"I", "it", "at")未被标记为停用词,会导致Doc向量包含这些无意义词汇的向量,最终拉高相似度得分。

验证方法:运行以下代码检查两个Doc中每个token的停用词标记:

import spacy
nlp = spacy.load("en_core_web_md")

doc1 = nlp("Can I buy it at Walmart?")
doc2 = nlp("I like turtles")

print("Doc1 tokens and stop status:")
for token in doc1:
    print(f"{token.text}: {token.is_stop}")

print("\nDoc2 tokens and stop status:")
for token in doc2:
    print(f"{token.text}: {token.is_stop}")

如果输出中"I"、"it"等词的is_stop为False,说明你的停用词配置异常,需要重置模型的停用词列表。

2. 模型文件损坏或加载异常

如果下载的en_core_web_md模型文件不完整、损坏,或者加载时出现异常,会导致词向量读取错误,进而影响相似度计算结果。

解决方法:重新下载并安装模型:

python -m spacy download en_core_web_md

下载完成后重新运行原测试代码,观察得分是否恢复正常。

3. 底层依赖库版本差异

虽然SpaCy和模型版本一致,但numpy、scipy等底层数值计算库的版本差异,可能导致向量计算过程中出现异常(尤其是极端情况下的数值偏差)。这种情况概率较低,但可以通过检查依赖版本排查:

运行以下命令查看依赖库版本:

pip list | grep -E "numpy|scipy|spacy"

对比ChatGPT环境中的对应版本,若差异较大,可尝试安装相同版本的依赖库。

4. 向量归一化状态异常

SpaCy的similarity()方法基于余弦相似度计算,而余弦相似度的结果依赖于向量是否被正确归一化。如果你的环境中Doc向量未被自动归一化,会导致相似度得分偏高。

验证方法:打印两个Doc的向量范数(vector_norm),正常情况下归一化后的向量范数应接近1.0:

print(f"Doc1 vector norm: {doc1.vector_norm}")
print(f"Doc2 vector norm: {doc2.vector_norm}")

若输出远大于或小于1.0,说明向量归一化过程异常,可手动归一化后重新计算相似度:

from sklearn.preprocessing import normalize
import numpy as np

vec1 = normalize(doc1.vector.reshape(1, -1))[0]
vec2 = normalize(doc2.vector.reshape(1, -1))[0]
similarity = np.dot(vec1, vec2)
print(f"Manual normalized similarity: {similarity}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:37:30