首页 > 解决方案 > 有没有办法并行使用 fastText 的单词表示过程?

问题描述

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

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

谢谢

标签: nlpword2vecgensimfasttextcaffe2

解决方案


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 机器上,请尝试这样做。

推荐阅读