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>。したがって、 に初期化できDynamicLMClassifier<NGramProcessLM>、トレーニング フェーズ中に にキャストする必要がありDynamicLMClassifier<NGramProcessLM>ます。この後、ロードして新しいオブジェクトを分類するために使用できます。@mjv が言ったように、これにより分類子はトレーニングできなくなります。

4

1 に答える 1

1

AbstractExternalizable.compileTo() メソッドは、シリアル化されるオブジェクトの compileTo() メソッドを呼び出すだけで、指定されたファイルに出力を送信します。

DynamicLMClassifier.compileTo()メソッドは、LMClassifier逆シリアル化したときに得られる を生成するためです。LMClassifier はほとんど同じものです。どちらかといえば、より効率的でコンパクトですが、主な違いは訓練できないことです。したがって、これは、最初の作成後に分類器をトレーニングし続ける場合にのみ問題になります。

分類子のトレーニングを継続する必要がある場合は、LanguageModel を個別にシリアル化し (ほとんどの LanguageModels は Compilable を実装します)、コンストラクターを呼び出して逆シリアル化されたモデルのリストを渡すことにより、動的分類子を再作成できます。私はこのアプローチを試したことはありませんが、特に LingPipe オブジェクトのシリアル化がリファクタリングされた今では、これが推奨される方法だと思います。

于 2012-10-18T04:41:51.770 に答える