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

聚类后如何测量簇内句子相似度以过滤高重复短文本簇?

你没有遗漏HDBSCAN的文档内容,HDBSCAN本身没有直接提供现成的簇内平均相似度属性,你可以通过两种方式获取簇聚合度指标:一是直接基于原始文本的embedding计算余弦相似度,二是用HDBSCAN输出的probabilities_属性计算单个簇内所有样本的平均归属概率,该值越高说明簇内样本聚合度越高、相似度越高。

以下是可落地的过滤方案,可根据你的现有开发进度选择:

方案1:基于簇内embedding相似度过滤(最匹配你的假设)

你已经生成了每条消息对应的SBERT embedding,对每个簇单独做如下计算:

  1. 取出该簇内所有消息的embedding矩阵
  2. 计算矩阵中所有向量两两之间的余弦相似度平均值
  3. 设定阈值(可参考初始值0.9,根据你的数据分布调整),平均相似度高于阈值的簇直接过滤
    参考实现代码:
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np

def calculate_cluster_avg_sim(cluster_embeddings):
    # 计算两两余弦相似度,取上三角值避免重复计算
    sim_matrix = cosine_similarity(cluster_embeddings)
    upper_triangle = sim_matrix[np.triu_indices_from(sim_matrix, k=1)]
    return upper_triangle.mean()

# 调用示例,cluster_embeds为当前簇所有样本的embedding列表
avg_sim = calculate_cluster_avg_sim(cluster_embeds)
if avg_sim > 0.9:
    # 标记为待过滤簇
    pass

方案2:基于关键词多样性过滤(适合已完成TF-IDF关键词提取的场景)

你已经输出了每个簇的TOP TF-IDF关键词,可直接基于关键词分布判断:

  1. 对每个簇的拼接文本,统计排名第一的关键词的词频占所有TOP关键词总词频的比例
  2. 如果占比超过阈值(可参考初始值70%),说明整个簇基本只围绕单个词/短语展开,属于无意义簇直接过滤
    该方案不需要回溯原始embedding,计算成本更低。

方案3:辅助规则过滤(可搭配前两个方案使用)

对所有簇先做基础规则校验,符合以下任一特征的簇可直接过滤:

  • 簇内所有样本的平均文本长度小于阈值(可参考初始值3个字符,hello、ok等无意义短句普遍长度较短)
  • 簇内去重后的不同文本数量占簇总样本量的比例低于阈值(可参考初始值10%,说明簇内存在大量完全重复的消息)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:45:01