ITMO RecSys course. Autumn 2014. Lecture 6

41
Рекомендательные системы Лекция 6: Sequence recommenders Андрей Данильченко НИУ ИТМО, 20 декабря 2014

Transcript of ITMO RecSys course. Autumn 2014. Lecture 6

Рекомендательные системы Лекция №6: Sequence recommenders

Андрей Данильченко

НИУ ИТМО, 20 декабря 2014

Почему классических рекомендаций может быть недостаточно?

Рекомендательная система – пример

SVD Metadata Features

Recommender

Рекомендательная система – пример

SVD Metadata Features

Recommender

?

Рекомендательная система – пример

SVD Metadata Features

Recommender

Рекомендательная система – пример 2

SVD Metadata Features

Recommender

│ Плейлист — это фраза на │ некотором естественном │ языке

7

Где используют этот язык?

Как построить модель последовательности?

Station-based model

L S;Θ( ) = logP i | s;t,Θ( )(i,t )∈PS

∑PS∈S∑

Правдоподобие плейлиста станции:

Для станции:

P i | s;t,Θ( ) =exp(rsi;t )exp(rsj;t )

j∑

rsi;t = bi + qiTvs

Как учесть контекст?

rsi;t = bi + qiT vs + vs

slot (t ) +1Ps(t,w)

qjj∈Ps

( t ,w )∑

#

$

%%%

&

'

(((

Введем временные слоты (например, 8 равных слотов в день). Тогда к вектору трека добавится еще параметры — вектора этого трека для каждого слота:

rsi;t = bi + qiT vs + vs

slot (t )( )Кроме того, учтем треки из маленького временного окна (например, 30 минут) : t −w,[ t)

Как учесть негативный фидбек?

Будем обучать правдоподобие так:

L S;Θ( ) = logP i | s, t,Θ( )(i,t )∈PS

∑PS∈S∑ +

+ log 1−P i | s, t,Θ( )( )(i,t )∈NS

∑NS∈S∑

Stationless model

L S;Θ( ) = logP i s;t,Θ( )(i,t )∈PS

∑PS∈S∑

Правдоподобие плейлиста станции:

Для станции:

P i s;t,Θ( ) =exp(rsi;t )exp(rsj;t )

j∑

rsi;t = bi + qi1( )( )

T 1Ps

qj2( )

j∈Ps

∑ +1Ps(t,w)

qj3( )

j∈Ps( t ,w )∑

$

%

&&&

'

(

)))

Обучение

η∂ logP i s;t( )

∂θ=η

∂rsi;t∂θ

− P j s;t( )∂rsj;t∂θj

∑$

%&&

'

())

Простой SGD с шагом:

Обучение

η∂ logP i s;t( )

∂θ=η

∂rsi;t∂θ

− P j s;t( )∂rsj;t∂θj

∑$

%&&

'

())

Простой SGD с шагом:

По всем item-ам!

Importance sampling

w i | S( ) =exp rsi;t( ) P i | S( )exp rsj;t( ) P j | S( )

j∈J∑

Будем сэмплировать множество item-ов J из P i | S( )

Тогда вероятность можно заменить на P i | s;t( )

Шаг SGD перепишется как

η∂ logP i s;t( )

∂θ≈η

∂rsi;t∂θ

− w j | S( )∂rsj;t∂θj∈J

∑&

'((

)

*++

Как выбрать размер J?

Хочется, чтобы с ходом обучения J росло. Тогда определим такое правило:

P j | s;t( )j∈J∑ > P i | s;t( )⇔ exp rsj;t( )

j∈J∑ > exp rsi;t( )

Будем сэмплировать item-ы в J, пока оно выполнено.

Снова похожести

18

Item2item with multinomial units

P j | i( ) =exp − yi − yj

2+ bj( )

exp − yi − yk2+ bk( )

k∑

Вероятность j быть похожим на i

Как и раньше обучаем log-likelihood:

L = logP j | i( )i, j( )∈D∑

Обучение

Это приводит нас к шагу SGD

Δθ =η∂ logP j | i( )

∂θ=

=η∂∂θ

− yi − yj2+ bj( )+ P k | i( ) ∂

∂θ− yi − yk

2+ bk( )

k∑

%

&'

(

)*

И снова при подсчете шага нужно пройтись по всем item-ам…

Importance sampling Как и раньше будем сэмплировать множество J . Тогда вероятности заменятся на:

w k | i( ) =exp − yi − yk

2+ bk( ) P k |D( )

exp − yi − yj2+ bj( ) P j |D( )

j∈J∑

А обновление примет вид:

Δθ =η∂∂θ

− yi − yj2+ bj( )+ w k | i( ) ∂

∂θ− yi − yk

2+ bk( )

k∈J∑

&

'(

)

*+

Fast retrieval Наилучший похожий item может быть найден как

maxj≠i

P j | i( )⇔maxj≠i

− yi − yj2+ bj( )

Но это не евклидово пространство!

Fast retrieval Наилучший похожий item может быть найден как

maxj≠i

P j | i( )⇔maxj≠i

− yi − yj2+ bj( )

Но это не евклидово пространство! Тогда давайте построим сведение:

