如何计算语料库中文档对的最小余弦相似度得分?附最大相似度代码
获取语料库中余弦相似度最高与最低的文档对
我来帮你补全获取最高相似度的代码,同时实现获取最低相似度的功能,这样就能一次性拿到你需要的两组文档对了:
完整的最高相似度实现
def get_high_sim(self): """Returns the maximum similarity score along with the corresponding document pair""" # 初始化最大值为-1(余弦相似度范围是[-1,1]),存储格式为(得分, 文档1, 文档2) maximum = (-1, 0, 0) for d1 in self.sim_matrix.keys(): for d2 in self.sim_matrix[d1].keys(): if d1 != d2: # 忽略文档与自身的相似度 # 仅考虑处于活跃状态的集群中的文档 if self.active_clusters[d1] != -1 and self.active_clusters[d2] != -1: score = self.sim_matrix[d1][d2] # 如果当前得分大于已记录的最大值,更新结果 if score > maximum[0]: maximum = (score, d1, d2) return maximum
最低相似度实现
逻辑和最高相似度类似,只是初始值设为余弦相似度的上限1,然后遍历过程中寻找更小的得分:
def get_low_sim(self): """Returns the minimum similarity score along with the corresponding document pair""" # 初始化最小值为1,存储格式为(得分, 文档1, 文档2) minimum = (1, 0, 0) for d1 in self.sim_matrix.keys(): for d2 in self.sim_matrix[d1].keys(): if d1 != d2: # 忽略文档与自身的相似度 # 仅考虑处于活跃状态的集群中的文档 if self.active_clusters[d1] != -1 and self.active_clusters[d2] != -1: score = self.sim_matrix[d1][d2] # 如果当前得分小于已记录的最小值,更新结果 if score < minimum[0]: minimum = (score, d1, d2) return minimum
关键细节说明
- 我们忽略
d1 == d2的情况,因为文档自身的余弦相似度恒为1,这不是我们需要的跨文档对。 - 检查
self.active_clusters[d1] != -1是为了过滤掉已经被标记为非活跃的集群中的文档,确保只处理有效数据。 - 余弦相似度的范围是**[-1, 1]**,所以初始化最大值为-1、最小值为1是合理的边界值,能保证所有有效得分都能触发更新。
你可以直接调用这两个函数,分别得到(最高得分, 文档ID1, 文档ID2)和(最低得分, 文档ID1, 文档ID2)的结果。
内容的提问来源于stack exchange,提问作者Madhura
相关产品推荐
相关产品推荐

