Jump to content

Хеширование функций

В машинном обучении хеширование признаков , также известное как трюк хеширования (по аналогии с трюком ядра ), представляет собой быстрый и экономичный способ векторизации признаков , т. е. превращения произвольных признаков в индексы в векторе или матрице. [1] [2] Он работает путем применения хеш-функции к объектам и использования их хеш-значений в качестве индексов напрямую (после операции по модулю), а не поиска индексов в ассоциативном массиве . Помимо использования для кодирования нечисловых значений, хеширование признаков также можно использовать для уменьшения размерности . [2]

Этот трюк часто приписывают Вайнбергеру и др. (2009), [2] но существует гораздо более раннее описание этого метода, опубликованное Джоном Муди в 1989 году. [1]

Мотивация

[ редактировать ]

Мотивирующий пример

[ редактировать ]

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

Однако алгоритмы машинного обучения обычно определяются в терминах числовых векторов. Таким образом, пакеты слов для набора документов рассматриваются как матрица терминов-документов, где каждая строка представляет собой отдельный документ, а каждый столбец представляет собой отдельный признак/слово; запись i , j в такой матрице фиксирует частоту (или вес) j -го термина словаря в документе i . (Альтернативное соглашение меняет местами строки и столбцы матрицы, но эта разница несущественна.) Обычно эти векторы чрезвычайно редки — согласно закону Ципфа .

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

  • Джон любит смотреть фильмы.
  • Мэри тоже любит кино.
  • Джон также любит футбол.

можно преобразовать, используя словарь

Срок Индекс
Джон 1
любит 2
к 3
смотреть 4
фильмы 5
Мэри 6
слишком 7
также 8
футбол 9

к матрице термин-документ

(Пунктуация была удалена, как это обычно бывает при классификации и кластеризации документов.)

Проблема этого процесса в том, что такие словари занимают большой объем памяти и увеличиваются в размерах по мере роста обучающего набора. [3] Напротив, если словарный запас остается фиксированным и не увеличивается с ростом обучающего набора, злоумышленник может попытаться изобрести новые слова или орфографические ошибки, которых нет в сохраненном словаре, чтобы обойти фильтр машинного обучения. Чтобы решить эту проблему, Yahoo! Исследователи попытались использовать хеширование функций для своих спам-фильтров. [4]

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

Математическая мотивация

[ редактировать ]

Математически токен — это элемент в конечном (или счетно бесконечном) множестве . Предположим, нам нужно обработать только конечный корпус, тогда мы можем поместить все токены, появляющиеся в корпусе, в , это означает, что конечно. Однако предположим, что мы хотим обработать все возможные слова, состоящие из английских букв, тогда счетно бесконечно.

Большинство нейронных сетей могут работать только с реальными векторными входными данными, поэтому нам необходимо создать «словарную» функцию. .

Когда конечен, имеет размер , то мы можем использовать горячее кодирование , чтобы сопоставить его с . Сначала произвольно перечислим , затем определите . Другими словами, мы присваиваем уникальный индекс каждому токену, затем сопоставьте токен с индексом к единичному базисному вектору .

Горячее кодирование легко интерпретировать, но оно требует поддержания произвольного перечисления . Учитывая токен , чтобы вычислить , нам необходимо узнать индекс токена . Таким образом, для реализации эффективно, нам нужна быстро вычисляемая биекция , тогда мы имеем .

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

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

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

Алгоритмы

[ редактировать ]

Хеширование функций (Вайнбергер и др., 2009 г.)

[ редактировать ]

Базовый алгоритм хеширования признаков, представленный в (Weinberger et al. 2009). [2] определяется следующим образом.

Во-первых, указываются две хэш-функции: хэш ядра и знак хеша . Далее определяется функция хеширования признаков: Наконец, расширите эту функцию хеширования на строки токенов с помощью где — это набор всех конечных строк, состоящих из токенов в .

Эквивалентно,

Геометрические свойства

[ редактировать ]

