5

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/924http://permalink.gmane.org/gmane.comp.ai.mallet .devel/2139

では、トピック モデルの増分トレーニングは可能でしょうか?

4

1 に答える 1

0

あなたはこの会話スレッドの一部だったと思いますが、今のあなたにとって役立つかもしれません。

http://comments.gmane.org/gmane.comp.ai.mallet.devel/2153
于 2015-01-15T13:57:39.970 に答える