2014-11-12 3 views
2

Я ищу реализацию векторизации count n-грамм, которая более эффективна, чем CountVectorizer scikit-learn. Я назвал вызов CountVectorizer.transform() огромным узким местом в немного программного обеспечения и может значительно увеличить пропускную способность модели, если мы сможем сделать эту часть трубопровода более эффективной. Время пригонки не важно, мы занимаемся только временем преобразования. Конечным выходом должен быть вектор scipy.sparse. Если у кого-то есть какие-либо потенциальные альтернативы, это было бы очень признательно.Быстрое выполнение векторизации счетчика

+0

А как насчет того, чтобы выполнить подсчет более [mapreduce] (https://github.com/michaelfairley/mincemeatpy)? После этого вы можете преобразовать в разреженную матрицу. – szxk

+0

У нас уже есть параллелизм данных (разные процессы связаны с разными кусками данных), поэтому мы, вероятно, не увидим увеличения пропускной способности от использования вызовов mapreduce. Спасибо за рекомендацию. –

ответ

3

Вы попробовали HashingVectorizer? Это немного быстрее (до 2X, если я правильно помню). Следующим шагом будет профилировать код, отделить функции CountVectorizer или HashingVectorizer, которые вы не используете и не перезаписываете оставшуюся часть в оптимизированном коде Cython (после профилирования снова).

Функция голосовой обработки Vowpal Wabbit, использующая хеширующий трюк по умолчанию, может дать вам намек на то, что можно достичь.

+0

Спасибо за ответ, Оливье. Я видел незначительные улучшения с HashingVectorizer (около 30% ускорения). Нам не нужно отображать исходный словарь, поэтому мы будем использовать HashingVectorizer для продвижения вперед. Я также определенно попробую cythonization. Профилирование не показывает явного узкого места в вызове 'transform', поэтому я предполагаю, что cythonization станет единственной реальной возможностью для ускорения. –

+3

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

+0

@MadisonMay, так что же конец истории, если это не секрет? :) – Anton

Смежные вопросы