0

我的环境:带有 Ubuntu 14.04、Solr 4.3.1、carrot2workbench 3.10.0 的 8GB Ram Notebook

我的 Solr 索引:15980 个文档

我的问题:使用 kmeans 算法对所有文档进行聚类

当我在carrot2workbench (query: : ) 中放弃查询时,使用超过~1000 个结果时总是会出现Java 堆大小错误。我用 -Xms256m -Xmx6g 启动了 Solr,但它仍然会发生。

这真的是堆大小问题还是可能在其他地方?

4

2 回答 2

0

您的怀疑是正确的,这是堆大小问题,或者更准确地说,是可伸缩性约束。直接来自 carrot2 常见问题解答:http ://project.carrot2.org/faq.html#scalability

Carrot2 聚类如何根据文档的数量和长度进行扩展?Carrot2 算法要记住的最重要特征是它们执行内存中的聚类。出于这个原因,根据经验,Carrot2 应该能够成功处理多达一千个文档,每个文档只有几段。对于旨在处理数百万个文档的算法,您可能需要查看 Mahout 项目。

一位开发人员也在此处发布了此信息:https ://stackoverflow.com/a/28991477

虽然开发人员推荐 Mahout,这可能是要走的路,因为您不会像在 carrot2 中那样受到内存中集群约束的约束,但可能还有其他可能性:

  1. 如果你真的很喜欢carrot2但不一定需要k-means,你可以看看商业的Lingo3G,基于“聚集100000个片段[s]的时间”字段和http:/上的(***)注释/carrotsearch.com/lingo3g-comparison它应该能够处理更多文件。还可以查看他们关于“Lingo3G 可以集群的最大文档数量是多少?”的常见问题解答条目。在http://carrotsearch.com/lingo3g-faq

  2. 尝试最小化 k-means 执行聚类的标签的大小。与其对所有文档内容进行聚类,不如尝试对摘要/摘要进行聚类,或者提取重要的关键字并对其进行聚类。

于 2015-05-05T16:04:39.830 回答
0

似乎 Carrot 使用了很多内存。

K-means 不需要大量内存——每个文档一个整数。

所以你应该能够在内存中的数百万个文档上运行 k-means;即使有内存中的文档向量。

16k 文件并不多,所以我不明白为什么你应该在一个好的实现中遇到麻烦。看来他们真的要你买商业版来谋生!对我来说,去 Mahout 似乎有点矫枉过正。我猜你的数据仍然适合主内存,所以不要浪费时间在比你的内存慢一百万倍的网络上分发它。

也许自己实现k-means。这并不难...

于 2015-05-05T16:37:35.903 回答