Nlp 为什么单个文档和批文档的MALLET主题推理会得到不同的结果?

Nlp 为什么单个文档和批文档的MALLET主题推理会得到不同的结果?,nlp,machine-learning,mallet,topic-modeling,Nlp,Machine Learning,Mallet,Topic Modeling,我正在尝试使用mallet2.0.7执行LDA主题建模。从培训课程的输出来看,我可以培训一个LDA模型并获得良好的结果。此外,我可以使用该过程中内置的推理器,并在重新处理培训文件时获得类似的结果。然而,如果我从更大的训练集中获取一个单独的文件,并用推理器处理它,我会得到非常不同的结果,这是不好的 我的理解是推断器应该使用一个固定的模型,并且只使用该文档的本地特性,所以我不理解为什么在处理1个文件或训练集中的1k时会得到任何不同的结果。我不做频率切断,这似乎是一个全球性的行动,将有这种类型的影响。

我正在尝试使用mallet2.0.7执行LDA主题建模。从培训课程的输出来看,我可以培训一个LDA模型并获得良好的结果。此外,我可以使用该过程中内置的推理器,并在重新处理培训文件时获得类似的结果。然而,如果我从更大的训练集中获取一个单独的文件,并用推理器处理它,我会得到非常不同的结果,这是不好的

我的理解是推断器应该使用一个固定的模型,并且只使用该文档的本地特性,所以我不理解为什么在处理1个文件或训练集中的1k时会得到任何不同的结果。我不做频率切断,这似乎是一个全球性的行动,将有这种类型的影响。您可以在下面的命令中看到我正在使用的其他参数,但它们大多是默认参数。将迭代次数的#更改为0或100没有帮助

导入数据:

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