要使用 Sentence Transformers 通过主题或相似性对句子或文档进行聚类,首先需要将文本转换为数值嵌入(密集向量),以捕捉语义意义。 这些嵌入允许算法通过测量向量相似性(例如余弦相似性)来比较内容。 Sentence Transformers 模型,如 all-MiniLM-L6-v2
或 paraphrase-mpnet-base-v2
,经过训练可生成嵌入,其中相似文本在向量空间中映射得更近。 例如,句子“机器学习很强大”和“人工智能算法可以分析数据”可能比任何一个句子与“如何烤蛋糕”的嵌入更接近,反映了它们的主题一致性。
首先安装 sentence-transformers
库,并为所有文本生成嵌入。 对于包含 1,000 个文档的数据集,您需要将每个文档传递给模型,以获得一个 384 维或 768 维的向量(具体取决于模型)。 这一步在 GPU 上计算效率很高,但在 CPU 上对较小的数据集来说是可管理的。 生成嵌入后,可以使用 K-means、DBSCAN 或层次聚类等聚类算法。 例如,K-means 通过最小化簇内距离将嵌入分组到 k
个簇中。 您可以根据领域知识或诸如肘部法则之类的指标来设置 k
。 或者,诸如 HDBSCAN 之类的基于密度的方法会自动确定簇数,这在主题数量未知时很有用。
聚类后,使用诸如轮廓系数(测量簇凝聚力)或手动检查之类的指标验证结果。 例如,如果两个簇包含诸如“云计算降低成本”和“AWS 提供可扩展的服务器”之类的句子,则它们可能代表相同的主题,应该合并。 为了提高性能,如果嵌入是高维的,请在聚类之前考虑降维(例如,UMAP)。 对于大型数据集,诸如 FAISS 或 Annoy 之类的近似最近邻库可以加速相似性搜索。 诸如 scikit-learn 的 KMeans
或 AgglomerativeClustering
之类的实用工具可以轻松地与嵌入集成,从而实现诸如将客户反馈分组到主题中或按主题组织研究论文之类的工作流程。