Встраивания с Word2Vec в контекстах, не связанных с НЛП - подробности

Изучите детали создания встраиваемых элементов в бизнес-контексте с помощью моделей на основе Word2Vec.

Этот документ требует знакомства с моделями классов Word2Vec [1,2,3] и литературой по глубокому обучению.

В этом документе мы рассмотрим детали создания векторов внедрения с помощью класса моделей Word2Vec в бизнес-контекстах, не связанных с НЛП. Мы будем работать над набором данных Instacart [4,31], чтобы создавать вложения продуктов, оценивать архитектуры / параметры модели и использовать сгенерированные вложения для прогнозов сходства / взаимодополняемости товаров / корзин.

Пример кода [31] доступен в Gensim.

Почему Word2Vec?

Это вычислительная эффективность, масштабируемость и архитектура «SkipGram с отрицательной выборкой» (SGNS) [2], которые делают его особенным. Когда вы также визуализируете SGNS как модель с двумя кодировщиками [5], легкость расширения входного слоя делает его еще более особенным.

Глубокое понимание архитектуры и параметров SGNS является основополагающим для;

  • оценка создания встраивания в бизнес-контексте [6]
  • использование этих вложений в последующих моделях / задачах [12,13]
  • оценка других моделей внедрения (Node2Vec, Graph Neural Networks, Transformers, FastText, Bert…).

Зачем создавать вложения с помощью Word2Vec?

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

Вы хотите, чтобы ваши вложения действительно отражали цель / бизнес-функцию, которая существует в вашем наборе данных (например, совместная фильтрация). Для этого вам нужно, чтобы ваши встраиваемые параметры в вашу модель исключительно участвовали в вычислении выходных данных модели, без дополнительных слоев или параметров. В модели SGNS единственными параметрами являются параметры внедрения, а выходные данные модели - это просто скалярное произведение параметров внедрения Target (In) и Context (Out). Таким образом, ваша целевая функция представлена ​​исключительно этими параметрами внедрения. Это оптимальный способ внедрить семантику целевой функции в параметры вектора внедрения; таким образом, вы можете эффективно использовать / оценивать вложения как есть или использовать их в качестве входных данных для других последующих моделей.

Напротив, в модели с дополнительными входными параметрами или слоями над слоями внедрения ваша целевая функция представлена ​​вместе как параметрами внедрения, так и другими параметрами в вашей модели. Таким образом, оценка в этом случае только параметров внедрения (например, подобия в векторном пространстве внедрения) будет неоптимальным представлением вашей целевой функции.

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

В качестве дополнительного примечания; в отличие от вышеупомянутых архитектур, для некоторых бизнес-случаев вы можете захотеть, чтобы ваши вложения отражали несколько задач (например, вероятность щелчка и вероятность лайка). Если задачи связаны, вы можете добиться лучших обобщений, создав вложения с многозадачными моделями обучения [22,23,24]. Выбор зависит от вашего архитектурного замысла.

Word2Vec в настройках, отличных от NLP

Важнейшими статьями по адаптации Word2Vec и Doc2Vec не к НЛП являются: Prod2Vec [7] и Meta-Prod2Vec [8] соответственно. Вы можете внедрить любой объект, если вы можете определить соответствующий контекст / среду для объекта; будь то последовательный (например, журналы поиска, последовательности взаимодействия продуктов [7]) или график [9,10,27] (например, социальная сеть, молекулы). Способность правильно определять ваш контекст [11] является наиболее важной частью вашей модели, за ней следуют другие ваши параметры SGNS.

Создание встраиваемых продуктов из заказов (набор данных Instacart)

Набор данных Instacart [4] содержит более 3 миллионов заказов на продукты от более чем 200 000 пользователей Instacart, где каждый заказ содержит последовательность приобретенных продуктов. Мы создадим векторы вложения для каждого продукта. Мы не будем использовать какую-либо информацию о продукте / пользователе и только встраиваем семантику совместной фильтрации, присущую набору данных, в векторы внедрения. Хотя эти сгенерированные вложения продуктов могут использоваться исключительно для моделирования схожести / дополнительных продуктов и рекомендаций по текущей / следующей корзине / номенклатуре; В идеале, для большей точности модели, вам следует рассмотреть более продвинутые модели с дополнительными функциями ввода. Как и в архитектурах извлечения / ранжирования, вы также можете просто рассмотреть и использовать эти вложения в качестве модели этапа извлечения (поиск по векторному сходству) и в дальнейшем использовать выбранные вложения в качестве входных данных для более сложной модели ранжирования с дополнительными входными функциями. (Модели извлечения / ранжирования [ 12]).

Двойное пространство для вложения

