18

我正在尝试对 Twitter 流进行集群。我想将每条推文放到一个讨论相同主题的集群中。我尝试使用具有 tf/idf 和余弦相似度的在线聚类算法对流进行聚类,但我发现结果非常糟糕。

使用 tf/idf 的主要缺点是它会将关键字相似的文档聚集在一起,因此只能识别几乎相同的文档。例如考虑以下句子:

1- 网站 Stackoverflow 是一个不错的地方。2- Stackoverflow 是一个网站。

前面的两个句子可能会通过一个合理的阈值聚集在一起,因为它们共享很多关键字。但现在考虑以下两句话:

1- 网站 Stackoverflow 是一个不错的地方。2- 我定期访问 Stackoverflow。

现在通过使用 tf/idf,聚类算法将惨遭失败,因为即使他们都谈论同一个主题,它们也只共享一个关键字。

我的问题:是否有更好的技术来聚类文档?

4

3 回答 3

10

根据我的经验,潜在语义分析(LSA/LSI) 向量上的余弦相似度比用于文本聚类的原始 tf-idf 效果要好得多,尽管我承认我没有在 Twitter 数据上尝试过。特别是,它倾向于解决您遇到的稀疏问题,即文档没有包含足够的常用术语。

LDA 等主题模型可能会更好。

于 2013-07-09T08:17:52.047 回答
7

如其他评论和答案中所述。使用 LDA 可以提供良好的 tweet->topic 权重。

如果这些权重不足以满足您的需求,您可以查看使用聚类算法对这些主题分布进行聚类。

虽然它依赖于训练集,但 LDA 可以轻松地将推文与 stackoverflow、stack-overflow 和 stack overflow 捆绑到同一个主题中。然而,“我的一堆盒子即将溢出”可能会进入另一个关于盒子的话题。

另一个例子:一条带有 Apple 一词的推文可以涉及许多不同的主题(公司、水果、纽约等)。LDA 会查看推文中的其他词来确定适用的主题。

  1. “史蒂夫乔布斯是苹果公司的首席执行官”显然是关于公司的
  2. “我在吃最美味的苹果”显然是关于水果的
  3. “我去美国旅行时要去大苹果”最有可能是关于访问纽约
于 2013-07-12T04:29:05.603 回答
2

长答案:

TfxIdf 是目前最著名的搜索方法之一。您需要的是来自自然语言处理 (NLP) 的一些预处理。有很多资源可以帮助您学习英语(例如 python 中的 lib 'nltk')。

在索引之前,您必须对查询(问题)和文档使用 NLP 分析。

关键是:虽然 tfxidf(或像 lucene 中的 tfxidf^2)很好,但您应该在带有元语言学信息的带注释资源上使用它。这可能很难,并且需要对您的核心搜索引擎、语法分析(句法)和文档领域有广泛的了解。

简短回答:更好的技术是使用带有轻语法 NLP 注释的 TFxIDF,并重新编写查询和索引。

于 2013-07-09T08:10:37.090 回答