如何在Apache中解决迭代次数和分区数激发Word2Vec?

Ars*_*lam 14 apache-spark word2vec apache-spark-mllib

根据mllib.feature.Word2Vec - spark 1.3.1文档[1]:

def setNumIterations(numIterations: Int): Word2Vec.this.type
Run Code Online (Sandbox Code Playgroud)

设置迭代次数(默认值:1),该值应小于或等于分区数.

def setNumPartitions(numPartitions: Int): Word2Vec.this.type
Run Code Online (Sandbox Code Playgroud)

设置分区数(默认值:1).使用较小的数字来提高准确性.

但是在这个Pull Request [2]中:

为了使我们的实现更具可伸缩性,我们分别训练每个分区,并在每次迭代后合并每个分区的模型.为了使模型更准确,可能需要多次迭代.

问题:

  • 参数numIterations和numPartitions如何影响算法的内部工作?

  • 考虑到以下规则,在设置分区数和迭代次数之间是否需要权衡?

    • 更准确 - >更多迭代a/c到[2]

    • 更多迭代 - >更多分区a/c到[1]

    • 更多分区 - >精度更低

ren*_*rj2 3

当增加分区数量时,会减少每个分区训练的数据量,从而使每个训练步骤(词向量调整)更加“嘈杂”且不太确定。Spark 的实现通过在增加分区数量时降低学习率来响应此问题,因为有更多进程更新向量权重。