SGNS изучает два разных вектора внедрения для каждого объекта; векторы входа и выхода (также называемые векторами цели и контекста). Зачем вам нужны два разных вектора для каждого объекта? Многие люди используют один вектор в последующих задачах [26], усредняя векторы входа и выхода, или отбрасывают векторы выхода и используют только векторы входа. Вы также можете изучить один вектор внедрения, используя общий слой параметров внедрения в вашей модели во время обучения (сиамская сеть с общими параметрами [25]).

Так зачем создавать два отдельных вектора для каждого объекта? Давайте проверим технические и логические рассуждения.

Технические: давайте перейдем от НЛП к набору данных Instacart; «Слова» становятся «продуктами», а «предложения» становятся «корзиной заказов». Контекст для продукта - это другие продукты в корзине текущего заказа. Для продукта «Мешок с бананами» рассмотрим случай, когда мы используем один и тот же вектор для Target (In) и Context (Out). «Мешок бананов» семантически не встречается в контексте самого себя (контекст является корзиной заказа). Используя тот же вектор v для «Мешка бананов»; присвоение низкой вероятности p («Мешок бананов» | «Мешок бананов») было бы невозможно, потому что присвоить низкое значение v · v невозможно.

Логично: использование двойных векторов входа-выхода позволяет нам оценить вероятность попадания продукта в целевую или контекстную среду. Таким образом, мы можем вычислить сходство продукта (косинусное сходство в векторах In) или комплементарность продукта (сходство косинуса между векторами In и Out). В конце концов, эта архитектура «двойного встраиваемого пространства» формирует основу более продвинутых моделей для предсказания подобия / комплементарности, которые используются в производстве [16,17,18,19,20].

Параметры модели

Оценим параметры SGNS;

Размер окна: установка размера окна зависит от задачи. В случае с Airbnb [11], где встраивание списков генерируется с помощью последовательностей сеансов кликов пользователей, списки, которые нажимаются последовательно в сеансе, могут быть более семантически связаны, чем листинги, на которые щелкнули первым и последним в сеансе. Таким образом, установка небольшого размера окна (3–6) может быть подходящей для сужения окна взаимосвязи в последовательности. Чем больше у вас данных, тем меньший размер окна вы можете использовать.

Однако в случае набора данных Instacart продукт в корзине заказов связан со всеми другими продуктами в корзине, потому что наша целевая функция - это прогноз сходства / взаимодополняемости на «уровне корзины». Таким образом, наш размер окна - это размер корзины для каждого заказа. В качестве дополнительного теоретического примечания, если ваш набор данных достаточно велик и если вы меняете порядок продуктов в корзине заказов для каждой эпохи, вы можете использовать меньший размер окна; и может достичь тех же результатов, что и при использовании окна большего размера.

Создание набора данных: пары данных Target-Context ( In-Out) создаются из вашего набора данных с использованием параметра размера окна. Для каждой цели вы можете добавить дополнительные пары данных в свой набор данных для следующих целей:

  • Добавление целевых метаданных для лучшего обобщения (Meta-Prod2Vec) [8]. Например. Категория целевого продукта
  • Встраивание других объектов в то же пространство встраивания, таких как Brands [8] Например, Целевой бренд
  • Добавление дополнительных пар целевой объект-контекст для влияния или добавления дополнительных ассоциаций к встраиваемым векторам [11]

Эпоха: количество эпох не имеет минимального влияния на результат, вы можете легко определить это с помощью автономной оценки конвергенции. Однако имейте в виду, что исходный код Word2Vec [36] и библиотеки, такие как Gensim, не используют мини-пакетную обработку (без мини-пакетной обработки параметры модели обновляются с каждым данными в наборе данных), поэтому увеличение количества эпох не будет иметь тот же эффект по сравнению с моделью, использующей мини-дозирование.

Выборка-кандидат. Алгоритмы выборки-кандидата позволяют использовать эффективные архитектуры обучения задачам без расчета полного softmax для всех классов меток [28,29]. Поскольку SGNS использует метод отрицательной выборки [2], генерация распределения выборки и соответствующие параметры выборки играют решающую роль в создании успешных моделей SGNS. Итак, как настроить архитектуру отрицательной выборки?

  • Общая выборка - ваши отрицательные образцы взяты из одного и того же набора входных данных с использованием параметра распределения выборки (подробнее об этом ниже).
  • Выборка с учетом контекста - вы выбираете свои отрицательные образцы, используя свой целевой контекст. В случае с Instacart для определенного продукта вы можете выбрать отрицательные образцы из той же категории продукта / прохода. Этот метод «жесткого отрицания» позволяет модели сходиться быстрее и лучше. Однако вам нужно инвестировать в это ресурсы, поскольку вам нужно иметь возможность выбирать негативы для каждой цели. Негативы можно получить во время мини-пакетного обучения или, в качестве альтернативы, вы можете заранее сгенерировать набор данных статического отрицательного распределения. Этот выбор зависит от вашего учебного оборудования, распределенной архитектуры обучения и затрат.

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

  • α = 1 - равномерное распределение - используются исходные частоты элементов в наборе данных.
  • 0 ‹α‹ 1 - высокочастотные элементы сглаживаются.
  • α = 0 - распределение по юниграмме - частота элемента в наборе данных равна 1.
  • α ‹0 - взвешиваются низкочастотные элементы.

