Векторные представления слов с применением метода глобальных векторов

Рекомендательные системы и введение в матричную факторизацию

Здравствуйте и вновь добро пожаловать на занятия по теме «Обработка естественного языка: глубокое обучение на языке Python, часть 6».

В этой статье мы вкратце рассмотрим рекомендательные системы и матричную факторизацию. Когда мы перейдём к модели глобальных векторов, сразу станет ясно, почему вначале мы рассматриваем именно их.

Итак, что же такое рекомендательные системы? Предположим, вы владелец Amazon и хотите спрогнозировать, насколько потребителю понравится товар. Или вы владелец Netflix и хотите выяснить, насколько пользователю понравится фильм.

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

Ночто, если мы хотим получить информацию только из пользовательских рейтинговфильмов? Это возможно? Ответ: да, возможно. И как такое сделать? Ответ тесносвязан с методом главных компонент и сингулярным разложением. Не забывайте, чтоименно мы стараемся сделать – находить похожие слова, выясняя, имеют лидокументы, в которых эти слова появляются, какие-то общие закономерности. Вэтом случае у нас есть ряд слов по строкам и ряд документов по столбцам. Еслидокументы или, другими словами, некоторые строки выглядят схоже с другимистроками, то слова, которые представляют эти строки, тоже схожи.

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

Вчём проблема с такой формулировкой?

Ну,во-первых, если бы мы уже имели все эти рейтинги фильмов, то нечего было бы ирекомендовать: все пользователи просмотрели все фильмы, прибыль получать не ского. Разумеется, как мы знаем, это нереально. На самом деле всё обстоитсовершенно наоборот: большинство пользователей не видели большинства фильмов.Какую проблему это представляет? Ту, что большинство элементов нашей матрицы содержатпропуски в значениях. В глубоком обучении мы не часто работаем с пропущеннымизначениями, поскольку это и случается нечасто. Изображения, звуковые файлы итекст обычно не содержат пропусков. По поводу работы с пропусками в данныхможно создать целый курс, но здесь мы не будем на этом задерживаться. Впрочем,мы можем использовать данное обстоятельство для решения другой задачи,связанной с обработкой естественного языка, в частности, с методом глобальныхвекторов. На самом деле пропуски в значениях – это хорошо, поскольку этозначит, что мы можем рекомендовать пользователям фильмы, которых они ещё невидели, в надежде получить прибыль для нашей компании.

Нокак же нам решить эту проблему? С помощью матричной факторизации. Работает онаследующим образом. Мы предполагаем, что вся эта большая матрицапользовательских рейтингов фильмов существует хотя бы в концепции, просто мы незнаем всех значений её элементов. Но мы можем смоделировать эту большую матрицуA, представив еёв виде произведения двух меньших матриц W и U. Меньшую размерность этих двух матриц назовёмрангом и обозначим через K. Умножая их, мы получаем обратно полноразмернуюматрицу. Всё это уже должно быть вам знакомо, поскольку это именно то, с чем мысталкивались при рассмотрении биграммной версии word2vec.

Вцелом наша полноразмерная матрица A имеет размерность NxM, а общееколичество параметров в факторизованной модели равно NxK + MxK. Еслипараметров будет слишком много, то мы столкнёмся с переобученностью, а еслислишком мало – нам не удастся добиться хорошей точности, поэтому нужноправильно подобрать величину K.

МатрицаW называетсяматрицей пользователей, а матрица U – матрицей фильмов. Каждая строка W являетсявектором, представляющим конкретного пользователя, а каждая строка U – вектором,представляющим конкретный фильм.

Незабывайте, что любая модель выполняет две функции – обучение и прогнозирование.Как же прогнозировать в данном случае? Предположим, мы хотим узнать, какпользователь iоценил фильм j.Это элемент A(i,j) нашей матрицыпользовательских рейтингов фильмов, а в терминах матриц W и U – этотранспонированное W(i), умноженное на U(j), то естьскалярное произведение между W(i) и U(j):

Тутнадо быть острожным. Если мы определим U как матрицу размерности MxK, то нам нужна будет j-я строка U, и тогда A = WUT. Но еслиопределить Uкак матрицу размерности KxM, то A = WU, а нам нужен будет j-й столбец U.

