Я ищу реализацию векторизации count n-грамм, которая более эффективна, чем CountVectorizer
scikit-learn. Я назвал вызов CountVectorizer.transform()
огромным узким местом в немного программного обеспечения и может значительно увеличить пропускную способность модели, если мы сможем сделать эту часть трубопровода более эффективной. Время пригонки не важно, мы занимаемся только временем преобразования. Конечным выходом должен быть вектор scipy.sparse
. Если у кого-то есть какие-либо потенциальные альтернативы, это было бы очень признательно.Быстрое выполнение векторизации счетчика
ответ
Вы попробовали HashingVectorizer
? Это немного быстрее (до 2X, если я правильно помню). Следующим шагом будет профилировать код, отделить функции CountVectorizer
или HashingVectorizer
, которые вы не используете и не перезаписываете оставшуюся часть в оптимизированном коде Cython (после профилирования снова).
Функция голосовой обработки Vowpal Wabbit, использующая хеширующий трюк по умолчанию, может дать вам намек на то, что можно достичь.
Спасибо за ответ, Оливье. Я видел незначительные улучшения с HashingVectorizer (около 30% ускорения). Нам не нужно отображать исходный словарь, поэтому мы будем использовать HashingVectorizer для продвижения вперед. Я также определенно попробую cythonization. Профилирование не показывает явного узкого места в вызове 'transform', поэтому я предполагаю, что cythonization станет единственной реальной возможностью для ускорения. –
Кроме того, мы обязательно отправим PR, если найдем какую-либо серьезную возможность для повышения эффективности без снятия функциональности. –
@MadisonMay, так что же конец истории, если это не секрет? :) – Anton
- 1. Быстрое выполнение для селектора
- 2. C++ более быстрое выполнение
- 3. Быстрое выполнение функций
- 4. Быстрое выполнение функции Javascript
- 5. Быстрое выполнение параметров inout
- 6. Выполнение счетчика FPS Android
- 7. Выполнение счетчика слов
- 8. PHP: более быстрое выполнение cURL
- 9. Быстрое выполнение segue после googleSignin
- 10. Быстрое выполнение тестов модулей для тестирования мутаций
- 11. unbadging приложение проблемы значок (быстрое) выполнение
- 12. Слишком быстрое выполнение обратного вызова Open Open
- 13. Быстрое выполнение единого теста интеграции в Grails
- 14. Быстрое выполнение кода перед показом обновлений
- 15. Быстрое выполнение функции карты памяти Clojure
- 16. Быстрое выполнение теста в playframework поддельной приложение
- 17. Выполнение алгебры с массивом MxNx3 с использованием векторизации в python?
- 18. Выполнение строки выполнения с счетчика javascript
- 19. Векторы векторизации
- 20. Условный векторизации
- 21. векторизации numpy.random.multinomial
- 22. Matlab векторизации
- 23. Векторизации роста
- 24. Быстрое быстрое и быстрое исправление/быстрый двигатель
- 25. без векторизации, векторизованный, matlab
- 26. cellarray векторизации умножения матрицы
- 27. векторизации конкретного кода MatLab
- 28. OpenMP paralelization ингибирует векторизации
- 29. векторизации с различными colindices
- 30. векторизации Matlab/октава цикл
А как насчет того, чтобы выполнить подсчет более [mapreduce] (https://github.com/michaelfairley/mincemeatpy)? После этого вы можете преобразовать в разреженную матрицу. – szxk
У нас уже есть параллелизм данных (разные процессы связаны с разными кусками данных), поэтому мы, вероятно, не увидим увеличения пропускной способности от использования вызовов mapreduce. Спасибо за рекомендацию. –