MALLETのドキュメントによると、トピック モデルを段階的にトレーニングすることが可能です。
「-output-model [ファイル名] このオプションは、シリアル化された MALLET トピック トレーナー オブジェクトを書き込むファイルを指定します。このタイプの出力は、トレーニングの一時停止と再開に適しています」
あるデータ セットでトピックをトレーニングしてから、別のデータ セットでモデルをインクリメントしたいと考えています。両方のトレーニング ステップの後、両方のデータセットの状態を出力したいと思います (--output-state を使用)。これが私がそれをやろうとする方法です:
# training on the first dataset
../mallet-2.0.7/bin/mallet import-dir --input input/ --keep-sequence --output input.mallet
../mallet-2.0.7/bin/mallet train-topics --input input.mallet --num-topics 3 --output-state topic-state.gz --output-model model
# training on the second dataset
../mallet-2.0.7/bin/mallet import-dir --input input2/ --keep-sequence --output input2.mallet --use-pipe-from input.mallet
../mallet-2.0.7/bin/mallet train-topics --input input2.mallet --num-topics 3 --num-iterations 100 --output-state topic-state2.gz --input-model model
最後のコマンドで「 --input-model model 」を追加すると、2 番目のデータセットのデータが output-state ファイルに存在しません。追加しないと、最初のデータセットのデータが出力状態ファイルに存在しません。
コード内のモデルにインスタンスを追加しようとすると:
model.addInstances(instances);
model.setNumThreads(2);
model.setNumIterations(50);
model.estimate();
[...]
model.addInstances(instances2);
model.setNumThreads(2);
model.setNumIterations(50);
model.estimate();
エラーが発生します:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 30
at cc.mallet.topics.ParallelTopicModel.buildInitialTypeTopicCounts(ParallelTopicModel.java:364)
at cc.mallet.topics.ParallelTopicModel.addInstances(ParallelTopicModel.java:276)
at cc.mallet.examples.TopicModel2.main(TopicModel2.java:66)
以前、MALLET リストに同様の質問がありました: http://permalink.gmane.org/gmane.comp.ai.mallet.devel/924、http://permalink.gmane.org/gmane.comp.ai.mallet .devel/2139
では、トピック モデルの増分トレーニングは可能でしょうか?