Количество отрицательных выборок (k): для каждой цели в нашем распределении выборки выбрано k отрицательных образцов. В следующем разделе мы оценим корреляцию между k и α.

Оценка - Прогнозирование следующего товара в корзине заказов

Мы будем оценивать параметры модели (k, α), используя набор данных Instacart, прогнозируя следующий элемент в корзине текущего заказа.

Пример кода [31] (для наглядности используется Gensim.)

После обучения нашей модели на наборе обучающих данных с использованием набора тестов мы скроем случайный продукт в корзине заказов клиентов и спрогнозируем скрытый элемент, используя другие продукты в корзине. Мы рассчитаем «вектор корзины» путем усреднения целевых вложений продуктов в корзину. Затем, используя вычисленный «вектор корзины», мы будем искать ближайшие элементы в векторном пространстве Context (Out) и представлять ближайшие элементы в качестве рекомендаций. Эта рекомендация сводится к следующему: «Вот рекомендуемые вам продукты, рассчитанные на основе того, что вы уже положили в свою корзину». Ниже представлен анализ Hitrate @ 10 при различных k и α.

Мы видим, что точность низкая при высоком α (α = 0,75, α = 1). Существо интуиции; при высоких значениях α в распределении преобладают популярные высокочастотные элементы / пользователи, что снижает возможность обобщения модели.

При уменьшении α мы прогнозируем более «менее частые» продукты, и это приводит к лучшему баллу модели с максимальным значением α = 0. Итак, какой α вы бы выбрали для этой модели? Я бы выбрал α = -0,5, потому что, хотя он имеет более низкий балл, чем α = 0, я бы сказал, что он будет лучше набирать очки при онлайн-оценке, предполагая, что он будет предлагать клиентам более разнообразные рекомендации (Serendipity, Новизна).

Корреляция между α и k:

С высоким α (α ›0); увеличение k снижает точность. Интуиция есть; при высоком значении α вы рекомендуете популярные / часто встречающиеся элементы, которые не отражают реальное распределение. Если вы увеличиваете k в этой ситуации, вы выбираете еще более популярные / часто встречающиеся элементы в качестве отрицательных, что приводит к дальнейшему переобучению для неправильного распределения. Конечная точка: если вы хотите порекомендовать популярные товары с высоким α, не нужно увеличивать k.

При низком α (α ‹0); при увеличении k увеличивается точность. Интуиция есть; при низком α вы рекомендуете более разнообразные предметы из хвоста (нечастые предметы). В этой области, если вы увеличиваете k, вы выбираете больше отрицательных выборок из хвоста, позволяя модели видеть больше различных элементов, таким образом, хорошо вписываясь в разнообразное распределение. Конечная точка: если вы хотите порекомендовать различные предметы (новизна, интуитивная прозорливость) с низким α, вы можете увеличить k до точки, при которой он начинает переоснащаться.

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

Дальнейший анализ

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

Да, вы можете добавлять функции элементов с помощью Meta-Prod2Vec [8], а с помощью моделей Graph Random Walk ([9,10]) вы также можете добавлять функции узлов. Но проблема в том, что все эти добавленные «функции» являются идентификаторами, а не векторами; а именно, это идентификаторы ваших функций, хранящиеся в вашем бэкэнде. Для современных моделей вы можете захотеть использовать векторы в качестве характеристик элемента (например, закодированный вектор изображения элемента). Кроме того, добавленные функции элемента не взвешиваются, следовательно, влияние каждого свойства элемента на элемент и выходные данные модели не изучаются как параметры.

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

С относительно новыми моделями Inductive Graph Neural [34,35] мы можем добавлять функции элементов / отношений в качестве обучаемых векторов, а также получать встраивания новых элементов, невидимых для обученной модели.

Исследования графической нейронной сети - это захватывающая область в ближайшие годы.

Заключение

Главный вывод этого документа;

  • Анализ моделей на основе Word2Vec в контексте, отличном от NLP.
  • Анализ параметров модели, в основном корреляция между α и k для бизнес-контекста схожести / дополнительных прогнозов.

В будущих документах будет продолжено исследование более продвинутых моделей встраивания и последующих глубинных моделей.

