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

如何计算语料库中文档对的最小余弦相似度得分?附最大相似度代码

获取语料库中余弦相似度最高与最低的文档对

我来帮你补全获取最高相似度的代码,同时实现获取最低相似度的功能,这样就能一次性拿到你需要的两组文档对了:

完整的最高相似度实现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:53:23