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

Posted

技术标签:

【中文标题】比 tf/idf 和余弦相似度更好的文本文档聚类?【英文标题】:Better text documents clustering than tf/idf and cosine similarity? 【发布时间】:2013-07-06 10:33:10 【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

@ThomasJungblut 好吧,TF-IDF 应该是一种加权方案,已经对相关关键字赋予了更多权重。如果认为问题在于推文只是如此微小的文本片段,那么除了“接近身份”之外,您就不能期望相似性在它们上能很好地发挥作用。大多数推文甚至都不是完整的句子,因此 NLP 也可能会失败。 LSI / LDA / NMF 等值得关注的一件事是主题漂移。如果您的管道未正确完成,则在已知数据集上训练模型将产生良好的结果。如果您随后将模型应用于完全看不见的数据集,您可能会看到由于拟合原始训练数据而导致性能显着下降。由于 Twitter 文本非常短,因此表示需要进行一些调整,因为可能没有足够的文本来正确训练模型。 @steve 有什么解决办法吗? @guckogucko 它来自的用户有什么影响吗? @steve 你是什么意思? 【参考方案1】:

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

诸如 LDA 之类的主题模型可能会更好。

【讨论】:

是主题模型聚类技术吗?还是特征表示? @guckogucko:特征表示。【参考方案2】:

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

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

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

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

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

【讨论】:

【参考方案3】:

长答案:

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

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

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

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

【讨论】:

以上是关于比 tf/idf 和余弦相似度更好的文本文档聚类?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Weka 在 Java 中进行文档聚类

如何标准化 scikit-learn 中的 TF*IDF 或计数?

使用 SciKit 在 python 中进行文档聚类

similarity和clustering 相似性和聚类

余弦相似度聚类

对 TF-IDF 特征向量中的特定特征进行加权,用于 k-means 聚类和余弦相似度