Есть ли способ использовать процесс представления слов fastText параллельно? - PullRequest
0 голосов
/ 01 мая 2018

Я новичок в fastText , библиотеке для эффективного изучения представлений слов и классификации предложений. Я пытаюсь генерировать слово-вектор для огромного набора данных . Но в одном процессе это занимает значительно больше времени.

Итак, позвольте мне четко сформулировать мои вопросы:

  • Есть ли варианты, которые я могу использовать для ускорения одного процесса fastText?
  • Есть ли способ генерировать слово-вектор в параллельных процессах fastText?
  • Существуют ли другие доступные реализации или обходные пути, которые могут решить эту проблему, как я прочитал Доступна реализация caffe2 , но я не могу ее найти.

Спасибо

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Исходный выпуск FastText от Facebook включает параметр командной строки thread, по умолчанию 12, который контролирует количество рабочих потоков, которые будут выполнять параллельное обучение (на одной машине). Если у вас есть больше процессорных ядер и вы еще не пытались увеличить его, попробуйте это.

Реализация gensim (как gensim.models.fasttext.FastText) включает параметр инициализации workers, который управляет количеством рабочих потоков. Если вы еще не пытались увеличить его, вплоть до количества ядер, это может помочь. Однако из-за дополнительных узких мест многопоточности в реализации Python, если у вас много ядер (особенно 16+), вы можете найти максимальную пропускную способность при меньшем количестве рабочих мест, чем у ядер - часто что-то в диапазоне 4-12. (Вы должны экспериментировать и следить за достигнутыми показателями с помощью регистрации, чтобы найти оптимальное значение, и все ядра не будут увеличены.)

Вы получите значительную многопоточность в gensim только в том случае, если ваша установка сможет использовать ее оптимизированные для Cython подпрограммы. Если вы смотрите журнал при установке gensim через pip или аналогичный, в случае сбоя должна появиться явная ошибка. Или, если вы просматриваете логи / вывод при загрузке / использовании классов gensim, обычно будет предупреждение, если используются более медленные неоптимизированные версии.

Наконец, часто в способах, которыми люди используют gensim, узкое место может заключаться в их корпусе итератора или ввода-вывода, а не в параллелизме. Чтобы минимизировать это замедление:

  • Проверьте, насколько быстро ваш корпус может перебирать все примеры отдельно от передачи его классу gensim.
  • Избегайте выполнения каких-либо операций выбора базы данных или сложной / регулярной обработки / токенизации в итераторе - сделайте это один раз и сохраните полученный в результате простой для чтения токен токен где-нибудь.
  • Если корпус поступает с сетевого тома, проверьте, помогает ли потоковая передача с локального тома. Если вы идете с вращающегося HD, попробуйте SSD.
  • Если корпус можно разместить в ОЗУ, возможно, на специальной машине с гигантским ОЗУ, попробуйте это.
0 голосов
/ 01 мая 2018

Я понимаю ваши вопросы, которые вам нравятся, чтобы распространять fastText и проводить параллельное обучение.

Как уже упоминалось в Выпуск № 144

... будущая функция, которую мы могли бы рассмотреть для реализации. На данный момент его нет в нашем списке приоритетов, но это может произойти очень скоро.

За исключением упомянутой реализации Word2Vec Spark , я не знаю никаких других реализаций.

...