nlp - 有没有办法并行使用 fastText 的单词表示过程?
问题描述
我是fastText的新手,这是一个用于高效学习单词表示和句子分类的库。我正在尝试为大量数据集生成词向量。但在单个过程中,它需要很长时间。
所以让我清楚地提出我的问题:
- 是否有任何选项可用于加速单个 fastText 进程?
- 有没有办法在并行 fastText 进程中生成词向量?
- 是否有任何其他可用的实现或解决方法可以解决该问题,因为我阅读了 caffe2 implementation is available,但我找不到它。
谢谢
解决方案
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 机器上,请尝试这样做。
推荐阅读
- java - 在方法中返回一个文档
- string - 在 COBOL 中不使用 reverse 函数反转字符串
- c - 在字符串中分别打印偶数奇数字符
- python-3.x - 用中间空格格式化“键:值”字符串
- python - 语言翻译
- python - ./manage.py 使用 https 运行服务器
- javascript - for循环中的promise问题
- c# - 使用 Unity C# 和 PHP(Mysql 作为数据库)的动态争夺游戏
- android - Android Checkbox setOnCheckedChangeListener 不起作用
- java - 我如何制作像 DateField 这样的 JtextField,其中永久添加了 Slash(/)