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

问题描述 投票:0回答:3

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

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

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

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

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

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

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

machine-learning data-mining cluster-analysis text-mining
3个回答
11
投票

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

LDA 等主题模型可能效果更好。


7
投票

正如其他评论和答案中提到的。使用LDA可以给出很好的推文->主题权重。

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

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

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

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

2
投票

长答案:

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.