You need to enable JavaScript to run this app. 如何基于已训练词向量使用Gensim计算文档与关键词集合的余弦相似度
优惠活动
大模型
产品
解决方案
定价
更多

如何基于已训练词向量使用Gensim计算文档与关键词集合的余弦相似度

基于Gensim计算文档与关键词集合的余弦相似度

核心实现逻辑:分别将单篇文档的分词结果、目标关键词集合转换为平均词向量,再计算两个向量的余弦值作为匹配得分,Gensim本身已封装全流程所需的工具方法,无需手动实现复杂的向量运算。

实现步骤

前置准备

通过Gensim的KeyedVectors接口加载训练完成的W2V/GloVe词向量模型,不管是原生Word2Vec格式的模型,还是转成Gensim兼容格式的GloVe模型,都可以直接调用内置方法完成计算。

内置能力说明

Gensim的KeyedVectors对象自带n_similarity()方法,已经完整实现了所需的全流程逻辑:

  • 自动过滤两组词中不在模型词表的无效词汇
  • 分别对两组有效词的词向量求平均,得到整组词的整体表示向量
  • 自动完成向量归一化,直接输出两个平均向量的余弦相似度值

可直接复用的代码

from gensim.models import KeyedVectors
import pandas as pd

# 加载已训练完成的词向量模型,替换为实际模型路径即可
# model = KeyedVectors.load("你的词向量模型存储路径")

# 定义待匹配的目标关键词集合
innovation_keywords = ['innovate','innovative','fast']

# 存储待计算的文档集合,结构为{文档名称: 分词后的词列表}
doc_set = {
    "sent1": ['innovative','culture','fast','moving','company'],
    "sent2": ['manager','micromanage','all','time'],
    "sent3": ['slow','response','customer']
}

# 逐文档计算与关键词集合的相似度
sim_result = {}
for doc_name, doc_word_list in doc_set.items():
    score = model.n_similarity(doc_word_list, innovation_keywords)
    sim_result[doc_name] = round(score, 2)

# 整理为期望的表格输出格式
result_table = pd.DataFrame.from_dict(sim_result, orient="index", columns=["innovation"])
print(result_table)

运行代码后输出的表格结构和你给出的期望格式完全一致。

常见注意事项

  • 余弦相似度的取值范围为[-1, 1],你示例中出现的0.98、0.45、-0.2均属于正常计算结果范围。
  • 若某篇文档的所有分词结果均不在模型词表中,n_similarity会触发维度不匹配的报错,可提前增加判断逻辑:遇到这类场景直接将对应文档的相似度标记为0,避免批量计算流程中断。
  • 无需手动对向量做归一化处理,n_similarity内部已默认完成归一化操作,输出的就是标准余弦相似度结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.12 11:45:05