Рекомендательные системы Лекция №4: Advanced models
Андрей Данильченко
НИУ ИТМО, 6 декабря 2014
Как еще можно выиграть Netflix Prize?
Restricted Boltzmann Machine (for user)
Miss
ing
Miss
ing
Miss
ing
Miss
ing
… …
h
W
V
Binary hidden units
Visible movie ratings
# of movies
F — # of features
Weights (shared between all users)
Model distributions
p vik =1|
!h( ) =
exp bik + hjWij
k
j=1
F
∑"
#$$
%
&''
exp bil + hjWij
l
j=1
F
∑"
#$$
%
&''
l=1
K
∑
For n users, m movies, ratings from 1 to K, binary features from 1 to F:
p hj =1|!V( ) =σ bj + vi
kWijk
k=1
K
∑i=1
m
∑"
#$
%
&' σ (x) = 1
1+ e−x, где
p!V( ) =
exp −E!V,!h( )( )
exp −E!V ',!h '( )( )!
V ',!h '∑!h
∑
E!V,!h( ) = − Wij
khjvik
k=1
K
∑j=1
F
∑i=1
m
∑ − vikbi
k
k=1
K
∑i=1
m
∑ − hjbjj=1
F
∑
, где энергия задается как
Обучение — data part
ΔWijk = ε
∂ log p(!V )( )
∂Wijk
#
$
%%
&
'
((= ε vi
khj data− vi
khj predicted( )
Получаем из данных:
1. для каждого обучающего примера v, выведем h
2. посчитаем частоту, с которой фильм i получил рейтинг k при соответствующем h
Обучение — model part
ΔWijk = ε
∂ log p(!V )( )
∂Wijk
#
$
%%
&
'
((= ε vi
khj data− vi
khj predicted( )
Трудно получать аналитически, работает экспоненциальное время
Contrastive divergence ΔWij
k = ε∂ log p(
!V )( )
∂Wijk
#
$
%%
&
'
((= ε vi
khj data− vi
khj predicted( ) ≈
≈ ε vikhj data
− vikhj recon( )
Восстановим из данных:
1. для каждого обучающего примера v, выведем h
2. восстановим v’ из h
3. посчитаем “reconstruct”-часть
Sampling reconstruction part in CD
ΔWijk = ε vi
khj data− vi
khj recon( ) = ε vikhj data
− vikhj T( )
Будем сэмплировать по Гиббсу из распределений, делая T шагов.
p vik =1|
!h( )
p hj =1|!V( )
Начальная точка сэмплирования — наблюдаемые данные
Количество шагов T будем увеличивать в процессе обучения. Таким образом мы будем получать все более «точные» приближения.
Gibbs sampling
Пускай есть d случайных величин и дано их совместное распределение
p x1, x2…xd( )
Пусть на шаге t уже выбрано приближение Xt = xit{ }i=1
d
Тогда на t+1 шаге:
1. выберем индекс i
2. выберем по распределению xit+1 p xi | x1
t…xi−1t , xi+1
t …xdt( )
Обычно индекс выбирается как i = t +1( )%d
Общая схема обучения
1. посчитаем data-part (для каждого пользователя и его рейтинга)
2. выведем reconstruction-part для данного рейтинга
3. усредним градиенты по всем пользователям
4. запустим log-likelihood gradient ascend
Как предсказывать рейтинги?
Предсказание рейтингов
p vik =1|
!V( )∝ exp −E vq
k,!V,!h( )( )
h1…hp
∑ ∝
∝Γqk exp vi
lhjWijl
il∑ + vi
khjWijk + hjbj
%
&'
(
)*
hj∈{0,1}∑
j=1
F
∏ =
= Γqk 1+ exp vi
lWijl
il∑ + vi
kWijk + bj
%
&'
(
)*
%
&''
(
)**
j=1
F
∏
где Γqk = exp vq
kbqk( )
Получили вероятность, что пользователь поставит фильму i оценку k
Что делать с вероятностями?
Два варианта:
1. просто взять оценку, у которой вероятность максимальна
2. нормализовать вероятности так, чтобы
p vi = k( )k=1
K
∑ =1
и посчитать предсказание как E vi[ ]
Предсказание множества рейтингов
14
Если требуется предсказать рейтинги для n фильмов, то можно посчитать вероятность:
p vq1k1 =1,vq2
k2 =1,…,vqnkn =1|
!V( )
Но это требует O(Kn) времени!
Multi-predict trick
15
Давайте сделаем один update-шаг:
p̂ j = p hj =1|!V( ) =σ bj + vi
kWijk
k=1
K
∑i=1
m
∑"
#$
%
&'
p vqk =1| p̂( ) =
exp bqk + p̂ jWqj
k
j=1
F
∑"
#$$
%
&''
exp bqk + p̂ jWqj
l
j=1
F
∑"
#$$
%
&''
l=1
K
∑
И снова вычислим предсказания как матожидание. Это немного хуже по качеству, но намного быстрее!
Gaussian hidden units
16
Можно ввести расширение модели, считая скрытые переменные гауссовскими. Тогда вероятности в модели примут вид:
p vik =1|
!h( ) =
exp bik + hjWij
k
j=1
F
∑"
#$$
%
&''
exp bil + hjWij
l
j=1
F
∑"
#$$
%
&''
l=1
K
∑
p hj = h |!V( ) = 1
2Πσ i
exp −
h− bj −σ j vikWij
k
k=1
K
∑i=1
m
∑$
%&
'
()
2
2σ i2
$
%
&&&&&
'
(
)))))
N.B. для единичной дисперсии формулы обновления те же!
Как измерить качество? или еще раз о метриках
Prediction quality
RMSE = 1| R |
rui − r̂ui( )u,i∈R∑
2
MAE = 1R
rui − r̂uiu,i∈R∑
Classification quality
Истинный ответ 0 Истинный ответ 1
Предсказали 0 TN FN
Предсказали 1 FP TP
Confusion matrix:
P = TPTP +FP
R = TPTP +FN
F1 =2
1P+1R
Precision:
Recall:
More on classification quality
AP = P(k)Δr(k)k=1
n
∑
MAP =AP(q)
q∈Q∑
Q
Average precision:
Mean average precision:
MAP — средняя точность на позициях, где есть попадания в top k.
Ranking quality (NDPM)
C+ = sgn rui − ruj( )sgn r̂ui − r̂uj( )ij∑
C− = sgn rui − ruj( )sgn r̂uj − r̂ui( )ij∑
Cu = sgn2 rui − ruj( )ij∑
Cs = sgn2 r̂ui − r̂uj( )ij∑
Cu0 =Cu − C+ +C−( )
NDPM =C− + 1
2Cu0
Cu
Ranking quality (NDCG)
DCGu = r1 +ri
log2 ii=2
n
∑
NDCGu =DCGu
IDCGu
NDCG =NDCGu
U
Пусть для каждого пользователя и item-а задана «релевантность» r
Как оптимизировать ранжирование?
23
│ Давайте смотреть на порядок пар!
BPR: problem setting
Для пользователей u из U и фильмов i из I составим обучающее множество как тройки:
DS = {(u, i, j) : i ∈ Iu+ ^ j ∈ I \ Iu
+}
где Iu+ — фильмы с implicit feedback для данного пользователя
>u — полный порядок на фильмах, причем выполняются свойства:
∀i, j ∈ I : i ≠ j⇒ i >u j∨ j >u i∀i, j ∈ I : i >u j ^ j >u i⇒ i = j∀i, j,k ∈ I : i >u j ^ j >u k⇒ i >u k
полнота
антисимметричность
транзитивность
Байесовская формулировка
p Θ |>u( )∝ p >u |Θ( ) p Θ( )
p Θ |>u( )u∈U∏ = p i >u j |Θ( )δ (u,i, j )∈DS( )
u,i, j∈U×I×I∏ ⋅
⋅ 1− p i >u j |Θ( )( )δ (u,i, j )∉DS( )
Тогда для всех пользователей запишем:
p Θ |>u( )u∈U∏ = p i >u j |Θ( )
u,i, j∈Ds∏
Тогда по свойствам порядка это можно упростить:
Preference model
p i >u j |Θ( ) =σ (x̂uij (Θ))
Окончательно определим модель как:
Здесь x̂uij — «встроенная» модель, которая отслеживает
связь между u, i и j. Например,
- матричное разложение
- модель kNN
BPR-Opt
p Θ( ) = N(0,ΣΘ )Предположим, наконец, априорное распределение параметров:
Тогда весь алгоритм: BPR−Opt := ln p Θ |>u( )= ln p >u |Θ( ) p(Θ)= ln σ x̂uij Θ( )( ) p Θ( )
(u,i, j )∈Ds∏
= ln(u,i, j )∈Ds∑ σ x̂uij Θ( )( )+ ln p Θ( )
= ln(u,i, j )∈Ds∑ σ x̂uij Θ( )( )−λΘ Θ
2
LearnBPR
1. Инициализируем параметры Θ 2. Пока не достигнута сходимость:
1. Выберем пример из Ds
3. Вернем финальные параметры
Θ←Θ+αexp(−x̂uij )1+ exp(−x̂uij )
⋅∂∂Θ
x̂uij +λΘΘ&
'((
)
*++2.
Еще раз о модели рейтинга
Распишем x̂uij = x̂ui − x̂uj
В случае разложения матриц
x̂ui = wu,hi = wuf hiff =1
k
∑
Тогда производные распишутся как
∂x̂uij∂θ
=
(hif − hjf )
wuf
−wuf
0
если θ = wuf
если θ = hifесли θ = hjfиначе
Удачи! Андрей Данильченко группа разработки рекомендательных систем, Яндекс [email protected]
http://www.4ducks.ru/itmo-rs-2014-lecture-4.html