Построение совместной системы фильтрации / рекомендаций - PullRequest
8 голосов
/ 03 октября 2009

Я нахожусь в процессе разработки веб-сайта, который основан на концепции рекомендации различных элементов пользователям на основе их вкусов. (т. е. предметы, которые они оценили, предметы, добавленные в их список избранного и т. д.) Некоторыми примерами этого являются Amazon, Movielens и Netflix.

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

Я посмотрел несколько публикаций по адресу Grouplens.org , в частности " На пути к масштабируемому алгоритму CFN kNN: изучение эффективных приложений кластеризации ". (pdf) Я довольно хорошо разбираюсь во всем, пока не появится страница 5 «Генерация прогнозов»

p.s. Я не совсем ищу объяснения того, что происходит, хотя это может быть полезно, но меня больше интересует математика, которую я должен знать. Таким образом, я могу понять, что происходит.

Ответы [ 5 ]

11 голосов
/ 03 октября 2009

Позвольте мне объяснить процедуру, которую авторы ввели (как я понял):

Введите:

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

Выход:

  • прогноз для целевого элемента по целевому пользователю

Это может быть повторено для нескольких элементов, а затем мы возвращаем N-верхних элементов (с наибольшим прогнозируемым рейтингом)

Процедура:
Алгоритм очень похож на простой метод KNN (ищите все данные обучения, чтобы найти пользователей с аналогичными оценками для целевого пользователя, затем объедините их оценки, чтобы дать прогноз [голосование]).
Этот простой метод не очень хорошо масштабируется, так как количество пользователей / элементов увеличивается.

Предлагаемый алгоритм состоит в том, чтобы сначала объединить обучающих пользователей в группы K (группы людей, которые оценили предметы одинаково), где K << <strong>N ( N - общее количество пользователей).
Затем мы сканируем эти кластеры, чтобы найти, какой из них целевой пользователь ближе всего (вместо того, чтобы смотреть на всех обучающихся пользователей).
Наконец, мы выбираем из них l и делаем наш прогноз как среднее значение, взвешенное по расстоянию до этих l кластеров.

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

Первая формула на странице 5 - это определение корреляции:

corr(x,y) = (x-mean(x))(y-mean(y)) / std(x)*std(y)

Вторая формула в основном представляет собой средневзвешенное значение:

predRating = sum_i(rating_i * corr(target,user_i)) / sum(corr(target,user_i))
               where i loops over the selected top-l clusters

Надеюсь, это немного прояснит:)

8 голосов
/ 03 октября 2009

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

5 голосов
/ 03 октября 2009

Алгоритм Интеллектуальной Сети (H Marmanis, D Babenko, Manning Publishing) представляет собой вводный текст по данной теме. Он также охватывает концепции поиска, но его основное внимание уделяется классификации, системам рекомендаций и тому подобному. Это должно быть хорошим учебником для вашего проекта, позволяющим задавать правильные вопросы и копать глубже, где вещи кажутся более перспективными или практичными в вашей ситуации.

Книга также включает в себя «переподготовку» соответствующих математических тем (в основном, линейной алгебры), но эта переподготовка минимальна; вы будете делать лучше в Интернете.

Приятный способ обнаружить или вернуться к линейной алгебре - следовать Проф. Серия лекций Гилберта Стрэнда 18.06 доступна на MIT OpenCourseWare.

Линейная алгебра - не единственный путь к спасению ;-) Вам может быть полезно освежить в общих понятиях статистики, таких как распределение, ковариация, байесовский вывод ...

1 голос
/ 27 апреля 2017

Из официальной документации из Abracadabra Recommender API , вы начинаете с того, что различаете:

  • Предметы : Это объекты, которые вы хотите рекомендовать пользователю. Фильм или статья, например, предмет. Субъекты характеризуются тем, что они имеют определенные атрибуты или содержание, которые различают их между различными субъектами.

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

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

  • Поток Существует общий поток (порядок, в котором все делается), который важен для любого типа системы рекомендаций и который также интуитивно понятен.

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

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

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

Обратите внимание, что с Abracadabra Recommender API вам нужно только отправлять HTTP-вызовы в API для обучения вашей модели и получения рекомендаций. Доступ к API можно получить с помощью любого языка, например, с вашего веб-сайта или приложения (Angular, React, Javascript ...) или с вашего сервера (NodeJS, Curl, Java, Python, Objective-C, Ruby, .NET ...). .

1 голос
/ 14 марта 2011

Вы, наверное, должны знать:

  • линейная алгебра
  • искусственный интеллект / машинное обучение / статистика

Приятно иметь:

  • метрические пространства
  • топологии
  • EDA / надежная статистика
  • аффинная алгебра
  • функциональный анализ
  • теория графов

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

Примеры могут быть:

  • никогда не дайте "плохую" рекомендацию
  • балл монотонно увеличивается по нескольким параметрам
  • держите дверь открытой для идеи улучшения X, Y, Z, которая у нас есть для дальнейшего развития.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...