我训练了一个LDA模型并将其加载到环境中以转换新数据:
from pyspark.ml.clustering import LocalLDAModel
lda = LocalLDAModel.load(path)
df = lda.transform(text)
该模型将添加一个名为 topicDistribution 的新列。在我看来,对于相同的输入,此分布应该相同,否则此模型不一致。但是,它并没有实践。
请问为什么以及如何解决这个原因?
答案 0 :(得分:1)
LDA在培训时使用随机性,并且在推断新数据时根据实施情况使用。 Spark中的实现基于EM MAP推理,因此我认为它仅在训练模型时使用随机性。这意味着每次训练和运行算法时结果都会不同。
要在相同的输入和相同参数上运行时获得相同的结果,您可以在训练模型时设置随机种子。例如,要将随机种子设置为1:
model = LDA.train(data, k=2, seed=1)
要在转换新数据时设置种子,请创建参数映射以覆盖默认值(种子None
)。
lda = LocalLDAModel.load(path)
paramMap[lda.seed] = 1L
df = lda.transform(text, paramMap)
有关覆盖模型参数的详细信息,请参阅here。