如何在非常大的数据集上训练Word2vec?

pbu*_*pbu 18 c python machine-learning word2vec

我正在考虑在Web爬行转储上大量超过10 TB +的大规模数据上训练word2vec.

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

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

  2. 哪一个更快?Gensim python或C实现?

我看到word2vec实现不支持GPU培训.

dan*_*lef 34

大规模创建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实现.您可能想要对此进行调查.