新闻文章的聚类

Posted

技术标签:

【中文标题】新闻文章的聚类【英文标题】:Clustering of news articles 【发布时间】:2014-10-03 09:25:25 【问题描述】:

我的场景非常简单:我有一堆新闻文章(目前约为 1k),我知道其中一些文章涵盖了相同的故事/主题。我现在想根据共享的故事/主题(即基于它们的相似性)对这些文章进行分组。

到目前为止,我所做的是应用基本的 NLP 技术,包括停用词删除和词干提取。我还计算了每篇文章的 tf-idf 向量,并且还可以基于这些 tf-idf 向量计算余弦相似度。但是现在随着文章的分组,我有点挣扎。我看到了两种主要的方法——可能是相关的——来做到这一点:

1) 机器学习/聚类:我已经对现有的聚类库进行了一些尝试,或多或少取得了成功;见here。一方面,诸如k-means之类的算法需要聚类的数量作为输入,我不知道。其他算法需要的参数也不能直观地指定(对我来说就是这样)。

2) 图算法:我可以将我的数据表示为一个图,其中文章是节点,加权边表示文章之间的成对(余弦)相似度。有了这个,例如,我可以首先删除所有低于某个阈值的边,然后可以应用图算法来寻找强连接子图。

简而言之,我不确定从这里最好的去处——我在这个领域还是很新的。我想知道是否有一些最佳实践,或者某种指导方针,哪些方法/算法可以(不)应用于某些场景。

(编辑:忘记链接到我的相关问题)

【问题讨论】:

我认为没有单一的“最佳方式”来完成这项任务;实际上,从您提出问题的方式来看,您可能会应用数十种不同的算法并获得质量相似的结果。你读过any paper on text categorization吗? 是的,我开始阅读有关相似性度量、(无监督)学习/聚类以及相关主题的内容。但与此同时,我也想尝试一些事情——你知道,“边做边学”,或者如果发生“通过燃烧/失败学习”。我不希望这是一种最好的方法。然而,这似乎是一项相当普遍的任务,我希望有一些最佳实践方法。 我真的很想知道你是如何对你的数据集进行聚类的,因为我有一组简历,我想对它们进行聚类和分类,而且我对这个领域还很陌生,我怎么能联系你对不起,因为我是没有在这里回答,但你是我最后的希望_再次抱歉 @Abeerzaroor -- 请参阅我的*** question,其中包含一个最小的、现在可以使用的示例。它本质上只是SciKit-Learn website 上更复杂示例的简化版本。这两个链接都应该可以帮助您开始滚动。 【参考方案1】:

由于您可以将数据集建模为图形,因此您可以应用基于马尔可夫模型的随机聚类。以下是 MCL 算法的资源链接:

Official thesis description and code base

Gephi plugin for MCL (to experiment and evaluate the method)

【讨论】:

这看起来很有趣,谢谢!我安装了 Gephi 插件并将其应用于一些示例数据。 Christian,我很想了解更多关于您使用基于图形的方法和其他方法进行的实验和结果的信息。【参考方案2】:

您还可以尝试对 k-means 进行树冠变化,以相对快速地估算聚类数 (k)。

http://en.wikipedia.org/wiki/Canopy_clustering_algorithm

您会随着时间的推移重新计算,还是只关心一组静态新闻?我问是因为你的 k 可能会随着时间的推移而改变。

【讨论】:

目前我只是尝试使用现成的算法/库来了解一些东西是如何工作的以及预期的结果。但你是对的,从长远来看,文档集将是动态的。我已经开始阅读有关聚类算法的增量解决方案。【参考方案3】:

尝试使用单一和完整链接的层次凝聚聚类HAC 算法类。

这些算法不需要簇的数量作为输入。

基本原理类似于在给定的一组数据点上生成最小生成树,然后根据阈值标准停止。一个密切相关的类是分裂聚类算法,它首先建立最小生成树,然后根据聚类间的相似性比率修剪掉树的一个分支。

【讨论】:

德巴斯,我会调查的!是否有任何现成的工具或库可供我用于最初的想法? 你可以使用Weka..它既有HAC的单链接也有完整的链接实现...weka.sourceforge.net/doc.dev/weka/clusterers/…

以上是关于新闻文章的聚类的主要内容,如果未能解决你的问题,请参考以下文章

第一节:基于划分的聚类算法概述

学习聚类算法总结

MATLAB | kmeans聚类如何绘制更强的聚类边界(决策边界)

MATLAB | kmeans聚类如何绘制更强的聚类边界(决策边界)

聚类算法研究

DBSCAN聚类︱scikit-learn中一种基于密度的聚类方式