machine-learning - WEKA 中潜在语义分析的可扩展性

标签 machine-learning nlp artificial-intelligence weka

我正在使用 Weka 进行文档分类研究。我需要设定一个基线,在此基础上我将证明我的贡献改进了分类。但是,在 Weka API 中使用默认的潜在语义分析会导致 OutOfMemory 错误。

执行一些预处理后,我的数据集由 9,603 个实例中使用的 25,765 个属性组成。这是针对训练集的,对于测试集,我有相同数量的类和普通属性,但这里有 3,299 个。

我有 8GB 内存,并且已将 Java 堆大小设置为 4Gb,但仍然出现 OutOfMemory 错误。这是错误消息:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at weka.core.matrix.Matrix.getArrayCopy(Matrix.java:301)
at weka.core.matrix.SingularValueDecomposition.<init>(SingularValueDecomposition.java:76)
at weka.core.matrix.Matrix.svd(Matrix.java:913)
at weka.attributeSelection.LatentSemanticAnalysis.buildAttributeConstructor(LatentSemanticAnalysis.java:511)
at weka.attributeSelection.LatentSemanticAnalysis.buildEvaluator(LatentSemanticAnalysis.java:416)
at weka.attributeSelection.AttributeSelection.SelectAttributes(AttributeSelection.java:596)
at weka.filters.supervised.attribute.AttributeSelection.batchFinished(AttributeSelection.java:455)
at weka.filters.Filter.useFilter(Filter.java:682)
at test.main(test.java:44)

我已经使用较小的数据集测试了我的代码,一切正常,因此这不是与代码相关的问题。有人可以解释一下如何扩展 LSA 以满足我的要求吗?或者我可以应用另一个更具可扩展性的类似流程吗?

最佳答案

您不会喜欢这个答案,但 WEKA 无法处理它。无论如何,该实现都使用完整的 SVD。因此,如果您有超过几千个数据点,仅执行完整的 SVD 就需要花费大量时间。

更不用说 WEKA 使用的内存远多于一般所需的内存。

最重要的是,Weka 创建了一个密集矩阵来进行 SVD。您可能将它用于稀疏数据,这将摧毁您使用 Weka 进行 LSA 的任何希望。

事实是,您将必须使用 Weka 以外的其他工具来完成 LSA。

关于machine-learning - WEKA 中潜在语义分析的可扩展性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23067804/

相关文章:

python - Alpha Beta 剪枝算法的绑定(bind)根

tensorflow - 此 TensorFlow 示例中的滤镜图像数据在哪里?

image - 我们可以使用经过图像分类训练的模型来帮助 tensorflow 中的对象检测吗?

python - 将所有 nlp 实体提取到另一列

artificial-intelligence - 如何创建智能聊天机器人?

image-processing - 图像处理中的 "energy"是什么?

python - Tensorflow CNN 'tuple' 对象没有属性 'initializer'

machine-learning - YoloV5 自定义再训练

python - python中的文本生成算法

r - 如何使用 tm 包计算 R 中的可读性