Использование алгоритма классификации для построения рекомендательной системы

Авторы Бенни Танг и Джейсон Цанг

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

Просмотр последовательности как функций

Когда дело доходит до рекомендательной системы, недостатка в алгоритмах нет. Совместная фильтрация - отличный способ начать, создав матрицу от пользователя к элементу и используя SVD (разложение по сингулярным значениям) или NMF (факторизация неотрицательной матрицы), чтобы найти похожих пользователей или похожие элементы. Хотя наша команда достигла разумного прогноза с помощью методов совместной фильтрации, мы поняли, что обычная CF (совместная фильтрация) не может очень точно прогнозировать, когда дело доходит до последовательности просмотра.

Последовательность просмотра - важная особенность сервисов потокового видео. Большинство пользователей, скорее всего, будут смотреть сезон 2 после сезона 1, то есть последовательно. Например, если пользователь смотрел телепрограмму «Файл правосудия I» (壹 號 皇 庭), то обычная совместная фильтрация может равным образом оценить «Файл правосудия II» и «Файл правосудия III». Однако все мы знаем, что пользователь будет смотреть «Дело правосудия II» перед «Досье правосудия III». Для этого наша модель должна изучать последовательность поведения пользователей при просмотре.

Методология

Общая структура системы рекомендаций

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

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

Шаг 1. Встраивайте программы в векторное представление

Прежде чем передать последовательность видео в модель, мы должны сначала преобразовать ее в какое-то числовое представление, то есть вложение. Например, «Игра престолов» будет преобразована в [0,1, 0,3, -0,6].

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

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

Результат выглядит так после его визуализации с помощью t-SNE (t-распределенное стохастическое вложение соседей).

Несколько замечаний о встраивании видео

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

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

Шаг 2. Подготовьте набор данных

Мы превратили проблему рекомендации в проблему классификации. Идея состоит в том, чтобы научить модель предсказывать, можно ли рекомендовать одну программу с учетом истории просмотров пользователя. Каждый из P1, P2… ниже - это вектор, который мы создали на последнем шаге. Вы можете просто сгладить список векторов или передать его через слой RNN / LSTM перед дальнейшей обработкой с помощью выбранной вами модели классификации. Здесь позвольте мне просто пропустить детали этого и сосредоточиться на подготовке набора обучающих данных.

@Тренировочное время

Предположим, что существует всего 10 разных программ, а именно

P1, P2, … , P10

И у нас есть история просмотров вроде (в последовательности просмотра):

Пользователь 1: P1, P2, P3, P4, P5, P6, P7

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

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

Идея состоит в том, чтобы сообщить модели, что если вы видите P1, P2, P3, будет хорошо порекомендовать P4.

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

@ Время вывода

Предположим, что входит пользователь, который просматривал страницы P8-P9-P10 и просил рекомендации.

Пройдя этап предварительного отбора, предположим, что P1, P3, P5, P7, P9 являются возможными кандидатами. Напомним, тысячи программ проходят этап предварительного отбора, где мы выбираем сотни из них. Если общее количество программ невелико, вы также можете проигнорировать этап предварительного отбора, чтобы рассматривать все программы как кандидаты.

Далее мы создадим матрицу ввода модели следующим образом:

Исходя из результатов, мы можем сказать, что P9 является лучшим для рекомендации, а P7 и P3 занимают второе место.

Шаг 3. Обучите модель

Вы можете использовать выбранную вами модель для классификации. Есть несколько распространенных алгоритмов.

Шаг 4. (Необязательно) Настройте модель

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

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

Теперь предположим, что P3b, P4b, P5b являются закулисными объектами P3, P4, P5 соответственно, и руководство хочет, чтобы их тоже рекомендовали. Чтобы настроить модель, мы можем ввести в нее некоторые добавки следующим образом:

Эти образцы скажут модели, что рекомендуется рекомендовать P3b, если она видит P3 на последней позиции в истории просмотров.

Если вам нравится читать этот пост и вы чувствуете, что вам понравится работать над системой рекомендаций, мы ищем талантливых людей, которые присоединятся к нашей команде. Свяжитесь с нами по адресу [email protected].