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

基于TF-IDF比较语料库文档对:已实现矩阵计算,求段落相似度方案

计算TF-IDF矩阵下的段落相似度

Hey there! 既然你已经成功用TfidfVectorizer生成了TF-IDF矩阵,那接下来计算段落间的相似度就很顺理成章了。最常用也最有效的方法就是余弦相似度——它能衡量两个向量(这里就是段落的TF-IDF向量)之间的夹角余弦值,值越接近1说明相似度越高。

方法步骤:用sklearn的cosine_similarity直接计算

首先你需要导入余弦相似度的工具函数,然后直接传入你的TF-IDF矩阵即可:

from sklearn.metrics.pairwise import cosine_similarity

# 计算所有段落间的余弦相似度矩阵
similarity_matrix = cosine_similarity(tfidf_matrix)

# 查看第0段和第1段的相似度
print("段落0和段落1的相似度:", similarity_matrix[0][1])

# 如果要找和第0段最相似的段落(排除自身)
most_similar_idx = similarity_matrix[0].argsort()[-2]  # 取倒数第二个,因为第一个是自身(相似度1)
print("和段落0最相似的段落是第{}段,相似度为:{:.4f}".format(most_similar_idx, similarity_matrix[0][most_similar_idx]))

代码解释:

  • cosine_similarity(tfidf_matrix)会返回一个n×n的矩阵(n是段落数量),其中similarity_matrix[i][j]就代表第i个段落和第j个段落的相似度。
  • argsort()会对相似度数组进行排序,取倒数第二个元素就能得到除了自身外最相似的段落索引(因为自身的相似度是1,肯定排在第一位)。

其他可选方法(如果需要更灵活的计算)

如果你想手动实现余弦相似度(或者理解底层逻辑),可以用以下方式计算两个段落向量的相似度:

import numpy as np

# 取出第0段和第1段的TF-IDF向量
vec1 = tfidf_matrix[0].toarray().flatten()
vec2 = tfidf_matrix[1].toarray().flatten()

# 计算余弦相似度
dot_product = np.dot(vec1, vec2)
norm1 = np.linalg.norm(vec1)
norm2 = np.linalg.norm(vec2)
similarity = dot_product / (norm1 * norm2)

print("手动计算的段落0和段落1的相似度:", similarity)

这个结果和用cosine_similarity得到的是完全一致的,只是手动实现了公式而已。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:01:24