0

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

  1. 创建一个新的 InstanceList 并仅摄取一个文档并从 InstanceList 中获取主题结果

    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. 将所有内容放在 InstanceList 中并一起预测主题。

    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 时,索引是不同的,因为该集合有更多的文本。不确定在模型预测过程中如何准确地考虑这些信息。

4

2 回答 2

1

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

于 2018-09-15T18:12:24.343 回答
0

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

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

于 2018-09-14T21:42:27.283 回答