如何用WordEmbedding做语义相似度计算?余弦相似度实战代码分享

秋辰君_5286

秋辰君_5286

2026-05-27

847人浏览

原创

语义相似度计算核心是将文本转为向量后用余弦相似度衡量夹角,关键在于向量是否对齐语义;推荐从预训练词向量(如word2vec、glove、fasttext或中文tencent embedding)入手,句子层面可用平均池化、加权平均或sentence-bert;注意未登录词、长度差异、大小写与标点处理,阈值需依业务校准;效果不佳时应升级至sentence-bert、simcse等句向量方法。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如何用wordembedding做语义相似度计算?余弦相似度实战代码分享

用 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 最稳,也支持批量计算。

论文常用的tex格式转换为word格式,核心是能转换数学公式(非图片),表格,图表等等
论文常用的tex格式转换为word格式,核心是能转换数学公式(非图片),表格,图表等等

将 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,兼顾速度与多语言支持

相关专题

更多
数据分析的方法
数据分析的方法

数据分析的方法有:对比分析法,分组分析法,预测分析法,漏斗分析法,AB测试分析法,象限分析法,公式拆解法,可行域分析法,二八分析法,假设性分析法。php中文网为大家带来了数据分析的相关知识、以及相关文章等内容。

2023.07.04

1722

6

数据分析方法有哪几种
数据分析方法有哪几种

数据分析方法有:1、描述性统计分析;2、探索性数据分析;3、假设检验;4、回归分析;5、聚类分析。本专题为大家提供数据分析方法的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.07

2310

5

网站建设功能有哪些
网站建设功能有哪些

网站建设功能包括信息发布、内容管理、用户管理、搜索引擎优化、网站安全、数据分析、网站推广、响应式设计、社交媒体整合和电子商务等功能。这些功能可以帮助网站管理员创建一个具有吸引力、可用性和商业价值的网站,实现网站的目标。

2023.10.16

6450

14

数据分析网站推荐
数据分析网站推荐

数据分析网站推荐:1、商业数据分析论坛;2、人大经济论坛-计量经济学与统计区;3、中国统计论坛;4、数据挖掘学习交流论坛;5、数据分析论坛;6、网站数据分析;7、数据分析;8、数据挖掘研究院;9、S-PLUS、R统计论坛。想了解更多数据分析的相关内容,可以阅读本专题下面的文章。

2024.03.13

2924

8

Python 数据分析处理
Python 数据分析处理

本专题聚焦 Python 在数据分析领域的应用,系统讲解 Pandas、NumPy 的数据清洗、处理、分析与统计方法,并结合数据可视化、销售分析、科研数据处理等实战案例,帮助学员掌握使用 Python 高效进行数据分析与决策支持的核心技能。

2025.09.08

4165

12

Python 数据分析与可视化
Python 数据分析与可视化

本专题聚焦 Python 在数据分析与可视化领域的核心应用,系统讲解数据清洗、数据统计、Pandas 数据操作、NumPy 数组处理、Matplotlib 与 Seaborn 可视化技巧等内容。通过实战案例(如销售数据分析、用户行为可视化、趋势图与热力图绘制),帮助学习者掌握 从原始数据到可视化报告的完整分析能力。

2025.10.14

6212

24

Python 数据分析与可视化合集
Python 数据分析与可视化合集

聚焦 Python 在数据分析领域的核心应用,讲解 NumPy 数组运算、Pandas 数据清洗与聚合统计、缺失值与异常值处理、数据透视表生成,以及使用 Matplotlib、Seaborn、Pyecharts 制作折线图、柱状图、热力图、地图等多种可视化图表,适合数据分析师和运营人员快速掌握用 Python 从原始数据中挖掘洞察的能力。

2026.04.08

296

25

Python数据分析与Pandas高级实战
Python数据分析与Pandas高级实战

本专题围绕 Python 数据分析展开,系统讲解 Pandas 的高级用法,包括数据清洗、透视表、时间序列分析以及多表合并与分组操作。通过实战案例,帮助开发者掌握高效处理与分析数据的方法,提高数据处理效率与分析能力。

2026.04.13

451

25

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习