聚类¶
Sentence-Transformers 可以以多种方式用于对少量或大量句子进行聚类。
k-均值聚类¶
kmeans.py 包含一个使用 K-means 聚类算法 的示例。K-Means 要求事先指定聚类的数量。句子将按大致相等大小的组进行聚类。
凝聚聚类¶
agglomerative.py 展示了一个使用 层次聚类 和 凝聚聚类算法 的示例。与 k-means 不同,我们可以为聚类指定一个阈值:低于该阈值的聚类将被合并。如果聚类的数量未知,该算法可能很有用。通过阈值,我们可以控制是希望得到许多小而细粒度的聚类,还是少数粗粒度的聚类。
快速聚类¶
对于较大的数据集,凝聚聚类速度较慢,因此可能只适用于几千个句子。
在 fast_clustering.py 中,我们介绍了一种针对大型数据集(50k 句子在不到 5 秒内完成)优化的聚类算法。在大量句子列表中,它搜索局部社区:局部社区是一组高度相似的句子。
您可以配置我们认为两个句子相似的余弦相似度阈值。此外,您可以指定局部社区的最小大小。这使您可以获得大型粗粒度聚类或小型细粒度聚类。
我们在 Quora 重复问题 数据集上应用了该算法,输出类似于以下内容:
聚类 1, #83 元素
我应该怎么做才能提高我的英语?
我应该怎么做才能提高我的口语英语?
我能提高我的英语吗?
...
聚类 2, #79 元素
我如何在网上赚钱?
我怎样才能在网上赚钱?
我能在网上赚钱吗?
...
...
聚类 47, #25 元素
有哪些大多数人不知道的令人惊叹的移动设备?
有哪些大多数人不知道的令人惊叹的设备和技术?
有哪些大多数人不知道的令人惊叹的移动技术工具?
...
主题建模¶
主题建模是从文档集合中发现主题的过程。
以下图片展示了一个示例,显示了在 20 新闻组数据集中识别出的主题:
对于每个主题,您希望提取描述该主题的词语:
Sentence-Transformers 可用于在句子、段落或短文档集合中识别这些主题。有关优秀教程,请参阅 使用 BERT 进行主题建模 以及 BERTopic 和 Top2Vec 仓库。
图片来源:Top2Vec: 主题的分布式表示