如何使用 KMeans 在 Spark 中对推文进行聚类?

How can I use KMeans to cluster tweets in Spark?

我想根据主题对推文进行聚类(例如,所有 Amazon 推文都在一个聚类中,所有 Netflix 推文都在另一个聚类中,等等)问题是,所有传入的推文都已经根据这些关键字进行了过滤,但是它们杂乱无章,我只是在它们进来时对它们进行分类。

我正在使用 Spark 流式处理并正在寻找一种方法来矢量化这些推文。因为这是批处理,所以我无法访问整个推文语料库。

如果您的预定义词汇表可能同时选择了多个术语 - 例如您感兴趣的一组 非互斥 tweet 类别 - 然后您可以有一个二进制向量,其中每个位代表一个类别。

如果类别是互斥的,那么您希望通过聚类实现什么?具体来说,不会有 "gray area" 其中一些观测值属于 CategorySet-A,其他观测值属于 CategorySet-B,其他观测值属于中间组合。如果每个观察结果都在一个类别中被限制,那么你有离散的 而不是集群。

相反,如果您希望基于相似的单词集进行聚类 - 那么您可能需要预先知道 "vocabulary" - 在这种情况下意味着:"what are the tweet terms that I care about"。在这种情况下,您可以使用 bag of words 模型 https://machinelearningmastery.com/gentle-introduction-bag-words-model/ 来比较推文 - 然后根据生成的向量进行聚类。

现在,如果您不确定先验词汇表——这里很可能是这种情况,因为您不知道下一条推文的内容是什么——那么您可能会求助于重新聚类 定期 - 随着您获得新单词。然后,您可以使用包含新 "seen" 条款的 updated bag of words。请注意,这会产生处理成本和延迟。为避免 cost/latency 您必须提前决定将您的聚类限制在哪些术语上:如果您对目标主题感兴趣,这可能是可能的。