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