ParallellTopicModel - 线程选项更改结果显着
ParallellTopicModel - Thread option changes result significantly
我目前正在使用 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;
}
每个线程都有自己的随机数生成器。设置种子会将这些中的每一个初始化为相同的序列,所以如果你有相同数量的线程,你应该得到相同的结果。每个线程负责其自己的集合段。
如果您有不同数量的线程,相同的随机数将应用于不同的令牌,这些令牌具有不同的抽样分布,因此会有不同的抽样结果。
保持单个随机数生成器会增加同步依赖性,除非线程完全同步,否则无法保证相同的结果。
我目前正在使用 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;
}
每个线程都有自己的随机数生成器。设置种子会将这些中的每一个初始化为相同的序列,所以如果你有相同数量的线程,你应该得到相同的结果。每个线程负责其自己的集合段。
如果您有不同数量的线程,相同的随机数将应用于不同的令牌,这些令牌具有不同的抽样分布,因此会有不同的抽样结果。
保持单个随机数生成器会增加同步依赖性,除非线程完全同步,否则无法保证相同的结果。