现在,我正在使用MALLET包中的LDA主题建模工具对我的文档进行一些主题检测。一切都很好,我从中得到了20个主题。但是,当我尝试使用模型推断新文档时,结果有点莫名其妙。
例如,我故意在我手动创建的文档上运行我的模型,该文档只包含来自“FLU”主题之一的关键字,但我得到的主题分布对于每个主题都<0.1。然后,我在其中一个已经采样的文档上尝试相同的事情,其中一个主题的得分为0.7。同样的事情也发生了。
有人可以提供一些线索吗?
尝试在MALLET邮件列表上询问,但显然没有人回复。
答案 0 :(得分:2)
我对MALLET也知之甚少,但文档提到了这个......
主题推断
- inferencer-filename [FILENAME]基于创建主题推理工具 目前训练有素的模特。使用 MALLET命令bin / mallet推断主题 - 帮助获取有关使用主题推断的信息。
请注意,您必须确保 新数据与您的数据兼容 培训数据。使用该选项 MALLET命令bin / mallet中的[MALLET TRAINING FILE]中的--use-pipe- import-file或import-dir指定一个 培训档案。
也许你忘了这样做?它对我来说听起来像你正在训练的数据与你正在测试的数据的格式不同。
答案 1 :(得分:2)
我遇到了与Mallet相同的难度。 后来我发现问题是文档必须通过曾经用于阅读培训文档的管道读入。
以下是培训文件中的样本:
ImportExample importerTrain = new ImportExample();//this is an example class in MALLET to import docs.
InstanceList training= importer.readDirectory(new File(trainingDir));
training.save(new File(outputFile));
在主题推理中阅读文档时:
InstanceList training = InstanceList.load(new File(outputFile));
Pipe pipe = training.getPipe();
ImportExample importer = new ImportExample();
importer.pipe = pipe; //use the same pipe
InstanceList testing = importer.readDirectory(new File(testDir));
我从他们档案中发布的一个问题中得到了线索:http://thread.gmane.org/gmane.comp.ai.mallet.devel/829
答案 2 :(得分:1)
披露:我熟悉通常用于主题推理的技巧和数学,但我对MALLET的接触很少。
我希望这些半受过教育的猜测能够引导您找到解决方案。不保修; - )
我假设您正在使用mallet命令 hlda 来训练模型。
一些可能出错的事情:
答案 3 :(得分:0)
以下是我使用 MALLET 推断新文档的主题分布的方法。我想我会发布,因为我一直在寻找如何做到这一点并且有很多答案,但没有一个是全面的。这也包括训练步骤,以便您了解不同文件如何相互连接。
创建您的训练数据:
$BIN_DIR/mallet import-file --input $DIRECTORY/data.input --output $DIRECTORY/data.mallet --keep-sequence --token-regex '\w+'
其中 data.input
是包含您的文件 ID、标签和一系列令牌或令牌 ID 的文档。然后使用您喜欢的参数在此数据上训练您的模型。例如:
$BIN_DIR/mallet train-topics --input $DIRECTORY/data.mallet \
--num-topics $TOPICS --output-state $DIRECTORY/topic-state.gz \
--output-doc-topics $DIRECTORY/doc-topics.gz \
--output-topic-keys $DIRECTORY/topic-words.gz --num-top-words 500 \
--num-iterations 1000
稍后,您可以使用经过训练的模型和训练数据创建推理器:
bin/mallet train-topics --input $DIRECTORY/data.mallet --num-topics NUMBER --input-state $DIRECTORY/topic-state.gz --no-inference --inferencer-filename $DIRECTORY/inferencer-model
现在,使用来自训练数据的管道为新文档创建文件:
bin/mallet import-file --input $DIRECTORY/new_data.input --output $DIRECTORY/new_data.mallet --use-pipe-from $DIRECTORY/data.mallet --keep-sequence --token-regex '\w+'
推断新文档的主题:
bin/mallet infer-topics --inferencer $DIRECTORY/inferencer-model --input $DIRECTORY/new_data.mallet --output-doc-topics $DIRECTORY/new_data_doc_topics --num-iterations 1000