聚类
Sentence-Transformers 可以通过不同方式用于对小规模或大规模句子集进行聚类。
k-均值
kmeans.py 包含一个使用 K-means 聚类算法 的示例。K-均值要求预先指定聚类数量。句子被聚类成大致相等大小的组。
层次聚类
agglomerative.py 展示了一个使用 层次聚类 和 层次聚类算法 的示例。与 k-均值不同,我们可以为聚类指定一个阈值:低于该阈值的簇会被合并。如果聚类数量未知,此算法会很有用。通过阈值,我们可以控制是希望得到许多小而细粒度的簇,还是少量粗粒度的簇。
快速聚类
层次聚类对于大型数据集来说相当慢,因此它只适用于几千个句子。
在 fast_clustering.py 中,我们介绍了一种针对大型数据集(5万个句子在5秒内)优化的聚类算法。在一个大型句子列表中,它会搜索局部社区:一个局部社区是一组高度相似的句子。
您可以配置余弦相似度的阈值,我们以此来判断两个句子是否相似。此外,您可以指定局部社区的最小规模。这使您能够获得大型粗粒度簇或小型细粒度簇。
我们将其应用于 Quora 重复问题 数据集,输出结果大致如下
Cluster 1, #83 Elements
What should I do to improve my English ?
What should I do to improve my spoken English?
Can I improve my English?
...
Cluster 2, #79 Elements
How can I earn money online?
How do I earn money online?
Can I earn money online?
...
...
Cluster 47, #25 Elements
What are some mind-blowing Mobile gadgets that exist that most people don't know about?
What are some mind-blowing gadgets and technologies that exist that most people don't know about?
What are some mind-blowing mobile technology tools that exist that most people don't know about?
...
主题建模
主题建模是发现文档集合中主题的过程。
以下图片展示了一个示例,其中显示了 20 newsgroup 数据集中识别出的主题
对于每个主题,您需要提取描述该主题的词语
Sentence-Transformers 可用于识别句子、段落或短文档集合中的这些主题。有关优秀的教程,请参阅 使用 BERT 进行主题建模 以及 BERTopic 和 Top2Vec 仓库。
图片来源:Top2Vec:主题的分布式表示