www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home
Занимательная история, выдающиеся люди, малоизвестные факты, находки, открытия, фальсификации. Присоединяйся!

Интуитивно понятное руководство по пониманию встраивания GloVe

Дата публикации May 5, 2019

фотоДжелеке ВаноотегемнаUnsplash

TLDP; (слишком долго не платил? Не беспокойтесь, все равно вы получаете доступ к коду по следующей ссылке)

Перспективная реализация с Keras:[Вот]

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

Чтобы посетить мои предыдущие статьи в этой серии, используйте следующие буквы.

ВСD* E F G H I JКL* МNO P Q R S T U VWX Y Z

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

И не удивляйтесь, узнав, что идея использования глобальной статистики для получения семантических связей между словами уходит очень далеко. Вернуться к,скрытый семантический анализ(НУА). Это просто забавный факт. Давайте двигаться дальше.

Обновление на Word2vec

Какова основная идея Word2vec?

Вы должны знать слово по компании, которую оно хранит - Дж. Р. Ферт

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

Так что же отступает?

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

Например, возьмите предложение,

Кот сидел на коврике

Если вы используете Word2vec, он не будет собирать такую ​​информацию, как,

Является ли «the» особым контекстом слов «кошка» и «мат»?

или

это «просто»?

Это может быть неоптимальным, особенно в глазах теоретиков.


Enter, GloVe,

GloVe означает «Глобальные векторы». И, как упоминалось ранее, GloVe собирает как глобальную статистику, так и локальную статистику корпуса, чтобы придумать векторы слов. Но нужна ли нам как глобальная, так и локальная статистика?

Два лучше, чем один?

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

Введение в GloVe

Метод GloVe построен на важной идее,

Вы можете получить семантические отношения между словами из матрицы совместного использования.

Учитывая корпус, имеющийВслова, матрица совместного вхожденияИксбудетV x Vматрица, гдеяй ряд иJстолбецИкс,X_ijобозначает сколько раз словояпроизошло со словомJ, Примерная матрица совместного использования может выглядеть следующим образом.

Матрица совместного вхождения для предложения «кот сидел на коврике» с размером окна 1. Как вы, вероятно, заметили, это симметричная матрица.

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

Поведение P_ik / P_jk для разных слов (Источник [1])

Рассмотрим сущность

P_ik / P_jkгдеP_ik = X_ik / X_i

ВотP_ikобозначает вероятность увидеть словояа такжеКвместе, который вычисляется путем деления числа разяа такжеКпоявились вместе (X_ik) по общему числу раз словояпоявился в корпусе (X_i).

Вы можете видеть, что дано два слова, т.е.леда такжеСтимесли третье словоК(также называемый «пробным словом»),

  • очень похож на лед, но не имеет отношения к пару (например,К= Твердое вещество),P_ik / P_jkбудет очень высоким (> 1),
  • очень похоже на пар, но не имеет отношения к льду (например, К= Газовая),P_ik / P_jkбудет очень маленьким (<1),
  • связано или не связано ни с одним словом, тоP_ik / P_jkбудет близко к 1

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

От метрики к векторам слов

Если вам понравилось, пристегнитесь. Это собирается стать грубым! Не очень очевидно, как мы можем прийти к алгоритму векторного слова, потому что,

  • У нас нет уравнения, напримерF (i, j, k) = P_ik / P_jk, но просто выражение.
  • Векторы слова являются многомерными векторами, однакоP_ik / P_jkэто скаляр Так что есть несоответствие размеров.
  • Здесь участвуют три объекта (я, дж, а такжеК). Но вычислительная функция потерь с тремя элементами может стать сложной, и ее нужно сократить до двух.

Ответ на эти три вопроса - основной вклад GloVe. Теперь давайте пройдемся по GloVe шаг за шагом и посмотрим, как ответ на эти три вопроса дает нам алгоритм векторного слова.

Я использую следующие обозначения, которые немного отличаются от бумаги из-за трудностей рендеринга Latex на Medium.

  • вес,U- Два отдельных встраиваемых слоя
  • ш *- транспонировать W
  • Икс- матрица совместного появления
  • м.т.а такжебушель- смещения w и u соответственно

Давайте примем уравнение

Ответить на первый вопрос легко. Просто прими это. Предположим, что есть функция F, которая принимает векторы словя,Jа такжеКкоторый выводит интересующее нас соотношение.

F (w_i, w_j, u_k) = P_ik / P_jk

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

Теперь вернемся к функции. Векторы слова являются линейными системами. Например, вы можете выполнить арифметику в пространстве вложения, например,

w_ {король} - w_ {мужчина} + w_ {женщина} = w_ {королева}

Поэтому давайте изменим приведенное выше уравнение на следующее:

F (w_i - w_j, u_k) = P_ik / P_jk

Почемуw_i - w_jподойдет здесь? На самом деле, вы можете получить хорошие свойства, которые вы наблюдаетеP_ik / P_jkв пространстве вложения. Позвольте мне уточнить.