Эточто касается прогнозирования. А что с обучением? Что касается обучения, то эторегрессионная задача, так что нам понадобится квадрат ошибок. Иногда A рассматриваетсякак матрица вероятностей, тогда можно использовать и расстояниеКульбака-Лейблера, но мы будем пользоваться квадратом ошибок. Важно понять, чтоквадрат ошибок вычислить сложно, поскольку учесть ошибку мы можем только длясуществующих значений A, а для всех остальных значений мы не знаем,насколько они далеки от целевой переменной. Остаётся надеяться, что A заполнено вдостаточной мере, чтобы можно было найти значимые закономерности. Наша целеваяфункция имеет следующий вид:

Тутнадо быть острожным. Если мы определим U как матрицу размерности MxK, то нам нужна будет j-я строка U, и тогда A = WUT. Но еслиопределить Uкак матрицу размерности KxM, то A = WU, а нам нужен будет j-й столбец U.

Эточто касается прогнозирования. А что с обучением? Что касается обучения, то эторегрессионная задача, так что нам понадобится квадрат ошибок. Иногда A рассматриваетсякак матрица вероятностей, тогда можно использовать и расстояниеКульбака-Лейблера, но мы будем пользоваться квадратом ошибок. Важно понять, чтоквадрат ошибок вычислить сложно, поскольку учесть ошибку мы можем только длясуществующих значений A, а для всех остальных значений мы не знаем,насколько они далеки от целевой переменной. Остаётся надеяться, что A заполнено вдостаточной мере, чтобы можно было найти значимые закономерности. Наша целеваяфункция имеет следующий вид:

Онаопределена для набора действительно существующих рейтингов Ω.

Чтотеперь? Конечно же, следующий этап – взять производную и приравнять её к нулю.Как и в случае глубокого обучения, мы берём производную относительно каждойматрицы:

Тутвы должны осознать любопытность ситуации: впервые с момента обсуждения линейнойрегрессии мы в состоянии найти решение для весовых коэффициентов ваналитическом виде. Но вы должны быть осторожны с суммами. В частности, мысуммируем только те значения, для которых определены A(i,j). Попробуйте сами, но помните, что именнонужно суммировать. Ωi означает наборвсех фильмов j,которым дал рейтинг пользователь i. Ωj означает наборвсех пользователей i, кто дал рейтинг фильму j.

Тутесть сложность, где нужно взять обратную величину от скалярного произведения,умноженного на вектор. Удостоверьтесь для себя, что здесь всё правильно:

Тутвы должны осознать любопытность ситуации: впервые с момента обсуждения линейнойрегрессии мы в состоянии найти решение для весовых коэффициентов ваналитическом виде. Но вы должны быть осторожны с суммами. В частности, мысуммируем только те значения, для которых определены A(i,j). Попробуйте сами, но помните, что именнонужно суммировать. Ωi означает наборвсех фильмов j,которым дал рейтинг пользователь i. Ωj означает наборвсех пользователей i, кто дал рейтинг фильму j.

Тутесть сложность, где нужно взять обратную величину от скалярного произведения,умноженного на вектор. Удостоверьтесь для себя, что здесь всё правильно:

Нотут возникает другое препятствие. Решение этих двух уравнений даёт намвыражение для wчерез uи выражение для uчерез w,но не даёт возможности для их нахождения одновременно. Что мы делаем вместо этого?Вместо этого мы делаем цикл по количеству эпох и чередуем обновление w и обновление u. Это выходит зарамки этого курса, но существует математическое доказательство того, чтофункции затрат будут уменьшаться при каждом обновлении. С течением времени выпопадёте в локальный, но не глобальный минимум. Такое чередование – это несовсем градиентный спуск и имеет собственное название – чередующиеся наименьшиеквадраты. Это больше похоже на алгоритм максимизации ожиданий, нежели наградиентный спуск, в том плане, что для получения целевой функции мы обновляемодин параметр, считая второй константой, а затем обновляем второй, считаяконстантой первый. Это можно сравнить с методом k-средних и гауссовыми смесями распределений, которыеизучались в моём первом курсе по обучению без учителя.

Ещёодно небольшое замечание. На самом деле для этой задачи вы можете использоватьградиентный спуск, он полностью актуален. Но, как правило, он потребует большеэтапов для достижения минимума, нежели чередование наименьших квадратов. Впримере кода мы сделаем три разных версии – в первой воспользуемся обычнымградиентным спуском при помощи Numpy, во второй –воспользуемся возможностями автоматического вычисления градиента Theano, а в третьей – используем чередующиеся наименьшиеквадраты.

Теперь,имея основу, мы можем добавить в модель детали. Одна из них – свободные члены.При матричной факторизации у нас обычно не один свободный член, а два или три:

