0

我正在使用 lingpipe 进行情感分析(遵循代码),并且在训练分类器后尝试存储分类器。问题是存储后我无法加载它:

java.lang.ClassCastException: com.aliasi.classify.LMClassifier cannot be cast to com.aliasi.classify.DynamicLMClassifier

为了存储我使用的分类器:

AbstractExternalizable.compileTo(mClassifier, classifierFile);

并加载它:

mClassifier = (DynamicLMClassifier<NGramProcessLM>) AbstractExternalizable.readObject(classifierFile);

编辑:我之前应该读过 lingpipe 的 javadoc。要存储分类器并在之后加载它,mClassifier的类应该是LMClassifier<NGramProcessLM, MultivariateEstimator>. 因此它可以被初始化为 aDynamicLMClassifier<NGramProcessLM>并且在训练阶段有必要将它转换为DynamicLMClassifier<NGramProcessLM>。在此之后,它可以被加载并用于对新对象进行分类。正如@mjv 所说,这使得分类器不再可训练。

4

1 回答 1

1

AbstractExternalizable.compileTo() 方法仅调用被序列化对象的 compileTo() 方法并将输出发送到指定的文件。

由于DynamicLMClassifier.compileTo()方法会产生LMClassifier反序列化时得到的结果。LMClassifier 几乎是一样的东西,如果有的话,更高效更紧凑,主要区别在于它不可训练;因此,如果您打算在初始创建分类器后继续训练分类器,这只是一个问题。

如果您需要继续训练分类器,您可以单独序列化 LanguageModel(大多数 LanguageModel 实现 Compilable),并通过调用其构造函数并将反序列化模型列表传递给动态分类器来重新创建动态分类器。我从未尝试过这种方法,但我相信这是推荐的方法,特别是现在 LingPipe 对象的序列化已被重构。

于 2012-10-18T04:41:51.770 回答