[1] Эффективная оценка представлений слов в векторном пространстве (https://arxiv.org/abs/1301.3781)

[2] Распределенные представления слов и фраз и их композиционность (https://arxiv.org/abs/1310.4546)

[3] Объяснение word2vec: вывод метода встраивания слов с отрицательной выборкой Миколова и др. (Https://arxiv.org/abs/1402.3722)

[4] The Instacart Online Grocery Shopping Dataset 2017 »( https://www.instacart.com/datasets/grocery-shopping-2017 )

[5] Встраивания для всего: поиск в эпоху нейронных сетей (https://youtu.be/JGHVJXP9NHw)

[6] Вложения в Twitter (https://blog.twitter.com/engineering/en_us/topics/insights/2018/embeddingsattwitter.html)

[7] Электронная торговля в вашем почтовом ящике: масштабные рекомендации по продуктам (https://arxiv.org/abs/1606.07154)

[8] Meta-Prod2Vec - Встраивание продукта с использованием дополнительной информации для рекомендаций (https://arxiv.org/abs/1607.07326)

[9] DeepWalk: онлайн-изучение социальных представлений (https://arxiv.org/abs/1403.6652)

[10] node2vec: изучение масштабируемых функций для сетей (https://cs.stanford.edu/~jure/pubs/node2vec-kdd16.pdf)

[11] Персонализация в реальном времени с использованием вложений для ранжирования результатов поиска на Airbnb (https://www.kdd.org/kdd2018/accepted-papers/view/real-time-personalization-using-embeddings-for-search-ranking- at-airbnb )

[12] Глубокие нейронные сети для рекомендаций YouTube (https://ai.google/research/pubs/pub45530)

[13] Рекомендации, какое видео смотреть дальше: многозадачная система ранжирования (https://dl.acm.org/citation.cfm?id=3346997)

[14] Word2vec применяется к Рекомендации: гиперпараметры имеют значение (https://arxiv.org/abs/1804.04212)

[15] Нейронные модели для поиска информации (https://youtu.be/g1Pgo5yTIKg)

[16] Вывод дополнительных продуктов из корзин и сеансов просмотра (https://arxiv.org/pdf/1809.09621.pdf)

[17] Обучение дополнительному сходству с использованием сети Quadruplet (https://arxiv.org/abs/1908.09928)

[18] Выведение сетей взаимозаменяемых и дополнительных продуктов (https://arxiv.org/abs/1506.08839)

[19] Рекомендация по изучению двойного представления с учетом контекста для дополнительных продуктов (https://arxiv.org/pdf/1904.12574.pdf)

[20] Экспоненциальные семейные вложения (https://arxiv.org/abs/1608.00778)

[21] Карманные структурные вложения в крупномасштабные сети (https://youtu.be/B-WFdubGkIo)

[22] Изучение унифицированного встраивания для визуального поиска в Pinterest (https://arxiv.org/abs/1908.01707)

[23] Обзор многозадачного обучения в глубоких нейронных сетях (https://ruder.io/multi-task/)

[24] Моделирование взаимосвязей между задачами в многозадачном обучении с использованием многопрофильных экспертов (https://www.kdd.org/kdd2018/accepted-papers/view/modeling-task-relationships-in-multi- задача-обучение-с-смесью-несколькими воротами- )

[25] DeepFace: устранение разрыва в производительности на уровне человека при проверке лица (DeepFace: сокращение разрыва в производительности на уровне человека при проверке лица)

[26] GloVe: глобальные векторы для представления слов (https://nlp.stanford.edu/projects/glove/)

[27] Сверточные сети с графами: всесторонний обзор (https://rdcu.be/bW6sK)

[28] О встраивании слов - Часть 2: Аппроксимация Softmax (https://ruder.io/word-embeddings-softmax/)

[29] Выборка кандидатов - Tensorflow (https://www.tensorflow.org/extras/candidate_sampling.pdf)

[30] Оптимизация вычислительной эффективности Skip-Gram с помощью отрицательной выборки (https://aegis4048.github.io/optimize_computational_efficiency_of_skip-gram_with_negative_sampling)

[31] https://github.com/boraturant/Word2Vec_Instacart_Similarity_Complementarity

[32] CS224W: Машинное обучение с помощью графиков (http://web.stanford.edu/class/cs224w/)

[33] Алгоритмы встраивания графовых узлов (https://youtu.be/7JELX6DiUxQ)

[34] Индуктивное обучение представлению на больших графах (https://arxiv.org/abs/1706.02216)

[35] Реляционные индуктивные предубеждения, глубокое обучение и сети на графах (https://deepmind.com/research/open-source/graph-nets-library)

[36] https://code.google.com/archive/p/word2vec/