Поведение векторных расстояний до пробного слова w.r.t. w_i - w_j

Таким образом, вы можете видеть, как изменяется расстояние (пунктирная линия) при рассмотрении разных слов. И расстояние между двумя данными словамияа такжеКкоррелирует с обратной величинойР- {ик}, И почему это так? Это потому, что мы всегда вычисляли расстояния по вектору словаw_i - w_j(то есть красная линия). Так что неплохо начать сw_i - w_j.

Вектор к скаляру…

Решив одну проблему, мы переходим к следующей. Как мы делаем LHS скалярным? На это есть довольно прямой ответ. То есть ввести транспонирование и скалярное произведение между двумя сущностями следующим образом.

F ((w_i - w_j) *. U_k) = P_ik / P_jkили,

Если вы предполагаете слово вектор какdX1матрица,(w_i - w_j)* будет1XDв форме, которая дает скаляр при умножении наСоединенное Королевство,

Что может быть F?

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

F (w_i * u_k - w_j * u_k) = F (w_i * u_k) / F (w_j * u_k) = P_ik / P_jk

Другими словами, этот конкретный гомоморфизм гарантирует, что вычитаниеР (А-В)также может быть представлен как разделениеР (А) / Р (В)и получить тот же результат. И поэтому,

F (w_i * u_k) / F (w_j * u_k) = P_ik / P_jk

а также

F (w_i * u_k) = P_ik

Я потянул немного подлый на тебя ...

Окей, я был подлый. Просто потому, что F (A) / F (B) = G (A) / G (B), вы не можете сказать F (A) = G (A). Поскольку F (A) / F (B) = 2F (A) / 2F (B), это не означает F (A) = 2F (A). И не ясно (по крайней мере мне) из оригинальной статьи, почему это предполагается. Но позвольте мне дать вам некоторую интуицию, почему это было бы безопасным предположением. Если мы хотим правильно определить вышеуказанные отношения, было бы,

F (w_i * u_k) = c P_ikдля некоторой константыс

Но с этим вы также получитеF (w_j * u_k) = c P_jkдля любогоJ, Так что если сходство междуяа такжеКрасти нассходство междуJа такжеК(для любогоJ) также будет растис, Это означает (в некотором смысле), что все векторы слов будут увеличиваться / уменьшаться с коэффициентомс, который не принесет никакого вреда, поскольку относительная топография сохраняется.

Двигаемся дальше, если предположимF = ехруказанное свойство гомоморфизма выполняется Тогда давайте установим,

Exp (w_i * u_k) = P_ik = X_ik / X_i

а также

w_i * u_k = log (X_ik) - log (X_i)

Следующий,X_iне зависит отК, мы движемсяЖурнал (X_i)в LHS,

w_i * u_k + log (X_i) = log (X_ik)

Теперь, учитывая, что у нас еще нет предвзятости в уравнении, мы немного креативны иЖурнал (X_i)на языке нейронной сети мы получаем,

w_i * u_k + bw_i + bu_k = log (X_ik)

или,

w_i * u_k + bw_i + bu_k - log (X_ik) = 0

гдем.т.а такжебушельпредвзятость сети.

Определение стоимости

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

J (w_i, w_j) = (w_i * u_j + bw_i + bu_j - log (X_ij)) ²

Обратите внимание, что квадрат делает это среднеквадратичной функцией стоимости. Никакого вреда, причиненного оригинальным выводам. Также k был заменен на j.

Функция конечной стоимости

Но ваша работа на этом не останавливается, вам все равно придется исправлять важную теоретическую проблему. Подумайте, что будет, еслиX_ik= 0. Если вы начнете небольшой эксперимент с вышеуказанной функцией стоимости, вы увидите самые ненавистные 3 буквы для специалиста по ML, т.е.NaN, Потому что log (0) не определено. Простое решение было бы использоватьЖурнал (1 + X_ik)известный как сглаживание Лапласа. Но светила за бумагой GloVe предлагают более гладкий способ сделать это. То есть ввести весовую функцию.

J = f (X_ij) (w_i ^ T u_j + bw_i + bu_j - log (X_ij)) ²

гдеf (X_ij) = (x / x_ {max}) ^ aеслих <х_ {макс}еще0

Вывод

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

  • У нас нет уравнения, напримерF (i, j, k) = P_ik / P_jk, но просто выражение (т.е.P_ik / P_jk).
  • Векторы слова являются многомерными векторами, однакоP_ik / P_jkэто скаляр Так что есть несоответствие размеров.
  • Здесь участвуют три объекта (я, дж, а такжеК). Но вычислительная функция потерь с тремя элементами может стать сложной, и ее нужно сократить до двух.

Код для реализации GloVe с Keras предоставляется[Вот]

Ссылка:

[1] GloVe: глобальные векторы для представления слов (Оригинальная бумага)

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map