Мы хотим сказать кое-что о геометрическом свойстве , но , сам по себе является просто набором токенов, мы не можем навязать ему геометрическую структуру, кроме дискретной топологии, которая порождается дискретной метрикой . Чтобы было красивее, поднимем его на , и поднимите от к по линейному расширению: Там бесконечная сумма, с которой надо разобраться сразу. По сути, есть только два способа обработки бесконечностей. Можно ввести метрику, а затем принять ее завершение , чтобы разрешить правильные бесконечные суммы, или можно потребовать, чтобы ничто на самом деле не было бесконечным, а только потенциально . Здесь мы идем по пути потенциальной бесконечности, ограничивая содержать только векторы с конечной поддержкой : , только конечное число записей ненулевые.

Определите внутренний продукт на очевидным образом: В качестве примечания, если бесконечно, то внутреннее пространство произведения не является полным . Его завершение приведет нас к гильбертовому пространству , которое допускает корректные бесконечные суммы.


Теперь у нас есть пространство внутреннего продукта с достаточной структурой для описания геометрии функции хеширования признаков. .

Во-первых, мы можем понять, почему называется « хешем ядра »: он позволяет нам определить ядро к На языке «трюка ядра» это ядро, созданное «картой функций» Обратите внимание, что это не та карта объектов, которую мы использовали. . На самом деле мы использовали другое ядро , определяемый Преимущество увеличения хеша ядра с двоичным хешем является следующая теорема, которая утверждает, что является изометрией «в среднем».

Теорема (интуитивно сформулированная) Если двоичный хэш является несмещенным (это означает, что он принимает значение с равной вероятностью), тогда представляет собой изометрию в ожидании:

Доказательство

По линейности ожидания, Сейчас, , поскольку мы предположили является беспристрастным. Итак, мы продолжаем


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

Это хорошая интуитивная картина, хотя и не строгая. Строгое утверждение и доказательство см. [2]

Реализация псевдокода

[ редактировать ]

Вместо ведения словаря векторизатор объектов, использующий прием хеширования, может построить вектор заранее определенной длины, применяя хэш-функцию h к объектам (например, словам), затем используя хеш-значения непосредственно в качестве индексов объектов и обновляя их. результирующий вектор по этим индексам. Здесь мы предполагаем, что признак на самом деле означает вектор признаков.

 function hashing_vectorizer(features : array of string, N : integer):
     x := new vector[N]
     for f in features:
         h := hash(f)
         x[h mod N] += 1
     return x

Таким образом, если наш вектор признаков ["кошка","собака","кошка"] и хеш-функция если это «кошка» и если это «собака». Возьмем размерность выходного вектора признаков ( N ) равно 4. Затем выведите x будет [0,2,1,0]. Было предложено использовать вторую однобитовую выходную хэш-функцию ξ для определения знака значения обновления, чтобы противостоять эффекту хеш-коллизий . [2] Если используется такая хэш-функция, алгоритм становится

 function hashing_vectorizer(features : array of string, N : integer):
     x := new vector[N]
     for f in features:
         h := hash(f)
         idx := h mod N
         if ξ(f) == 1:
             x[idx] += 1
         else:
             x[idx] -= 1
     return x

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

Расширения и вариации

[ редактировать ]

Хеширование изученных функций

[ редактировать ]

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

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

Чтобы справиться с этим, можно обучить контролируемые функции хеширования, которые позволяют избежать сопоставления общих токенов с одними и теми же векторами признаков. [5]

Применение и практическое применение

[ редактировать ]

Ганчев и Дредзе показали, что в приложениях классификации текста со случайными хеш-функциями и несколькими десятками тысяч столбцов в выходных векторах хеширование признаков не должно оказывать отрицательного влияния на производительность классификации, даже без знаковой хеш-функции. [3]

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

