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

spaCy en_core_web_trf模型计算文本相似度返回0.0是何原因

问题原因

返回值恒为0.0是*en_core_web_trf模型的默认配置逻辑*导致的,和依赖安装、版本、运行设备无关:

  • spaCy的.similarity()方法默认通过读取两个文本对象的.vector属性计算余弦相似度,对象的.vector为全零张量时,相似度计算结果固定为0.0。
  • en_core_web_trf是基于Transformer结构的预训练模型,默认pipeline不会把Transformer输出的上下文嵌入赋值给.vector属性,该属性在默认配置下就是全零张量,因此无论输入什么文本对,计算出的相似度都是0.0。
解决方法
  • 快速验证场景可替换为自带静态词向量的模型:直接更换加载的模型为en_core_web_md或en_core_web_lg即可,这两类模型会自动为.vector属性填充有效向量,无需修改后续相似度计算代码,加载代码修改为nlp=spacy.load('en_core_web_md')即可得到合理的相似度结果。
  • 需使用Transformer模型的场景,可手动提取Transformer层输出的嵌入做相似度计算,参考代码如下:
import spacy
import torch

nlp = spacy.load('en_core_web_trf')

def calc_similarity(text_a: str, text_b: str) -> float:
    doc_a = nlp(text_a)
    doc_b = nlp(text_b)
    # 提取Transformer输出的句向量,此处取CLS位输出作为句表征
    vec_a = doc_a._.trf_data.tensors[0][0, 0, :]
    vec_b = doc_b._.trf_data.tensors[0][0, 0, :]
    return torch.cosine_similarity(vec_a.unsqueeze(0), vec_b.unsqueeze(0)).item()

score_1 = calc_similarity('hello', 'hi')
score_2 = calc_similarity('There is a coat on the chair.', 'Something is on my seat.')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:39:20