Вопрос или проблема
Я использую матричное разложение SGD (python) с использованием набора данных movielens для создания рекомендаций. У меня есть веб-сайт, который позволяет пользователям оставлять отзывы, которые могут быть положительными или отрицательными относительно того, является ли элемент хорошей рекомендацией для конкретного фильма.
Мне интересно, могу ли я использовать этот отзыв в своем матричном разложении. Я не был на 100% уверен, как мне действовать.
Например, у меня будет вектор, подобный этому:
m1 m2 m3
m1 0 0 0
m2 5 0 -4
m3 0 0 0
Где m2-m1 — это оценка 5, так что в примере, когда никто не оценил его отрицательно, 5 человек считают его хорошим. А для m2-m3 оценка -4, что означает, что рекомендация плохая.
Любая помощь будет очень ценна.
Исправление: ответ на вопрос
В настоящее время я использую разреженную матрицу для оценок пользователей и предметов и использую смещение.
Я пытался добавить дополнительные источники ввода и использую следующее для создания атрибутной матрицы, содержащей представление жанра:
for genre in item_genres:
genres[genre] = 1
self.attribute_item_matrix[i] = sum(list(genres.values()))
pred = self.global_mean + self.bias_user[u] + self.bias_item[i] +np.dot(self.P[u, :],(self.Q[:, i]+self.attribute_item_matrix[i]))
Однако я не думаю, что это правильно, так как в конечном итоге это приводит к ошибке nan.
Я следую этой статье Техники матричного разложения для рекомендательных систем
Спасибо
На мой взгляд, вам лучше использовать матрицу пользователь
–фильм
, чтобы создать разреженную матрицу
, которая может быть более значимой. Делая это, если вы уже знаете полиarity
выборов, т.е. положительный
, отрицательный
или нейтральный
, вы также можете иметь некоторый интенсивный
балл нравится
или не нравится
, как в случае рейтинг
. Теперь, если вы хотите просто классифицировать их как нравится
, нейтральный
и не нравится
, вы можете присвоить 1
, 0
и -1
соответственно. Этот метод может иметь большее значение, когда у вас много фильмов и много пользователей. Более того, это может помочь вам установить отношения пользователь-пользователь
, фильм-пользователь
и фильм-фильм
. Эти отношения могут помочь вам лучше понять и исследовать рекомендательные системы
.
m1 m2 m3 m4
u1 -1 0 -1 1
u2 1 1 -1 0
u3 0 0 1 0
u4 -1 1 1 0
Если вы хотите добавить рейтинг
вместо просто поля
, просто добавьте числа в диапазоне 0-1
. Лично я работал над ними, чтобы написать гибридные рекомендательные системы
, которые совмещают как коллаборативную фильтрацию
, так и контекстную фильтрацию
. Я бы предложил вам больше работать над отношениями и попробовать исследовать следующие шаги, такие как возможность предвзятости нравится
или не нравится
, ассоциация информации о фильмах/влияние актёров-режиссёров и сходство в фильмах и т. д. Надеюсь, это объяснение поможет.
Существуют некоторые модели разложения, которые работают примерно так, вы можете поискать ‘на основе сессий’, ‘на основе корзины’, ‘последовательные’ и другие. Но, как правило, они не показывают очень хорошие результаты. Вы также можете использовать эти данные для создания модели классификации или регрессии, а затем смешать их с обычными триплетами пользователь-объект-рейтинг в какой-то гибридной модели.
.
Ответ или решение
Улучшение матричной факторизации для системы рекомендаций
Ваша задача – интегрировать отзывы пользователей в модель матричной факторизации, что является важным шагом для повышения точности рекомендаций в системе. Давайте разберем, как можно реализовать это улучшение, используя данные о положительных и отрицательных отзывах.
1. Понимание проблемы
Вы используете матричную факторизацию (МФ) с методом стохастического градиентного спуска (SGD) на базе датасета Movielens. Данные о пользовательских отзывах, которые принимают значения «положительный» или «отрицательный», могут быть преобразованы в числовую форму, что позволит вам эффективно интегрировать их в вашу модель. Следовательно, вместо простого использования бинарных значений (например, 1 для «нравится» и 0 для «не нравится»), можно использовать более тонкую градацию, отражающую степень предпочтения.
2. Модификация матрицы пользователей и фильмов
Создайте разреженную матрицу (user-item matrix), которая будет включать все возможные взаимодействия пользователей с фильмами. Примените оценочную модификацию:
# Замените значения 1, 0 и -1 на более насыщенные
feedback_map = {'like': 1, 'neutral': 0, 'dislike': -1}
rating_matrix[user, movie] = feedback_map[user_feedback]
Эта модель позволит вам не просто учитывать, было ли рекомендовано какое-либо видео, но и оценивать степень любви или ненависти пользователей.
3. Встраивание атрибутов фильмов
Ваш подход к внедрению атрибутов, таких как жанры, тоже важен. Убедитесь, что вы правильно интегрируете атрибуты и что их вклад в финальное предсказание корректен:
# Пример создания матрицы атрибутов
for genre in item_genres:
self.attribute_item_matrix[i] = generate_genre_vector(genre)
pred = self.global_mean + self.bias_user[u] + self.bias_item[i] + np.dot(self.P[u, :], (self.Q[:, i] + self.attribute_item_matrix[i]))
Убедитесь, что создаваемая векторизация соответствует количеству фильмов и пользователям. Если система выдает значение nan, это сигнал о том, что идет деление на ноль или присутствуют некорректные значения в ваших данных. Проверьте входные данные и обеспечьте надлежащую обработку исключений.
4. Гибридная модель
Разработка гибридной модели, которая сочетает элементы как коллаборативной фильтрации, так и контекстного моделирования, может дополнительно повысить качество рекомендаций. Используйте обучающие алгоритмы, такие как случайные леса или градиентные бустированные машины, для улучшения модели на основе существующих данных.
5. Интеграция дополнительных источников данных
Обратите внимание на возможность использования дополнительных данных, таких как информация о фильмах (например, актеры, режиссеры), для улучшения качества рекомендаций. Понимание взаимосвязей между пользователями и фильмами, а также другими аспектами контекста (например, времени, в которое был просмотрен фильм) может существенно помочь в создании более точной модели.
Заключение
Интеграция пользовательских отзывов в систему матричной факторизации — это сложный, но жизненно важный шаг для создания более качественных рекомендаций. Всесторонне рассмотренные модификации и улучшения вашей модели могут привести к значительным улучшениям в точности рекомендаций. Используйте эти стратегии для улучшения ваших результатов и создания более интуитивно понятной системы рекомендаций для ваших пользователей.