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

如何聚类text-embedding-ada-002生成的评论句嵌入?求替代K-means方案

适配text-embedding-ada-002嵌入的无预设聚类数聚类方案

一、DBSCAN聚类(优先推荐)

  • 核心优势:无需预先指定聚类数,基于密度识别簇,完美适配高维的text-embedding-ada-002嵌入
  • 关键注意点:ada嵌入处于余弦相似度空间,需使用余弦距离作为度量(默认欧氏距离在高维空间区分度差)
  • 示例代码:
import numpy as np
from sklearn.cluster import DBSCAN
from sklearn.metrics.pairwise import cosine_distances

# 将ada嵌入转换为numpy数组
embeddings = np.array(df_exploded['ada_v2'].tolist())
# 计算余弦距离矩阵
distance_matrix = cosine_distances(embeddings)
# 初始化DBSCAN:eps为余弦距离阈值(对应相似度≥0.8则eps≤0.2),min_samples为簇最小样本数
dbscan = DBSCAN(eps=0.2, min_samples=40, metric='precomputed')
cluster_labels = dbscan.fit_predict(distance_matrix)
  • 调参提示:eps可根据业务需求调整,比如希望簇内相似度≥0.75,对应eps=0.25;min_samples保持你之前设定的40即可

二、层次聚类(Agglomerative Clustering)

  • 核心优势:可通过树状图手动确定聚类数,也能设置距离阈值自动划分簇,无需预设聚类数
  • 关键注意点:使用余弦相似度作为距离度量,选择平均链接(average linkage)更适合文本嵌入聚类
  • 示例代码:
import numpy as np
from sklearn.cluster import AgglomerativeClustering

embeddings = np.array(df_exploded['ada_v2'].tolist())
# 设置距离阈值自动划分簇,对应相似度≥0.8则阈值设为0.2
agg_clustering = AgglomerativeClustering(
    n_clusters=None,
    distance_threshold=0.2,
    affinity='cosine',
    linkage='average'
)
cluster_labels = agg_clustering.fit_predict(embeddings)

三、修正你原有的快速聚类(community_detection)

  • 问题排查:sentence_transformers.util.community_detection依赖归一化后的嵌入计算余弦相似度,若你的ada嵌入在数据处理中丢失了归一化,会导致效果不佳
  • 修正代码:
import torch
from sentence_transformers import util

# 加载嵌入并强制归一化
embeddings = torch.Tensor(df_exploded['ada_v2'].tolist())
embeddings = torch.nn.functional.normalize(embeddings, p=2, dim=1)
# 调整阈值(ada嵌入的合理相似度阈值通常在0.65-0.75之间)
clusters = util.community_detection(embeddings, min_community_size=40, threshold=0.7)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 18:22:56