2

我是fastText的新手,这是一个用于高效学习单词表示和句子分类的库。我正在尝试为大量数据集生成词向量。但在单个过程中,它需要很长时间。

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

  • 是否有任何选项可用于加速单个 fastText 进程?
  • 有没有办法在并行 fastText 进程中生成词向量?
  • 是否有任何其他可用的实现或解决方法可以解决该问题,因为我阅读了 caffe2 implementation is available,但我找不到它。

谢谢

4

2 回答 2

2

Facebook 最初发布的 FastText 包含一个命令行选项thread,默认为 12,它控制将进行并行训练的工作线程的数量(在单台机器上)。如果您有更多 CPU 内核,但尚未尝试增加它,请尝试一下。

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

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

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

  • 检查您的语料库可以多快地迭代所有示例,而不是将其传递给 gensim 类。
  • 避免在迭代器中进行任何数据库选择或复杂/正则表达式预处理/标记化——只做一次,然后将易于阅读的标记化结果语料库保存在某处。
  • 如果语料库来自网络卷,则测试从本地卷流式传输是否有帮助。如果来自旋转的 HD,请尝试使用 SSD。
  • 如果可以使语料库适合 RAM,也许在专用的巨型 RAM 机器上,请尝试这样做。
于 2018-05-01T16:26:36.177 回答
2

我了解您喜欢分发 fastText 并进行并行培训的问题。

问题 #144中所述

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

除了那里还提到了 Word2Vec Spark implementation,我不知道有任何其他实现。

于 2018-05-01T13:37:22.583 回答