1 回答
TA贡献1779条经验 获得超6个赞
完成模型需要对所有数据进行一次传递以发现词汇,然后多次传递(默认值为 5)以执行向量训练。因此,您应该期望在磁盘读取中看到大约6倍的数据大小,仅从模型训练中即可。
(如果您的机器在此过程中最终需要使用虚拟内存交换,则可能会有更多的磁盘活动 - 但您绝对不希望发生这种情况,因为word2vec训练的随机访问模式几乎是虚拟内存使用的最坏情况,这将大大减慢训练速度。
如果您想了解代码的进度,并能够估计其完成时间,则应至少将Python日志记录启用到该级别。该过程的各个步骤将报告中期结果(例如发现和幸存的词汇量)和估计的进度。您通常可以通过研究合理值的日志记录输出来判断运行结束之前是否出现问题,并且一旦“训练”阶段开始,完成时间将是到目前为止完成的训练的简单预测。INFO
我相信大多数笔记本电脑应该限制自己的CPU,如果它变得如此之热以至于变得不安全或冒着CPU /组件极度磨损的风险,但是你的笔记本电脑是否这样做,我不能说,并且绝对确保其风扇工作&通风口畅通无阻。
我建议你选择一些小的随机数据子集 - 也许是1GB?– 在尝试在完整数据集上运行之前,能够运行所有步骤以完成,熟悉日志记录输出,资源使用情况和结果,并修补设置以观察更改,这可能需要数天的训练时间。Word2Vec
显示的某些参数对于快速训练不是最佳的。特别:
min_count=1
保留语料库调查中看到的每个单词,包括仅出现一次的单词。这会导致一个非常大得多的模型 - 可能会冒着模型不适合RAM的风险,迫使灾难性的交换。但是,只有几个用法示例的单词不可能获得好的单词向量,因为该过程需要看到许多微妙不同的替代用法。尽管如此,通过典型的“Zipfian”词频,只有少数用法的此类单词的数量可能总共非常大,因此保留所有这些单词需要大量的训练时间/精力,甚至有点像“噪音”,使得其他单词的训练,大量的使用示例,效果较差。因此,对于模型大小、训练速度和剩余向量的质量,需要更大的向量。默认值对于更多的项目来说更好 - 这是一个参数,只有在您确定知道效果时才应该真正更改。而且,当您拥有大量数据时 - 就像您的34GB一样 - 可以做得更高,以保持模型大小易于管理。min_count
min_count=5
min_count=1
min_count
hs=1
仅当您要使用“分层-softmax”训练模式而不是“负采样”时,才应启用该模式 - 在这种情况下,还应将其设置为禁用“负采样”。您可能不想使用分层软最大:它不是默认值是有原因的,并且它不能扩展到更大的数据集。但是,除了负采样之外,您在这里还启用了,可能将所需的训练时间增加了一倍以上。negative=0
您选择是因为您在默认方面遇到问题吗?因为这种非默认选择会明显减慢训练速度。(但是,同样,这里的非默认选择对于较小的数据集更为常见,而像您这样的较大数据集更有可能尝试较小的值。
negative=10
negative=5
negative
上述观察的主题是:“只有当你已经有一些工作,并且你有一个很好的理论(或测试方法)时,才改变默认值,这种改变可能会有所帮助”。
对于足够大的数据集,还有另一个默认参数可以考虑更改以加快训练速度(通常也提高单词向量质量):,该参数控制如何积极地使用高度频繁的单词(具有许多冗余的用法示例)可能会被缩减采样(随机跳过)。sample
默认值(又名 )非常保守。较小的值(如 )将丢弃更多最常用单词的冗余用法示例,从而大大加快整体训练速度。(而且,对于您大小的语料库,您最终可以尝试更小,更具侵略性的值。sample=0.001
1e-03
sample=1e-05
最后,如果所有数据(对于完整运行或子集运行)都可以位于已以空格分隔的文本文件中,则可以使用指定语料库的替代方法。然后,该类将使用优化的多线程 IO 方法将文件的各个部分分配给备用工作线程 - 如果您以前没有看到所有线程/CPU 内核的完全饱和,则可以增加我们的吞吐量。(我会把它推迟到尝试其他事情之后,然后检查你最好的设置是否仍然让你的8个线程中的一些经常闲置。corpus_file
Word2Vec
添加回答
举报