语义相似度计算核心是将文本转为向量后用余弦相似度衡量夹角,关键在于向量是否对齐语义;推荐从预训练词向量(如word2vec、glove、fasttext或中文tencent embedding)入手,句子层面可用平均池化、加权平均或sentence-bert;注意未登录词、长度差异、大小写与标点处理,阈值需依业务校准;效果不佳时应升级至sentence-bert、simcse等句向量方法。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

用 Word Embedding 计算语义相似度,核心是把词语或句子转成向量,再用余弦相似度衡量向量夹角——夹角越小,语义越接近。关键不在于模型多复杂,而在于向量表征是否对齐语义、是否适合当前任务。
选对词向量:预训练 vs 微调
初学者建议从成熟的预训练词向量入手,比如 Word2Vec(Google News 300维)、GloVe(6B/42B语料)或 FastText(支持子词,对拼写错误更鲁棒)。中文可直接用腾讯AI Lab发布的Tencent AI Lab Embedding(882万词,200维),或哈工大LTP、百度Word2Vec中文版。
注意:单个词的向量不能直接代表整句语义。若需句子相似度,常见做法有:
- 平均池化:对句中每个词向量取平均(需过滤停用词、忽略未登录词)
- 加权平均:用 TF-IDF 或词频给不同词赋权重后再平均
- 句向量模型:如 Sentence-BERT(sbert.net),直接输出高质量句向量,效果远超简单平均
余弦相似度计算:三步到位
公式是:cosθ = (A·B) / (||A|| × ||B||),本质是归一化后的点积。Python 中用 sklearn.metrics.pairwise.cosine_similarity 最稳,也支持批量计算。
将 LaTeX(.tex)学术论文转换为 Word(.docx),支持可编辑的 OMML 公式、原生 Word 表格、嵌入图形、IEEE 双栏排版及参考文献
示例代码(基于预训练 Word2Vec):
from gensim.models import KeyedVectors
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
<h1>加载预训练词向量(以英文为例)</h1><p>model = KeyedVectors.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True)</p><p>def sentence_vector(sent, model, dim=300):
words = sent.lower().split()
vec = np.zeros(dim)
count = 0
for word in words:
if word in model:
vec += model[word]
count += 1
return vec / count if count > 0 else np.zeros(dim)</p><h1>计算两句话相似度</h1><p>s1_vec = sentence_vector("I love machine learning", model)
s2_vec = sentence_vector("I enjoy AI algorithms", model)</p><p>sim = cosine_similarity([s1_vec], [s2_vec])[0][0]
print(f"相似度: {sim:.4f}") # 输出类似 0.7231
</p>
避坑提醒:这些细节决定结果是否可信
实际跑通不难,但容易因细节失真:
- 未登录词处理:遇到词表外词汇(如新词、缩写、错别字),简单跳过会导致向量稀疏;FastText 或 subword 策略能缓解
- 长度差异影响:长句平均后信息被稀释,可考虑用 SIF(Smooth Inverse Frequency)加权,抑制高频通用词干扰
- 不区分大小写 & 标点:英文需统一小写,中文注意分词一致性(推荐 jieba + 自定义词典)
- 相似度阈值无绝对标准:0.8 不一定“很像”,0.4 也不代表“无关”——需结合业务场景校准,比如客服问答可设 0.65 为匹配线
进阶建议:何时该换方法?
如果发现平均词向量效果不稳定(尤其跨领域、含否定/反语/长依赖),说明词袋式假设已失效。此时应升级:
- 用 Sentence-BERT 微调自己的语料,50 行代码就能获得领域适配的句向量
- 尝试 SimCSE(无监督对比学习),仅靠 dropout 就能学出强判别力
- 轻量部署场景可用 ONNX + distiluse-base-multilingual-cased,兼顾速度与多语言支持









