Задача

Рекомендательные системы - это модели, которые могут давать рекомендации пользователям на основе истории их поведения. Совместная фильтрация - это один из способов создания рекомендательной системы, основанной на рейтингах пользователей. Цель состоит в том, чтобы построить простую модель совместной фильтрации с использованием Keras. Мы будем использовать новый набор данных MovieLens, который имеет 100000 оценок, 9000 фильмов и 700 users Доступно здесь: https://grouplens.org/datasets/movielens.

Набор данных

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

Модель 1

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

Код для этого довольно прост с Keras:

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

Модель достигает значения mean_absolute_error, равного 0,98. Mean_absolute_error - это средняя абсолютная разница между фактическими и прогнозируемыми оценками.

Модель 2

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

mean_absolute_error = 0,94

Это означает, что добавление смещения помогает немного улучшить результат (чем ниже, тем лучше).

Модель 3

Мы добавляем нелинейный полносвязный слой, чтобы улучшить выразительность и сложность нашей сети.

mean_absolute_error = 0,84

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

Еще одно улучшение, которое мы можем сделать, - это включить контекстную информацию, такую ​​как категория фильма или описание.

Код для воспроизведения результатов находится по адресу: https://github.com/CVxTz/Recommender_keras