有没有办法并行使用fastText的单词表示过程?

时间:2018-05-01 13:06:15

标签: nlp word2vec gensim fasttext caffe2

我是fastText的新手,这是一个有效学习单词表示和句子分类的库。我正在尝试generate word-vector for huge data set。但是在单一过程中,它需要很长时间。

所以让我清楚地提出我的问题:

  • 我可以使用任何选项来加速单个fastText进程吗?
  • 有没有办法在并行的fastText进程中生成word-vector?
  • 当我阅读caffe2 implementation is available时,是否还有其他任何可以解决问题的实施或解决方法,但我无法找到它。

由于

2 个答案:

答案 0 :(得分:2)

我理解您希望分发fastText并进行并行培训的问题。

正如Issue #144

中所述
  

......我们可能考虑实施的未来功能。目前它不在我们的优先事项列表中,但很快就会很快。

除了提到Word2Vec Spark implementation之外,我不知道任何其他实现。

答案 1 :(得分:2)

Facebook最初发布的FastText包括一个命令行选项thread,默认为12,它控制将进行并行训练的工作线程数(在一台机器上)。如果你有更多的CPU核心,并且尚未尝试增加它,那就试试吧。

gensim实现(如gensim.models.fasttext.FastText)包含一个初始化参数workers,它控制工作线程的数量。如果你还没有尝试增加它,最多核心数量,它可能会有所帮助。但是,由于Python实现中存在额外的多线程瓶颈,如果您拥有大量内核(尤其是16+),您可能会发现最大吞吐量的工作数少于内核数 - 通常在4-12范围内。 (您必须通过记录来实验和观察实现的速率,以找到最佳值,并且所有核心都不会被最大化。)

如果您的安装能够使用其Cython优化的例程,那么您只会在gensim中获得重要的多线程。如果您在通过pip或类似版本安装gensim时观察日志记录,则如果失败则应该有明显的错误。或者,如果您在加载/使用gensim类时正在查看日志/输出,则通常会在使用较慢的非优化版本时发出警告。

最后,通常在人们使用gensim的方式中,瓶颈可以在他们的语料库迭代器或IO而不是并行性。为了尽量减少这种放缓:

  • 检查您的语料库可以多快地迭代所有示例,而不是将其传递给gensim类。
  • 避免在迭代器中进行任何数据库选择或复杂/正则表达式预处理/标记化 - 只需执行一次,并将易于读取的标记保存在某处。
  • 如果语料库来自网络卷,请测试是否从本地卷流式传输有帮助。如果来自旋转高清,请尝试使用SSD。
  • 如果可以将语料库放在RAM中,也许是在专用的巨型RAM机器上,那就试试吧。