如何正确使用带 HDBSCAN 聚类器的approximate_predict() 进行文本聚类(NLP)?

数据挖掘 nlp 聚类 数据库扫描
2022-03-05 19:04:51

我已经根据这篇文章使用 HDBSCAN 进行了文本聚类,该文章描述了如何在 R 中执行此操作。我已经使用这个库在 Python 中重新编写了这个该方法是首先计算文档的 TF-IDF 向量,然后计算所有向量对的距离矩阵,并根据距离矩阵拟合 HDBSCAN 聚类器。

由于算法很慢而且我的整个集合有点大,所以我已经用我的文档子集来拟合集群器。我将其限制为 5000 个样本。HDBSCAN 发现的集群是可以接受的。我稍后会微调它们。

现在,我想创建一个 Python 方法,该方法将获取一个新文档,而不是原始训练集的一部分,并返回新文档似乎属于的集群标签。

我通过尝试使用approximate_predict()来完成这项任务。这是我有疑问的地方。

我怀疑为新文档计算集群标签的过程如下所示:

  1. 将新文档添加到我用于聚类器训练的 5000 个样本集中
  2. 计算 5001 个样本的距离矩阵(该矩阵将大于用于聚类拟合的矩阵)
  3. 取出结果矩阵的最后一行(应该对应于我的新文本)并从结果向量中删除最后一个元素(它应该包含新文档到自身的距离,我们可以忽略它)。去除最后一个元素是为了使最后一个向量的维度与用于拟合聚类器的矩阵的维度相匹配。否则集群会抱怨。
  4. 使用approximate_predict()方法,将第3步得到的向量传入,得到簇标签。

我的问题是:

  1. 我的方法正确吗?(它似乎过于复杂,但我不知道它应该是什么样子)
  2. 当我开始将大量文档传递给此方法时,它会在生产中表现良好吗?(在我实际调用approximate_predict() 之前所需的处理似乎很大)
  3. 如何以不同的方式完成?
  4. 最好不要使用approximate_predict() 方法,而是采用HDBSCAN 为我的5000 个样本计算的集群标签,并将其用于监督学习来训练分类器,然后对新文档进行分类?

我期待着您的回答,我将非常感激他们。我对此完全陌生,我周围没有任何人可以讨论这个问题。

1个回答

为什么要重新计算距离矩阵?

只需直接为所有新点计算 1x5000 向量。您甚至可以分批执行此操作,然后一次将一行输入预测器。