Использование идей из HashEmbeddings с HashVectorizer от sklearn - PullRequest
0 голосов
/ 13 декабря 2018

Svenstrup et.и др.2017 предлагает интересный способ обработки коллизий хеш-функции в векторизаторах хэширования: используйте 2 разные функции хеширования и объединяйте их результаты перед моделированием.

Они утверждают, что комбинация нескольких хеш-функций приближается к одной хеш-функции сгораздо больший диапазон (см. раздел 4 статьи).

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

Как я могу сделать со sklearn?Нет возможности изменить используемую хэш-функцию, но, может быть, можно каким-то образом изменить векторизатор?

Или, может быть, я мог бы добиться этого с помощью SparseRandomProjection ?

1 Ответ

0 голосов
/ 14 декабря 2018

HashingVectorizer в scikit-learn уже включает механизм для уменьшения коллизий хешей с опцией alternate_sign=True.Это добавляет случайный знак во время суммирования токена, который улучшает сохранение расстояний в хешированном пространстве (подробнее см. scikit-learn # 7513 ).

Используя N хэш-функции иобъединяя выходные данные, можно увеличить как n_features, так и число ненулевых членов (nnz) в полученной разреженной матрице на N.Другими словами, каждый токен теперь будет представлен как N элементов.Это довольно напрасная память.Кроме того, поскольку время выполнения для разреженных вычислений в массиве напрямую зависит от nnz (и в меньшей степени от n_features), это окажет гораздо большее негативное влияние на производительность, чем только увеличение n_features.Я не уверен, что такой подход очень полезен на практике.

Если вы все же хотите реализовать такой векторизатор, ниже приведены несколько комментариев.

  • , поскольку реализовано FeatureHasherв Cython трудно изменить его функциональность по сравнению с Python без редактирования / повторной компиляции кода.
  • Написание быстрой реализации HashingVectorizer на чистом python может быть одним из способов сделать это.
  • в противном случае происходит несколько экспериментальное повторное внедрение HashingVectorizer в пакете text-vectorize .Поскольку он написан на Rust (с привязкой Python), другие хеш-функции легко доступны, и потенциально может быть добавлено .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...