UMAP是Uniform Manifold Approximation and Projection的缩写,是一种基于黎曼几何和代数拓扑理论的非线性降维算法。 《怎样使用BERTopic做话题检测和主题聚类》建议在没有搞清楚这些参数的意义的时候,使用GooSeeker分词扩展模块界面上设定的缺省值。本文尝试对n_neighbors这个参数做一个简明的讲解。对各参数的解释详见UMAP的官网。 1. 参数的作用 n_neighbors 控制 UMAP 在构图时“每个点看多少近邻”,本质上决定你更偏向保留局部结构还是全局结构。 2. 取值大小的影响 值小(如 5~15): - 更关注局部邻域
- 更容易出现很多紧密小团
- 对噪声更敏感、结果更碎
值大(如 30~100): 在 BERTopic 场景里的影响: - n_neighbors 小:主题更细,但文档所属类别赋值为-1的噪音文档(离群点)可能更多
- n_neighbors 大:主题更粗,簇更稳定,但可能丢失细粒度主题
3. 推荐取值 - 小中型语料:n_neighbors=10~20(常见默认 15)
- 希望更细主题:降到 5~10
- 希望更稳定、更少碎簇:升到 30~50
4. 直观效果 以下图来自UMAP的官网       
5. 和 HDBSCAN 联动调参 - 先固定 min_cluster_size/min_samples
- 只改 n_neighbors 看主题数和 -1 占比
- 如果主题过碎:增大 n_neighbors
- 如果主题过粗:减小 n_neighbors
6. 与HDBSCAN联动调参的更多解释 6.1 分管不同流程阶段 因为它们作用在不同阶段,管的是不同问题,不是重复参数。 - UMAP n_neighbors:先把高维语义向量“重排”为更适合聚类的低维空间,决定局部/全局结构保留方式。
- HDBSCAN min_cluster_size/min_samples:在这个低维空间里再做密度聚类,决定什么算簇、什么算噪声。
所以流程是: - UMAP 先“造地形”
- HDBSCAN 再“按地形划分山头”
6.2 两者都需要 如果只有后者没有前者,会发生什么: - 文本嵌入维度高、密度不均,直接或用不合适的降维结果做密度聚类,簇边界会很不稳定。
- 即便 min_cluster_size/min_samples 固定,换一个 n_neighbors,地形就变了,簇结果也会明显变化。
直观例子: - n_neighbors 小:地形更强调局部细节,容易形成更多小山头。
- n_neighbors 大:地形更平滑,山头更少更大。
- 然后 min_cluster_size/min_samples 只是在这张地形图上决定哪些山头保留。
6.3 结论: - min_cluster_size/min_samples 决定“判定规则”
- n_neighbors 决定“被判定的数据形态”
两者缺一不可,且必须联动调。 |