Nlp 为什么单个文档和批文档的MALLET主题推理会得到不同的结果?
我正在尝试使用mallet2.0.7执行LDA主题建模。从培训课程的输出来看,我可以培训一个LDA模型并获得良好的结果。此外,我可以使用该过程中内置的推理器,并在重新处理培训文件时获得类似的结果。然而,如果我从更大的训练集中获取一个单独的文件,并用推理器处理它,我会得到非常不同的结果,这是不好的 我的理解是推断器应该使用一个固定的模型,并且只使用该文档的本地特性,所以我不理解为什么在处理1个文件或训练集中的1k时会得到任何不同的结果。我不做频率切断,这似乎是一个全球性的行动,将有这种类型的影响。您可以在下面的命令中看到我正在使用的其他参数,但它们大多是默认参数。将迭代次数的#更改为0或100没有帮助 导入数据:Nlp 为什么单个文档和批文档的MALLET主题推理会得到不同的结果?,nlp,machine-learning,mallet,topic-modeling,Nlp,Machine Learning,Mallet,Topic Modeling,我正在尝试使用mallet2.0.7执行LDA主题建模。从培训课程的输出来看,我可以培训一个LDA模型并获得良好的结果。此外,我可以使用该过程中内置的推理器,并在重新处理培训文件时获得类似的结果。然而,如果我从更大的训练集中获取一个单独的文件,并用推理器处理它,我会得到非常不同的结果,这是不好的 我的理解是推断器应该使用一个固定的模型,并且只使用该文档的本地特性,所以我不理解为什么在处理1个文件或训练集中的1k时会得到任何不同的结果。我不做频率切断,这似乎是一个全球性的行动,将有这种类型的影响。
bin/mallet import-dir \
--input trainingDataDir \
--output train.data \
--remove-stopwords TRUE \
--keep-sequence TRUE \
--gram-sizes 1,2 \
--keep-sequence-bigrams TRUE
列车:
time ../bin/mallet train-topics
--input ../train.data \
--inferencer-filename lda-inferencer-model.mallet \
--num-top-words 50 \
--num-topics 100 \
--num-threads 3 \
--num-iterations 100 \
--doc-topics-threshold 0.1 \
--output-topic-keys topic-keys.txt \
--output-doc-topics doc-topics.txt
培训期间分配给一个文件的主题尤其是#14是关于葡萄酒的,这是正确的:
998 file:/.../29708933509685249 14 0.31684981684981683
> grep "^14\t" topic-keys.txt
14 0.5 wine spray cooking car climate top wines place live honey sticking ice prevent collection market hole climate_change winery tasting california moldova vegas horses converted paper key weather farmers_market farmers displayed wd freezing winter trouble mexico morning spring earth round mici torrey_pines barbara kinda nonstick grass slide tree exciting lots
对整列车批次运行推断:
../bin/mallet infer-topics \
--input ../train.data \
--inferencer lda-inferencer-model.mallet \
--output-doc-topics inf-train.1 \
--num-iterations 100
列车上的推理分数——非常相似:
998 /.../29708933509685249 14 0.37505087505087503
对仅包含1个txt文件的另一个培训数据文件运行推断:
../bin/mallet infer-topics \
--input ../one.data \
--inferencer lda-inferencer-model.mallet \
--output-doc-topics inf-one.2 \
--num-iterations 100
对一个文档的推理产生主题80和36,这两个主题非常不同(14分接近0分):
问题是small.data和one.data训练数据文件之间不兼容。尽管我小心地使用了所有相同的选项,但两个数据文件在默认情况下将使用不同的字母表(单词和整数之间的映射)。要更正此问题,请使用--use pipe from[MALLET TRAINING FILE]选项,然后指定其他选项似乎是不必要的。感谢大卫·米诺
bin/mallet import-dir \
--input [trainingDataDirWithOneFile] \
--output one.data \
--use-pipe-from small.data
bin/mallet import-dir \
--input [trainingDataDirWithOneFile] \
--output one.data \
--use-pipe-from small.data