Как обрабатывать новые данные для рекомендательной системы?

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

У меня есть хороший набор данных для работы этих алгоритмов. Но тогда я хочу сделать две вещи:

  1. Я хотел бы добавить новый рейтинг в набор данных.
  2. Я хочу изменить существующий рейтинг.

Как мои алгоритмы должны обрабатывать эти изменения (без выполнения большого количества ненужной работы)? Может ли кто-нибудь помочь мне с этим?


person Leon Cullens    schedule 17.09.2012    source источник


Ответы (2)


В обоих случаях стратегия очень похожа:

пользовательская CF:

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

Склон-1:

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

Примечание. Если ваше «подобие» асимметрично, вам необходимо обновить одну строку и один столбец. Если он симметричен, обновление одной строки автоматически приводит к обновлению соответствующего столбца. Для Slope-One матрицы бывают симметричными (частота) и кососимметричными (разницами), так что если вы обрабатываете, вам также необходимо обновить одну строку или столбец, а другой получить бесплатно (если ваше хранилище матриц работает так).

Если вы хотите увидеть пример того, как это можно реализовать, взгляните на MyMediaLite (отказ от ответственности: я являюсь основным автором): https://github.com/zenogantner/MyMediaLite/blob/master/src/MyMediaLite/RatingPrediction/ItemKNN.cs Интересный код находится в метод RetrainItem(), который вызывается из функций AddRatings() и UpdateRatings().

person zenog    schedule 18.09.2012

Общие вещи называются онлайн-алгоритмами.

Вместо переобучения всего предиктора его можно обновлять «в режиме онлайн» (оставаясь при этом пригодным для использования) только новыми данными.

Если вы погуглите «онлайн-предиктор наклона один», вы сможете найти некоторые соответствующие подходы из литературы.

person Has QUIT--Anony-Mousse    schedule 18.09.2012