y j = yjT , Mb − bj "#

$%

T

yi = yiT , 0]!"

T

maxj≠i

P j | i( )⇔maxj≠i

yi − y j2

Как треки представляются в латентном пространстве?

24

Представление треков

│ Плейлист — это путь │ в латентном пространстве

26

Single-point model

P p[i] | p[i−1]( ) = e− X p[ i ]( )−X p[ i−1]( )

2

2

e− X s( )−X p[ i−1]( )

2

2

s∈S∑

=e−Δ p[ i ],p[ i−1]( )

2

Z(p[i−1])

Вероятность следующего трека:

Вероятность плейлиста:

P p( ) = Pi=1

kp

∏ p[i] | p[i−1]( ) = e−Δ p[ i ],p[ i−1]( )2

Z(p[i−1])i=1

kp

Обучение

X = argmaxX∈ℜ|S|×d

e−Δ( p[ i ],p[ i−1] )2

Z p[i−1]( )i=1

kp

∑p∈D∑

L D;X( ) = −Δ(p[i], p[i−1])2 − logZ p[i−1]( )i=1

kp

∑p∈D∑

Максимизируем log-likelihood:

Функционал:

Представление треков

Но трек — это не точка во времени!

Dual-point model

Представляем трек как две точки: начало и конец

Dual-point model Вероятность плейлиста:

P p( ) = Pi=1

kp

∏ p[i] | p[i−1]( ) = e−Δ2 p[ i ],p[ i−1]( )2

Z2 (p[i−1])i=1

kp

V,U( ) = argmaxV ,U∈ℜ|S|×d

e−Δ2 ( p[ i ],p[ i−1] )2

Z2 p[i−1]( )i=1

kp

∑p∈D∑

Функционал:

где Δ2 s, "s( ) = V s( )−U "s( )U s( ) — входной вектор трека s

V s( ) — выходной вектор трека s

Регуляризация

X = argmaxX∈ℜ|S|×d

L D | X( )−λ XF

2

(V,U) = argmaxV ,U∈ℜ|S|×d

L D |V,U( )−λ VF

2+ U

F

2( )−−ν Δ2 s, s( )2

s∈S∑

Single-point model:

Dual-point model:

Обучение модели

L D |U,V( ) = Tabl sa, sb( )b=1

|S|

∑a=1

|S|

∑ −Ω V,U( )

l sa, sb( ) = −Δ2 sa, sb( )2 − logZ2 sa( )

U sp( ) =U sp( )+ τN Tpb∂l sp, sb( )∂U sp( )

−∂Ω V,U( )∂U sp( )b=1

|S|

∑%

&''

(

)**

V sq( ) =V sq( )+ τN Tpb∂l sp, sb( )∂U sq( )

−∂Ω V,U( )∂U sq( )b=1

|S|

∑%

&''

(

)**

Для каждого трека p обновляем его выходной вектор:

И входные вектора по всем его связям q:

Landmark heuristic

L D |U,V( ) = Tabl sa, sb( )sb∈Ca

∑a=1

|S|

∑ −Ω V,U( )

Сократим множество «входов» в переходах:

Случайно выберем некоторое количество треков (около 50). Это наши «ориентиры».

При составлении сначала добавим в него существующие связи. Затем будем дополнять случайными точками из ориентиров до тех пор, пока

Ca

Car

N< r

Расширения модели

Учет популярности:

P p i[ ] | p i−1[ ]( ) =exp −Δ2 p[i], p[i−1]( )

2+ bi( )

−Δ2 sj, p[i−1]( )

2+ bj

j∑

Персонализация:

P p i[ ] | p i−1[ ],u( ) =exp −Δ2 p[i], p[i−1]( )

2+ A p[i]( )

TB u( )( )

−Δ2 sj, p[i−1]( )

2+ A sj( )

TB u( )

j∑

Учет тэгов

Введем априорное распределение на вектора треков:

P X s( ) |T s( )( ) = N 1T s( )

M t( )t∈T (s)∑ , 1

2λId

#

$%%

&

'((

Это хорошо обобщает регуляризацию, если тэгов нет, то

P X s( ) |T s( )( ) = N 0, 12λ

Id!

"#

$

%&

Генерация плейлистов

P p i[ ] | p i−1[ ], p 0[ ]( ) =exp −αΔ p[i], p[i−1]( )

2+βbi −γΔ p[i], p[0]( )

2( )Z p[i−1], p[0],α,β,γ( )

В общем виде можно задать так:

Как выглядит результат?

Дрейф векторов

User-dynamic embedding

P p i[ ] | p i−1[ ],u(t )( ) =exp −Δ2 p[i], p[i−1]( )

2+Δ p[i],u(t )( )

2+ bi

(t )( )Z p[i],u(t )( )

Пользователь тоже может быть представлен вектором:

Запретим вектору пользователя двигаться слишком быстро:

X u(t )( ) ~ N X u(t−1)( ), 12νuser

Id"

#$

%

&'

Удачи! Андрей Данильченко группа разработки рекомендательных систем, Яндекс [email protected]

http://www.4ducks.ru/itmo-rs-2014-lecture-6.html