比tf / idf和余弦相似性更好的文本文档聚类?

时间:2013-07-08 23:40:57

标签: machine-learning data-mining cluster-analysis text-mining

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

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

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

由于它们共享很多关键词,因此预先使用两个句子可能会聚合在一起并具有合理的阈值。但现在考虑以下两句话:

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

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

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

3 个答案:

答案 0 :(得分:10)

根据我的经验,latent semantic analysis(LSA / LSI)向量的余弦相似性比文本聚类的原始tf-idf好很多,尽管我承认我没有在Twitter数据上尝试过。特别是,它倾向于处理您遇到的稀疏性问题,文档中没有足够的常用术语。

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

答案 1 :(得分:7)

正如其他评论和答案所述。使用LDA可以提供良好的推文 - >主题权重。

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

虽然它是训练集依赖LDA可以很容易地将stackoverflow,堆栈溢出和堆栈溢出的推文捆绑到同一主题中。然而,“我的堆栈即将溢出”可能会改为另一个关于盒子的话题。

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

  1. “史蒂夫乔布斯是苹果公司的首席执行官”显然是关于公司的
  2. “我正在吃最美味的苹果”显然是关于水果的
  3. “我去美国旅行时会去大苹果”最有可能访问纽约

答案 2 :(得分:2)

答案很长:

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

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

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

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