【问题标题】:ParallellTopicModel - Thread option changes result significantlyParallellTopicModel - 线程选项更改结果显着
【发布时间】:2018-01-03 16:46:00
【问题描述】:

我目前正在使用 ParallelTopicModel 进行主题建模,但我遇到了一些奇怪的行为。当我为模型设置不同数量的线程时,我会得到不同的结果,如果我是对的,这不应该发生。我们编写的实现在具有不同最大线程数的不同机器上使用,但不知何故结果是不同的。 随机种子、文档、迭代等都是一样的。

这是一个已知的错误还是预期的?还是我只是做错了什么?

代码片段:

    // Begin by importing documents from text to feature sequences
    final InstanceList instances = new InstanceList(docPipe);
    instances.addThruPipe(docsIter);
    final ParallelTopicModel model =
        new ParallelTopicModel(noOfTopics, m_alpha.getDoubleValue() * noOfTopics, m_beta.getDoubleValue());
    model.setRandomSeed(m_seed.getIntValue());
    model.addInstances(instances);
    model.setNumThreads(noOfThreads);
    model.setNumIterations(noOfIterations);
    try {
        model.estimate();
    } catch (RuntimeException e) {
        throw e;
    }

【问题讨论】:

    标签: topic-modeling mallet


    【解决方案1】:

    每个线程都有自己的随机数生成器。设置种子会将这些中的每一个初始化为相同的序列,因此如果您有相同数量的线程,您应该得到相同的结果。每个线程负责它自己的集合段。

    如果您有不同数量的线程,相同的随机数将应用于不同的令牌,这些令牌具有不同的采样分布,因此会有不同的采样结果。

    保留单个随机数生成器会增加同步依赖性,并且除非线程完全同步,否则无法保证相同的结果。

    【讨论】:

    • 好的,谢谢您的评论。对我来说的问题是,由于线程数不同,我无法在不同的机器上重现结果,除了设置每台机器上可能的最低通用线程数吗?
    • 没错。请记住,给定随机种子的重现性只能用于确定您的管道中没有不一致。这并不表明复制的模型是最优的、更可靠或更有效的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    相关资源
    最近更新 更多