Как понять, чего хочет пользователь, без единого запроса? Строим рекомендательную систему. Андрей Федоровский,

advertisement
Как понять, чего хочет пользователь,
без единого запроса?
Строим рекомендательную систему.
Андрей Федоровский, fedorovsky@gmail.com
Дмитрий Исайкин, isaykin@corp.mai.ru
Варвара Логачева, v.logacheva@corp.mail.ru
Рекомендательные системы: зачем они?
Цель – изучить вкусы пользователя и
понять, какие объекты из коллекции он
оценит выше других.
Анализируем
- Его оценки объектов и лог его действий
- Оценки и действия других пользователей
Как это делать?
Как это делать?
1) Показать 10 самых лучших объектов
Как это делать?
1) Показать 10 самых лучших объектов
2) Совместная встречаемость объектов
в сессиях
Как это делать?
1) Показать 10 самых лучших объектов
2) Совместная встречаемость объектов
в сессиях
3) Ввести рубрикацию/теги объектов
Как это делать?
1) Показать 10 самых лучших объектов
2) Совместная встречаемость объектов
в сессиях
3) Ввести рубрикацию/теги объектов
Малое число тегов на объект
Нет отрицательных отношений
Подходы
Подходы
Content-based: теги = ключевые
термины из описания объекта
Подходы
Content-based: теги = ключевые
термины из описания объекта
Collaborative filtering: учет оценок
других пользователей
Подходы
Content-based: теги = ключевые
термины из описания объекта
Collaborative filtering: учет оценок
других пользователей
Neighbourhood-based CF: учитываем
оценки близких пользователей
Подходы
Content-based: теги = ключевые
термины из описания объекта
Collaborative filtering: учет оценок
других пользователей
Neighbourhood-based CF: учитываем
оценки близких пользователей
В каком пространстве?
Подходы
Content-based: теги = ключевые
термины из описания объекта
Collaborative filtering: учет оценок
других пользователей
Neighbourhood-based CF: учитываем
оценки близких пользователей
Matrix factorization: построение
профилей из скрытых признаков
Требования к системе
1) Масштабирование до миллиардов оценок
2) Высокая скорость работы
3) Универсальная работа с разными
наборами данных
4) Явные оценки и неявные (логи действий)
5) Добавление новых оценок, объектов,
пользователей без рестарта
Требования к системе
1) Масштабирование до миллиардов оценок
2) Высокая скорость работы
3) Универсальная работа с разными
наборами данных не получилось
4) Явные оценки и неявные (логи действий)
5) Добавление новых оценок, объектов,
пользователей без рестарта
MF
𝑅 ∈ ℝ𝑁×𝑀 = 𝑟𝑢𝑖
𝑅 ≈ 𝑅 = 𝑃𝑄
𝑃 ∈ ℝ𝑁×𝐾 - профили пользователей
𝑄 ∈ ℝ𝐾×𝑀 - профили объектов
𝑟𝑢𝑖 − 𝑟𝑢𝑖 2
𝑅𝑀𝑆𝐸 =
| 𝑟𝑢𝑖 ∈ 𝑅 |
𝑟𝑢𝑖 ∈𝑅
ISMF
𝑅𝑀𝑆𝐸 =
𝑟𝑢𝑖 ∈𝑅
𝑟𝑢𝑖 − 𝑟𝑢𝑖 2
| 𝑟𝑢𝑖 ∈ 𝑅 |
𝐾
𝑟𝑢𝑖 = 𝑝𝑢 𝑞𝑖 =
∀𝑟𝑢𝑖
𝑘=1
𝑝𝑢𝑘 𝑞𝑘𝑖
∀𝑘 𝑝′ 𝑢𝑘 = 𝑝𝑢𝑘 + 𝜂𝑝 𝑒𝑢𝑖 𝑞𝑘𝑖
∀𝑘 𝑞′ 𝑘𝑖 = 𝑞𝑘𝑖 + 𝜂𝑞 𝑒𝑢𝑖 𝑝𝑢𝑘
RISMF
𝑅𝑀𝑆𝐸 =
𝑟𝑢𝑖 ∈𝑅
𝑟𝑢𝑖 − 𝑟𝑢𝑖 2
| 𝑟𝑢𝑖 ∈ 𝑅 |
𝐾
𝑟𝑢𝑖 = 𝑝𝑢 𝑞𝑖 =
∀𝑟𝑢𝑖
𝑘=1
𝑝𝑢𝑘 𝑞𝑘𝑖
∀𝑘 𝑝′ 𝑢𝑘 = 𝑝𝑢𝑘 + 𝜂𝑝 𝑒𝑢𝑖 𝑞𝑘𝑖 − 𝜆𝑝 𝑝𝑢𝑘
∀𝑘 𝑞′ 𝑘𝑖 = 𝑞𝑘𝑖 + 𝜂𝑞 𝑒𝑢𝑖 𝑝𝑢𝑘 − 𝜆𝑞 𝑞𝑘𝑖
BRISMF
𝑟𝑢𝑖 = 𝑟𝑢𝑖 − 𝑅 сред
𝑟𝑢𝑖 = 𝑟𝑢𝑖 − 𝑟𝑢 сред
𝑟𝑢𝑖 = 𝑟𝑢𝑖 − 𝑟𝑖 сред
Оптимизация параметров системы
𝑅𝑀𝑆𝐸 𝜂𝑝 , 𝜂𝑞 , 𝜆𝑝 , 𝜆𝑞 , 𝑃𝑚𝑎𝑥 , 𝑄𝑚𝑎𝑥
1) Градиентные методы не подходят.
Выбрали покоординатный спуск.
2) Переобучение:
1) Несколько запусков, разные семплы
2) Регуляризация в модели
3) Validation set
Неявные данные
50к оценок против 400М действий
Неявные данные
50к оценок против 400М действий
Проблема – матрица НЕразрежена.
Неявные данные
50к оценок против 400М действий
Проблема – матрица НЕразрежена.
Синтетические явные оценки:
𝑅𝑎𝑡𝑒 = 𝑓0
𝑤𝑖 𝑓𝑖 𝑐𝑖
Неявные данные
50к оценок против 400М действий
Проблема – матрица НЕразрежена.
Синтетические явные оценки:
𝑅𝑎𝑡𝑒 = 𝑓0
𝑤𝑖 𝑓𝑖 𝑐𝑖
NB: Чем плотнее матрица, тем лучше идет
обучение. Поэтому лучше начинать с ядра.
NB2: Объекты с единичными оценками
кластеризуем
Архитектура
Построение выдачи
RMSE – качество на всей коллекции.
А нам важны 10 лучших для пользователя.
Построение выдачи: мера качества
RMSE – качество на всей коллекции.
А нам важны 10 лучших для пользователя.
ARP: есть T результатов.
Лучшие – на местах 1 ≤ 𝑛1 < … < 𝑛𝑡
𝑡
𝑖=1 𝑛𝑖 − 𝑖
𝐴𝑅𝑃𝑢 =
𝑡∗ 𝑇−𝑡
ARP = 0 – идеал. ARP = 1 – идеально плохо.
Построение выдачи: сортировка
𝑘
𝑅𝑒𝑙𝑒𝑣𝑎𝑛𝑐𝑒𝐵𝑖𝑎𝑠 = 𝐵 + 𝑏𝑢 + 𝑏𝑖 +
𝑝𝑢𝑗 𝑞𝑖𝑗
𝑗=1
Построение выдачи: сортировка
𝑘
𝑅𝑒𝑙𝑒𝑣𝑎𝑛𝑐𝑒𝐵𝑖𝑎𝑠 = 𝐵 + 𝑏𝑢 + 𝑏𝑖 +
𝑝𝑢𝑗 𝑞𝑖𝑗
𝑗=1
𝑘
𝑅𝑒𝑙𝑒𝑣𝑎𝑛𝑐𝑒𝑆𝑃 =
𝑝𝑢𝑗 𝑞𝑖𝑗
𝑗=1
Построение выдачи: скорость
Случайные проекции LSH
𝑙1 … 𝑙𝑚 - гиперплоскости в ℝ𝑘
𝐻𝑚 𝑣 = ℎ1 … ℎ𝑚 : ℎ𝑖 = 𝑠𝑖𝑔𝑛 𝑙𝑖 ∙ 𝑣
Задано разбиение на сектора, а 𝐻𝑚 𝑣 их m-битная нумерация.
Сортируем только объекты, близкие к
пользователю (попавшие в один сектор)
Наборы данных
Польз-й
Объектов Оценок
480 000
18 000
100 000 000 1,16%
DenseNetflix 56 000
1 000
2 500 000
MailRuApps
8 000
22 000 000* 0,4%
Netflix
650 000
* на основе 400 000 000 действий
Плотность
4,4%
Результаты
DenseNetflix
RMSE
ARP1
Время(с)
K=5
0.8782
0.2784
7.1
K=10
0.8527
0.2479
11.2
K=20
0.8390
0.2298
18.6
K=50
0.8232
0.2156
35.8
K=100
0.8211
0.2109
69.3
Результаты
MailRuApps
ARP1
Full-Bias
0.1678
Full-SP
0.1349
LSH1-Bias
0.1896
LSH1-SP
0.1529
LSH4-Bias
0.1756
LSH4-SP
0.1412
UB-Bias
0.1783
UB-SP
0.1407
Время(мс)
1257
19
51
219
Результаты
1) Адаптировали BRISMF для неявных
данных
2) LSH4 выдает приемлемое качество с
высокой скоростью
3) Система умеет добавлять новые
оценки, пользователей, объекты на
лету, без пересчета матриц.
Спасибо! Вопросы?
Download