我是fastText的新手,这是一个用于高效学习单词表示和句子分类的库。我正在尝试为大量数据集生成词向量。但在单个过程中,它需要很长时间。
所以让我清楚地提出我的问题:
- 是否有任何选项可用于加速单个 fastText 进程?
- 有没有办法在并行 fastText 进程中生成词向量?
- 是否有任何其他可用的实现或解决方法可以解决该问题,因为我阅读了 caffe2 implementation is available,但我找不到它。
谢谢
我是fastText的新手,这是一个用于高效学习单词表示和句子分类的库。我正在尝试为大量数据集生成词向量。但在单个过程中,它需要很长时间。
所以让我清楚地提出我的问题:
谢谢
Facebook 最初发布的 FastText 包含一个命令行选项thread
,默认为 12,它控制将进行并行训练的工作线程的数量(在单台机器上)。如果您有更多 CPU 内核,但尚未尝试增加它,请尝试一下。
gensim 实现(as gensim.models.fasttext.FastText
)包括一个初始化参数workers
,它控制工作线程的数量。如果您尚未尝试将其增加到核心数量,它可能会有所帮助。但是,由于其 Python 实现中存在额外的多线程瓶颈,如果您有很多内核(尤其是 16+),您可能会发现使用比内核更少的工作程序的最大吞吐量——通常在 4-12 范围内。(您必须通过记录来试验和观察达到的速率以找到最佳值,并且所有核心都不会被最大化。)
如果您的安装能够利用其 Cython 优化例程,您将只能在 gensim 中获得重要的多线程。如果您在通过或类似方式安装 gensim 时查看日志记录pip
,则如果失败,则应该有一个明显的错误。或者,如果您在加载/使用 gensim 类时正在查看日志/输出,如果正在使用较慢的非优化版本,通常会出现警告。
最后,通常在人们使用 gensim 的方式中,瓶颈可能在于他们的语料库迭代器或 IO,而不是并行性。为了尽量减少这种减速:
我了解您喜欢分发 fastText 并进行并行培训的问题。
...我们可能会考虑实施的未来功能。目前它不在我们的优先事项列表中,但它可能很快就会出现。
除了那里还提到了 Word2Vec Spark implementation,我不知道有任何其他实现。