19

我正在考虑在网络爬网转储上使用超过 10 TB+ 的大规模数据训练 word2vec。

我在 iMac 上亲自训练了 c 实现 GoogleNews-2012 转储(1.5gb)花了大约 3 个小时来训练和生成向量(对速度印象深刻)。虽然我没有尝试 python 实现:( 我在某处读到,在 300 个向量长度的 wiki 转储(11gb)上生成向量大约需要 9 天才能生成。

  1. 如何加速word2vec?我需要使用分布式模型或需要在 2-3 天内完成的硬件类型吗?我有 8gb 内存的 iMac。

  2. 哪个更快?Gensim python还是C实现?

我看到 word2vec 实现不支持 GPU 训练。

4

1 回答 1

35

有很多机会可以大规模创建 Word2Vec 模型。正如您所指出的,候选解决方案是分布式(和/或多线程)或 GPU。这不是一个详尽的列表,但希望您对如何进行有一些想法。

分布式/多线程选项:

  • Gensim在重要的地方使用 Cython,与 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 实现,它们的成熟度和支持程度各不相同:

我相信 SparkML 团队最近开始了一个基于 cuBLAS 的原型 Word2Vec 实现。您可能想对此进行调查。

于 2015-06-04T23:30:18.793 回答