Чен и др. (2015) объединили идею хеширования признаков и разреженной матрицы для создания «виртуальных матриц»: больших матриц с небольшими требованиями к хранению. Идея состоит в том, чтобы рассматривать матрицу как словарь, с ключами в и значения в . Затем, как обычно в хешированных словарях, можно использовать хеш-функцию и, таким образом, представить матрицу в виде вектора в , независимо от того, насколько большой является. Используя виртуальные матрицы, они создали HashedNets — большие нейронные сети, занимающие лишь небольшой объем памяти. [6]

Реализации

[ редактировать ]

Реализации трюка хеширования присутствуют в:

См. также

[ редактировать ]
  1. ^ Перейти обратно: а б Муди, Джон (1989). «Быстрое обучение в иерархиях с несколькими разрешениями» (PDF) . Достижения в области нейронных систем обработки информации .
  2. ^ Перейти обратно: а б с д и ж г Килиан Вайнбергер; Анирбан Дасгупта; Джон Лэнгфорд; Алекс Смола; Джош Аттенберг (2009). Хеширование функций для крупномасштабного многозадачного обучения (PDF) . Учеб. ИКМЛ.
  3. ^ Перейти обратно: а б К. Ганчев; М. Дредзе (2008). Маленькие статистические модели путем случайного смешивания признаков (PDF) . Учеб. Семинар ACL08 HLT по мобильной языковой обработке.
  4. ^ Джош Аттенберг; Килиан Вайнбергер; Алекс Смола; Анирбан Дасгупта; Мартин Зинкевич (2009). «Совместная фильтрация спама с помощью хэш-трюка» . Вирусный бюллетень .
  5. ^ Бай, Б.; Уэстон Дж.; Гранжер Д.; Коллобер Р.; Марч К.; Ци Ю.; Часовня О.; Вайнбергер К. (2009). Контролируемое семантическое индексирование (PDF) . ЦИКМ. стр. 100-1 187–196.
  6. ^ Чен, Вэньлинь; Уилсон, Джеймс; Тайри, Стивен; Вайнбергер, Килиан; Чен, Исинь (01 июня 2015 г.). «Сжатие нейронных сетей с помощью хэш-трюка» . Международная конференция по машинному обучению . ПМЛР: 2285–2294. arXiv : 1504.04788 .
  7. ^ Оуэн, Шон; Анил, Робин; Даннинг, Тед; Фридман, Эллен (2012). Махут в действии Мэннинг. стр. 100-1 261–265.
  8. ^ "gensim: corpora.hashdictionary – создать сопоставления слов <->id" . Радимрехурек.com . Проверено 13 февраля 2014 г.
  9. ^ «4.1. Извлечение функций — документация scikit-learn 0.14» . Scikit-learn.org . Проверено 13 февраля 2014 г.
  10. ^ «sofia-ml — набор быстрых инкрементных алгоритмов для машинного обучения. Включает методы обучения моделей классификации и ранжирования с использованием Pegasos SVM, SGD-SVM, ROMMA, пассивно-агрессивного перцептрона, персептрона с запасами и логистической регрессии» . Проверено 13 февраля 2014 г.
  11. ^ «Хеширование ТФ» . Проверено 4 сентября 2015 г. Сопоставляет последовательность терминов с их частотами, используя прием хеширования.
  12. ^ «FeatureHashing: создает матрицу модели посредством хеширования функций с помощью интерфейса формулы» . 10 января 2024 г.
  13. ^ «tf.keras.preprocessing.text.hashing_trick — TensorFlow Core v2.0.1» . Проверено 29 апреля 2020 г. Преобразует текст в последовательность индексов в хеш-пространстве фиксированного размера.
  14. ^ «dask_ml.feature_extraction.text.HashingVectorizer — документация dask-ml 2021.11.17» . ml.dask.org . Проверено 22 ноября 2021 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: a273fc3ebf47e32b2b6d17e51977a5b3__1715613960
URL1:https://arc.ask3.ru/arc/aa/a2/b3/a273fc3ebf47e32b2b6d17e51977a5b3.html
Заголовок, (Title) документа по адресу, URL1:
Feature hashing - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)