根据MALLET 文档,可以逐步训练主题模型:
“ -output-model [FILENAME]此选项指定一个文件,用于写入序列化的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
Run Code Online (Sandbox Code Playgroud)
在上一个命令中,如果我添加“ --input-model model”,则第二个数据集中的数据不会出现在输出状态文件中。如果我不添加它,则第一状态数据集中的数据不会出现在输出状态文件中。
如果我尝试在代码中向模型添加其他实例:
model.addInstances(instances);
model.setNumThreads(2);
model.setNumIterations(50);
model.estimate();
[...]
model.addInstances(instances2);
model.setNumThreads(2);
model.setNumIterations(50);
model.estimate();
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 30
at cc.mallet.topics.ParallelTopicModel.buildInitialTypeTopicCounts(ParallelTopicModel.java:364)
at …Run Code Online (Sandbox Code Playgroud)