我正在尝试群集Twitter流。我想把每条推文都放到一个谈论相同主题的集群中。我尝试使用具有tf / idf和余弦相似性的在线聚类算法对流进行聚类,但我发现结果非常糟糕。
使用tf / idf的主要缺点是它聚集了类似关键字的文档,因此只能识别几乎相同的文档。例如,考虑以下句子:
1-网站Stackoverflow是一个不错的地方。 2- Stackoverflow是一个网站。
由于它们共享很多关键词,因此预先使用两个句子可能会聚合在一起并具有合理的阈值。但现在考虑以下两句话:
1-网站Stackoverflow是一个不错的地方。 2-我定期访问Stackoverflow。
现在通过使用tf / idf,聚类算法将会失败,因为它们只共享一个关键字,即使它们都讨论相同的主题。
我的问题:是否有更好的技术来聚类文档?
答案 0 :(得分:10)
根据我的经验,latent semantic analysis(LSA / LSI)向量的余弦相似性比文本聚类的原始tf-idf好很多,尽管我承认我没有在Twitter数据上尝试过。特别是,它倾向于处理您遇到的稀疏性问题,文档中没有足够的常用术语。
LDA等主题模型可能会更好。
答案 1 :(得分:7)
正如其他评论和答案所述。使用LDA可以提供良好的推文 - >主题权重。
如果这些权重不足以满足您的需求,您可以使用聚类算法来查看这些主题分布的聚类。
虽然它是训练集依赖LDA可以很容易地将stackoverflow,堆栈溢出和堆栈溢出的推文捆绑到同一主题中。然而,“我的堆栈即将溢出”可能会改为另一个关于盒子的话题。
另一个例子:一条带有Apple一词的推文可以涉及许多不同的主题(公司,水果,纽约和其他)。 LDA会查看推文中的其他字词,以确定适用的主题。
答案 2 :(得分:2)
答案很长:
TfxIdf是目前最着名的搜索方法之一。您需要的是Natural Langage Processing(NLP)的一些预处理。有很多资源可以帮助你学习英语(例如python中的lib'nltk')。
在编制索引之前,您必须对查询(问题)和您的文档使用NLP分析。
关键是:虽然tfxidf(或lucene中的tfxidf ^ 2)很好,但您应该在具有元语言学信息的带注释资源上使用它。这可能很难,需要有关核心搜索引擎,语法分析(语法)和文档领域的广泛知识。
简短回答:更好的方法是使用带有轻型语法NLP注释的TFxIDF,并重写查询和索引。