如何在非常大的数据集上训练Word2vec?
我正在考虑对word2vec进行Web爬网转储上超过10 TB +大小的海量大规模数据的培训。
我对iMac上的c实现GoogleNews-2012转储(1.5gb)进行了亲自培训,花了大约3个小时来训练和生成矢量(对速度印象深刻)。我没有尝试python实现:(我在某处读到,在300个矢量长度的wiki
dump(11gb)上生成矢量大约需要9天的时间来生成。
如何加快word2vec的速度?我是否需要在2-3天内使用分布式模型或需要使用哪种类型的硬件?我有配备8GB内存的iMac。
哪一个更快?Gensim python或C实现?
我看到word2vec实现不支持GPU训练。
回答:
有许多机会可以大规模创建Word2Vec模型。如您所指出,候选解决方案是分布式(和/或多线程)或GPU。这不是一个详尽的清单,但是希望您对如何进行操作有一些想法。
分布式/多线程选项:
- Gensim在重要的地方使用Cython,并且与C实现相当,或不慢于C实现。Gensim的多线程运行良好,并且使用具有足够内存和大量内核的计算机会大大减少向量生成时间。您可能要使用Amazon EC2 16或32核心实例进行调查。
- Deepdist可以利用gensim和Spark在整个集群中分配gensim工作负载。Deepdist还具有一些巧妙的SGD优化,可在节点之间同步梯度。如果将多核计算机用作节点,则可以同时利用群集和多线程。
存在许多Word2Vec GPU实现。鉴于数据集很大,GPU内存有限,您可能必须考虑集群策略。
- Bidmach显然非常快(但是缺少文档,并且坦率地说我一直在努力使其工作)。
- DL4J具有Word2Vec实现,但是该团队尚未实现cuBLAS gemm,并且与CPU相比相对较慢。
- Keras是利用Theano的Python深度学习框架。尽管它本身并没有实现word2vec,但它确实实现了嵌入层,可用于创建和查询单词向量。
Word2Vec还有许多其他CUDA实现,它们具有不同程度的成熟度和支持:
- https://github.com/whatupbiatch/cuda-word2vec [虽然没有关于如何创建数据集的文档,但是内存mgmt看起来很棒,]
- https://github.com/fengChenHPC/word2vec_cbow [超快速,但大型数据集上的GPU内存问题]
我相信SparkML团队最近开始使用基于cuBLAS的Word2Vec实现原型。您可能要对此进行调查。
以上是 如何在非常大的数据集上训练Word2vec? 的全部内容, 来源链接: utcz.com/qa/401046.html