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

如何利用已计算的TFIDF分数计算文档间的余弦相似度

解决方案:从已有TF-IDF分数构建文档-词项矩阵并计算余弦相似度(Python 2.7)

我完全懂你的痛点——已经花了大量精力做了预处理(包括词袋和IDF过滤)得到了TF-IDF分数,肯定不想再用TFIDFVectorizer重新计算一遍对吧?下面就给你一步步解决这个问题:

第一步:将长格式CSV转换为文档-词项矩阵

你的输入是长格式的CSV(每行对应一个文档-词项的TF-IDF分数),我们需要把它转成宽格式的矩阵,缺失的词项自动补0。用pandas是最便捷的方式,Python 2.7支持的最后一个稳定pandas版本是0.24.2,先安装这个版本:

pip install pandas==0.24.2

然后用以下代码处理数据:

import pandas as pd

# 读取你的TF-IDF数据CSV
df = pd.read_csv('your_tfidf_data.csv')

# 构建文档-词项矩阵:行=文档ID,列=词项,值=TF-IDF分数,缺失值补0
tfidf_matrix = df.pivot_table(
    index='Doc', 
    columns='Term', 
    values='TFIDF score', 
    fill_value=0
)

# 打印验证结果
print(tfidf_matrix)

运行后就能得到你想要的矩阵:

Term  apples  bananas  pears
Doc                         
1        0.3      0.7    0.0
2        0.1      0.0    0.9
3        0.6      0.2    0.2

第二步:计算文档间的余弦相似度

得到矩阵后,我们可以用scikit-learn的cosine_similarity快速计算相似度,注意Python 2.7支持的最后一个sklearn版本是0.20.3,先安装:

pip install scikit-learn==0.20.3

添加计算相似度的代码:

from sklearn.metrics.pairwise import cosine_similarity

# 计算余弦相似度矩阵
similarity_matrix = cosine_similarity(tfidf_matrix)

# 转换为DataFrame,方便直观查看(行和列都是文档ID)
similarity_df = pd.DataFrame(
    similarity_matrix, 
    index=tfidf_matrix.index, 
    columns=tfidf_matrix.index
)

print("文档间余弦相似度:")
print(similarity_df)

运行后会输出类似这样的结果:

Doc         1         2         3
Doc                              
1    1.000000  0.300000  0.420000
2    0.300000  1.000000  0.600000
3    0.420000  0.600000  1.000000

其他可选方案

如果不想用Python,你也可以用Excel的数据透视表完成矩阵转换:

  • 选中CSV数据,插入透视表
  • 行标签选Doc,列标签选Term,值选TFIDF score,值字段设置为“求和”(因为每个文档-词项只有一条记录)
  • 最后把空白单元格批量填充为0即可得到矩阵,之后可以用Excel数组公式手动计算余弦相似度(不过批量处理效率不如Python)

注意事项

  • 确保Python 2.7环境安装对应版本的依赖库,避免版本不兼容问题
  • 如果数据量较大,pivot_table的效率依然远高于手动循环构建矩阵

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:59:09