Первыедва – это свободные члены пользователей и фильмов. Для каждого пользователя икаждого фильма есть один скалярный свободный член, поэтому они имеютразмерность Nи Mсоответственно. Как их интерпретировать? Их можно рассматривать как смещение.Так, к примеру, если есть парень, который ставит всем фильмам высокий рейтинг,то у него положительное смещение. А если есть другой парень, который любиттроллить и ставить низкие оценки фильмам, то у него будет отрицательноесмещение. Или если вы возьмёте фильм вроде «Аватара» Джеймса Камерона, то унего будет положительное смещение, поскольку большинству людей он нравитсянезависимо от их индивидуальных предпочтений. С другой стороны, если вывозьмёте фильм вроде «Аватар: Последний защитник», то он будет иметьотрицательное смещение, поскольку его никто не любит. Я всегда люблю добавлятьи третий свободный член μ, которыйявляется глобальным средним значением матрицы A, поскольку это даёт эффективную центровку в районенуля.

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

Итак,это всё? Нет, ещё не всё. Нужно добавить ещё кое-что – регуляризацию. Онанужна, чтобы не сорваться в бесконечность и предотвратить переобученность. Какправило, она заключается в добавлении нормы Фробениуса в функцию затрат сгиперпараметром для регулирования её влияния на окончательное значение функциизатрат:

Опятьже, сравнительно просто найти производные, приравнять их к нулю и найтиобновления параметров в аналитическом виде. Я покажу ответ, но, как всегда, предлагаюсделать всё самостоятельно, чтобы убедиться, что это в ваших силах:

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

GloVe – метод глобальных векторов для представления слов

Теперь мы обсудим альтернативу word2vec в создании векторных представлений слов, которая называется методом глобальных векторов, или GloVe.

Вы увидите, что с помощью GloVe мы в основном сделаем некоторую предварительную работу, после чего наша задача превратится в задачу матричной факторизации, которую мы уже знаем как решать. Как и в случае с word2vec, мы включим контекст, в частности, мы не будем создавать терм-документную матрицу, как делали это во введении в обработку естественных языков, а матрицу термин-термин (term-term). В ней элемент X(i,j) больше, если слово i чаще возникает в контексте слова j, и меньше, если i встречается в контексте j реже. Что касается метода глобальных векторов, то он определяет важные детали построения матрицы X. К обсуждению этого и перейдём.

Во-первых,введём контекстное расстояние. Если слово находится рядом с другим словом, тобудем считать его равным 1. Если слова контекстно зависимы, но разделены междусобой одним словом, то расстояние равно 1/2. Если же эти слова разделены двумясловами – то 1/3 и так далее.

Во-вторых,не забывайте, что слова часто имеют распределение с длинной асимптотическойчастью («хвостом»). Это значит, что у большинства элементов матрицы будетнулевое значение. Их будет множество. Это даст нам очень разрежённую матрицу,подобно той, которая была у нас в рекомендательной системе. Но если в случаерекомендательной системы у нас были пропущенные значения, то эти – непропущенные. Они просто равны нулю. Тем не менее в обоих случаях матрицы можноотнести к разрежённым. Там же, где значения ненулевые, они будут очень большими– сотни, тысячи или миллионы, в зависимости от имеющего количества документов вкорпусе. Обычный метод уменьшения масштаба, когда значения растут экcпоненциально – взять логарифм. Мы так и сделаем. Номы не можем взять логарифм нуля, поэтому добавим единицу в каждый элементматрицы, а затем уже будем брать логарифм. Это и будет наша целевая матрица.

Наданном этапе мы уже можем построить функцию затрат, но пока что делать этого небудем. Добавим ещё одну вещь, которая, как показали исследования, хорошо себяпроявляет. Мы взвесим каждый элемент (i,j) на значение егозначение в матрице X. Если значение X достаточно велико, то весовому коэффициентуприсвоим значение 1; если же оно мало, то присвоим ему весовой коэффициент, меньший1. В оригинальной статье для этого использовалась формула

где Xmax = 100, α = 0,75.

Целеваяфункция имеет вид

где Xmax = 100, α = 0,75.

Целеваяфункция имеет вид

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

Любопытноесвойство метода глобальных векторов заключается в том, что время на обучение,затрачиваемое на подгонку параметров, не зависит от количества имеющихсяучебных данных, поскольку мы всегда приходим к матрице размерности VxV. Это хорошо,поскольку если позже мы сделаем ошибку в коде, нам не придётся вновьпроделывать всю работу по созданию X, а простосохранить её и повторно использовать.

Авот и уравнения для обновления параметров модели, чтобы вы могли проверить своёрешение. Это – для u и w:

Понравилась статья? Поделить с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: