聚类

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 新闻组数据集中识别出的主题:

20news

对于每个主题,您希望提取描述该主题的词语:

20news

Sentence-Transformers 可用于在句子、段落或短文档集合中识别这些主题。有关优秀教程,请参阅 使用 BERT 进行主题建模 以及 BERTopicTop2Vec 仓库。

图片来源:Top2Vec: 主题的分布式表示