我正在尝试将一组关于特定主题的 Java 新闻文章聚集在一起。我使用 Crawler4J 抓取了有关特定主题的新闻网站,推出了我自己的 TF/IDF 实现与语料库进行比较(有一些原因,我没有使用内置的 Weka 或其他 TF/IDF 实现,但它们可能已经出局了这个问题的范围)并应用了一些其他特定于域的逻辑,这让我为每个文档留下了一袋单词+权重(我将其存储在值介于 0 和 1 之间的 Map 中)。我想通过查看单词权重来对类似主题的文章进行聚类,因此我开始使用 Weka 的 EM 和 SimpleKMeans 聚类器。问题是我得到了相当不起眼的结果,而且我
例如,在一个包含约 300 篇文章的玩具数据集中,如果我将单词修剪到每个文档中的前 20 个,然后使用完整的单词集作为特征,我最终会得到约 2k 个独特特征。我将每篇文章用作训练实例,并尝试一些不同的参数来调整 SimpleKMeans 集群器(例如 ~20-30 个集群,最大迭代 100 次)。当我一目了然地查看数据时,我发现很多文章的关键词似乎非常密切相关,所以我期望高质量的结果和包含约 5-10 篇文章的集群。不幸的是,结果通常是一个集群有超过一半的文章,一堆集群每个有 1 篇文章,以及一些散乱者有 2-5 篇左右的文章。
这些结果是预期的,还是有办法获得更高质量的结果?请注意,我还研究了 LingPipe 和其他提供集群功能的框架,并尝试滚动我自己的 EM 实现(取得了适度但不是很大的成功)。提前感谢您的帮助!