Что такое системы рекомендаций?

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

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

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

Такие компании, как Netflix, Amazon, Meta. использовать рекомендательные системы, чтобы помочь своим пользователям определить правильный продукт или фильмы для них.

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

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

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

2. Метод фильтрации на основе содержания

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

Давайте подумаем о фильмах. Если мы хотим порекомендовать пользователю новый фильм, который он никогда не смотрел, мы порекомендуем фильмы, похожие на фильмы, которые он уже смотрел. Но что значит, что два фильма похожи?!

Мы можем считать два фильма похожими, если между ними есть совпадения жанров.

Предположим, мы описали наши фильмы, используя только два жанра или измерения:
- Фэнтези
- Драма
Мы поместили Драма по оси X, а Фэнтези по оси Y.

Рассмотрим следующие фильмы:
- Гарри Поттер
- Звездные войны
- Мементо

И «Гарри Поттер», и «Звездные войны» получили высокие баллы за фэнтези, но только средние за драму, а «Помни» получили низкий балл за фэнтези и высокий балл за драму.

Может показаться, что «Звездные войны» ближе (похожи) на «Гарри Поттера», чем на «Помни», но насколько они близки?

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

Показатель сходства: это показатель для расчета сходства между элементами в пространстве вложений (функций).

Двумя широко используемыми мерами подобия являются:
1. Скалярное произведение
2. Косинусное сходство.

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

Итак, из нашего предыдущего примера:
S(Гарри Поттер, Звездные войны) = (2*3) + (5*4) = 26
S(Memento, Звездные войны) = (3*5) + (4*1) = 19

Косинусное сходство
Похоже на скалярное произведение, но масштабировано с нормой векторов.

Итак, из нашего предыдущего примера:

Используя обе метрики, мы обнаружили, что сходство между «Гарри Поттером» и «Звездными войнами» больше, чем сходство между «Помни» и «Звездными войнами».

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

Предположим, у нас есть один пользователь и набор данных из 6 фильмов, и пользователь оценил 3 фильма из набора данных следующим образом:

Жанры фильмов — это вектор с горячим кодированием, представляющий жанры фильмов, например:

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

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

Пользователь будет иметь вектор признаков в том же виде, что и вектор признаков фильмов.

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

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

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

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

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

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

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

Как мы видим, у «Властелина колец» самая высокая оценка сходства 0,78, что означает, что это лучший похожий фильм на вкус пользователя, причина в том, что пользователь оценил 2 фильма из 3, которые имеют одинаковые характеристики. как и «Властелин колец», «Суперсемейка» имеет низкий показатель сходства 0,18, причина в том, что у него есть общие черты (Действие) с рейтинговым фильмом «Звездные войны», а «История игрушек» имеет самая низкая оценка схожести 0,04 объясняется тем, что в нем есть общие черты (драма) с фильмом Memento с низким рейтингом.

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

Плюсы на основе содержания:

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

Контентные минусы

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

3. Совместная фильтрация

Совместная фильтрация использует взаимодействие пользователя, чтобы рекомендовать элементы пользователю на основе взаимодействия других пользователей, чтобы сделать его более понятным, рассмотреть пользователя 1 и пользователя 2, а также фильмы [A, B, C, D], и все эти фильмы из разных категорий, предположим пользователь 1 поставил высокие оценки фильму A, фильму B и фильму D, а пользователь 2 дал высокие оценки фильму A, фильму C и фильму D. Оба пользователя оценили фильм A и фильм D с высокой оценкой, поэтому, используя совместную фильтрацию, мы могли скажем, у пользователя 1 и пользователя 2 похожие вкусы, и было бы неплохо порекомендовать фильм C пользователю 1 и фильм B пользователю 2.

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

Совместная фильтрация имеет два типа алгоритмов:

  • На основе памяти
  • На основе модели

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

Совместная фильтрация на основе модели

Давайте применим пример с фильмами, который мы использовали ранее здесь в совместной фильтрации.

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

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

Сначала мы создадим две матрицы U и V и инициализируем их случайными весами или гауссовым распределением, размеры этих матриц равны [M,K], [K,N] для U, V соответственно, где M — количество пользователей. и N — количество фильмов (элементов), K — количество скрытых функций, которые будут использоваться для оценки рейтингов фильмов без рейтинга. Обратите внимание, что K — это один из гиперпараметров.

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

Если в нашем наборе данных пятьдесят миллионов пользователей и десять тысяч фильмов, это уже
пятьсот миллиардов взаимодействий в ячейке матрицы взаимодействий.
С другой стороны, если у нас может быть K скрытых функций, то U будет ( пятьдесят миллионов * K) элементов, а V будет иметь (K * десять тысяч) элементов. Общее пространство равно K*(M+N), что равно 500100000. При K=10 мы использовали на 999,8 меньше места.

Даже с десятью скрытыми функциями в этом случае все равно в тысячу раз
меньше места, чем раньше.

То, что мы только что сделали, называется Матричная факторизация.

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

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

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

Наш подход к совместной фильтрации будет разделен на два взаимосвязанных этапа:

  1. Этап поиска
  2. Этап рейтинга

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

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

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

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

Преимущества совместной фильтрации:

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

Минусы совместной фильтрации:

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

4. Гибридная рекомендательная система

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

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

Следующая блок-схема объясняет наш гибридный алгоритм рекомендаций фильмов:

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

Затем мы проверим, есть ли в системе более 100 пользователей и более 100 фильмов, если нет, мы не будем применять совместную фильтрацию, потому что не будет достаточно строк в матрице характеристик пользователей U или достаточно столбцов в матрице характеристик элементов V, чтобы соответствовать нашей модели. .

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

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

Используя гибридную систему, мы решаем следующие проблемы:

  • Рекомендации только аналогичны предыдущим взаимодействиям пользователя.
  • Холодный запуск пользователя.
  • Холодный пуск предметов.

5. Вывод

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

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

Я включу ссылку на вторую часть этой статьи, как только она будет закончена.

6. Ссылки