首页 > 解决方案 > doc2vec:性能测量和“工人”参数

问题描述

我有一个非常大的语料库作为我的 doc2vec 培训的输入,大约 2300 万个文档使用可迭代函数进行流式传输。我想知道是否有可能看到我的训练进度的发展,可能是通过找出它当前正在进行的迭代、每秒字数或一些类似的指标。

我还想知道如何加快 doc2vec 的性能,而不是减小语料库的大小。我发现了workers参数,我目前正在培训 4 个流程;这个数字背后的直觉是多处理不能利用虚拟内核。我想知道 doc2vec workers参数是否属于这种情况,或者我是否可以使用 8 个工作程序,甚至可能更高(我有一个四核处理器,运行 Ubuntu)。

我必须补充一点,使用 unix 命令top -H仅报告使用 8 个工作人员的每个 python 进程的 CPU 使用率约为 15%,而使用 4 个工作人员的每个进程的 CPU 使用率约为 27%。

标签: pythonnlpmultiprocessingword2vecdoc2vec

解决方案


如果您在 INFO 级别启用日志记录,您应该会看到大量的进度输出。以下gensim是 Doc2Vec 教程,看起来像

import logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)

Word2Vecgensim或模型的最佳吞吐量Doc2Vec通常在workers3 到 12 之间,但绝不会超过可用处理器内核的数量。(如果您使用特定的磁盘语料库格式,则进一步优化对于具有更多内核的机器特别有用,该格式在最新的 3.6.0 gensim 版本中可用 - 请参阅发行说明以获取更多信息。)

如果您在 4 核、4 工作人员设置上看到如此低的利用率,那么瓶颈可能是您的语料库迭代器。如果它正在执行任何复杂的 IO 或基于正则表达式的文本处理,那么训练工作线程通常处于空闲状态,等待一个主语料库迭代器线程生成更多文本,从而限制了整体利用率和效率。

您应该尝试做一次复杂的事情,然后将标记/标记化的结果作为更简单的文件重新写入磁盘。然后用一个非常简单的以行和空格分隔的迭代器来阅读它,以进行实际的模型训练。

(如果您的 4 核实际上支持更多的虚拟核,那么workers高达 8 的某个值可能会实现更高的吞吐量......但只有使用您的特定模型参数的试错法,当前才能找到您的局部最优值。最优值可以随其他参数而变化,例如size, window,negative等)


推荐阅读