我正在评估Spark 1.6.0以构建和预测大型(数百万个文档,数百万个功能,数千个主题)LDA模型,这是我可以通过Yahoo!轻松完成的事情。 LDA。
从Java示例开始,我使用Distributed model / EM优化器构建了一个100K doc / 600K feature / 250 topic / 100迭代模型。模型很好,所得到的主题是连贯的。然后,我编写了一个新的单文档预测例程(SPARK-10809;我选择了基于Spark 1.6.0的自定义发行版)的包装器,以获取新的,看不见的文档(skeleton code)的主题。由此产生的预测生成缓慢(我在SPARK-10809中提供了修复)但更令人担忧,语无伦次(topics/predictions)。如果一份文件主要是关于足球,那么我期待足球"足球"主题(主题18)位于前10名。
无法判断我的预测代码中是否存在错误 - 或者是否因为我使用的是基于分布式/ EM的模型(正如jasonl在此暗示的那样{{3 }) - 我决定尝试更新的本地/在线模型。我花了几天时间调整我的240核/ 768GB RAM 3节点集群无济于事;似乎无论我尝试什么,我都会试图以这种方式构建模型。
我尝试了以下各种设置:
在不同的设置下,由于堆外分配错误(本机内存分配(mmap)无法映射X字节以提交保留内存)和java.lang.OutOfMemoryError:Java堆空间,它似乎在JVM核心转储之间振荡。我看到模型的引用接近我的数量级(databricks.com/blog/2015/03/25/topic-modeling-with-lda-mllib-meets-graphx.html),所以我一定做错了。
问题:
关于我接下来可以尝试的任何指示都将非常感激!