尝试通过 carrot2workbench 对 15980 个文档进行聚类时出现 java 堆大小错误

Got java heap size error when trying to cluster 15980 documents via carrot2workbench

我的环境:8GB Ram Notebook Ubuntu 14.04,Solr 4.3.1,carrot2workbench 3.10.0

我的 Solr 索引:15980 个文档

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

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

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

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

How does Carrot2 clustering scale with respect to the number and length of documents? The most important characteristic of Carrot2 algorithms to keep in mind is that they perform in-memory clustering. For this reason, as a rule of thumb, Carrot2 should successfully deal with up to a thousand of documents, a few paragraphs each. For algorithms designed to process millions of documents, you may want to check out the Mahout project.

一位开发者也在此处发布了相关信息:

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

  1. 如果你很喜欢carrot2但不一定需要k-means,你可以看看商业Lingo3G,基于"Time of clustering 100000 snippets [s] "字段和(***)关于 http://carrotsearch.com/lingo3g-comparison it should be able to tackle more documents. Check also their FAQ entry on "What is the maximum number of documents Lingo3G can cluster?" on http://carrotsearch.com/lingo3g-faq

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

Carrot 似乎占用了很多内存。

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

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

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

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