如何使用 Mallet 预测一批文档的主题



我正在使用来自scala项目的mallet。在训练主题模型并获得推理器文件后,我尝试将主题分配给新文本。问题是我使用不同的调用方法得到了不同的结果。以下是我尝试过的事情:

  1. 创建一个新的实例列表并仅摄取一个文档,并从实例列表中获取主题结果

    somecontentList.map(text=>getTopics(text, model))
    def getTopics(text:String, inferencer: TopicInferencer):Array[Double]={
    val testing = new InstanceList(pipe)
    testing.addThruPipe(new Instance(text, null, "test instance", null))
    inferencer.getSampledDistribution(testing.get(0), iter, 1, burnIn)
    }
    
  2. 将所有内容放在实例列表中,并预测主题。

    val testing = new InstanceList(pipe)
    somecontentList.foreach(text=>
    testing.addThruPipe(new Instance(text, null, "test instance", null))
    )
    (0 until testing.size).map(i=> 
    ldaModel.getSampledDistribution(testing.get(i), 100, 1, 50))
    

除了第一种情况外,这两种方法会产生非常不同的结果。使用推理器的正确方法是什么?

附加信息: 我检查了实例数据。

0: topic (0)
1: beaten (1)
2: death (2)
3: examples (3)
4: forum (4)
5: wanted (5)
6: contributing (6)

我假设括号中的数字是预测中使用的单词索引。当我将所有文本放入 InstanceList 时,索引是不同的,因为集合包含更多文本。不确定在模型预测过程中如何准确考虑该信息。

请记住,新实例必须使用管道从Inferencer中记录的原始数据导入,以便字母表匹配。目前尚不清楚 scala 代码中pipe来自哪里,但前六个单词似乎看起来像是以 0 开头的 id,这表明这是一个新的字母表。

我也发现了类似的问题,尽管使用了 R 插件。我们最终分别为每行/文档调用推理器。

但是,当您调用同一行时,由于绘图和推理中的随机性,推理会有一些差异。虽然,我同意差异应该很小。

相关内容

  • 没有找到相关文章

最新更新