itmo recsys course. autumn 2014. lecture 3

36
Рекомендательные системы Лекция 3: SVD environment Андрей Данильченко 8 ноября 2014

Upload: andrey-danilchenko

Post on 07-Jul-2015

164 views

Category:

Education


2 download

DESCRIPTION

ITMO RecSys course. Autumn 2014. Lecture 3. Demo of Oryx. Taxonomy. Similarities & candidate selection: - metric trees - lsh - alsh

TRANSCRIPT

Рекомендательные системы Лекция №3: SVD environment

Андрей Данильченко 8 ноября 2014

Структура

•  Demo

•  Таксономия

•  Similar items & candidate selection •  Как строить •  Как искать

•  metric trees •  LSH, ALSH

Demo

https://github.com/cloudera/oryx

Архитектура системы

Audioscrobbler dataset (2005)

http://www-etud.iro.umontreal.ca/~bergstrj/audioscrobbler_data.html

•  148 111 пользователей •  1 631 028 исполнителей •  24 296 858 «событий»

Давайте попробуем!

Таксономия

•  Koren’s

•  Tag

Таксономия

Koren’s

Items are not alone!

Baseline model revisited

Модель: r̂uiu = µ + bu + bi

argminp*q*b*

ruiu −µ − bu − bi( )(u,i)∈R∑

2+λ bu

2 + bi2( )

Функция ошибки:

Baseline taxonomy

Модель: r̂ui = µ + bu +Bi

argminp*q*b*

ruiu −µ − bu −Bi( )(u,i)∈R∑

2+λ bu

2 +Bi2( )

Функция ошибки:

Bi = bi + bartist (i) +1G(i)

bgg∈G(i)∑где

Таксономия: дан трек i, его исполнитель artist(i) и жанры G(i)

SVD taxonomy

Модель: r̂ui = µ + bu +Bi + pu

TQi

argminp*q*b*

ruiu −µ − bu −Bi − puTQi( )

(u,i)∈R∑

2+λ bu

2 +Bi2 + pu

2 +Qi2( )

Функция ошибки:

Bi = bi + bartist (i) +1G(i)

bgg∈G(i)∑

где

Таксономия: дан трек i, его исполнитель artist(i) и жанры G(i)

Qi = qi + qartist (i) +1G(i)

qgg∈G(i)∑

Таксономия

Tag

ALS revisited

Модель: r̂uiu = pu

Tqi

argminp*q*b*

ruiu − puTqi( )

(u,i)∈R∑

2+λ pu

2+ qi

2( )Функция ошибки:

P-step: pu = λnuI + Au( )−1 duAu =Q[u]

TQ[u]= qiqiT

i: u,i( )∈R∑

d =Q[u]T ru = ruiqii: u,i( )∈R∑

Q-step: qi = λniI + Ai( )−1 diAi = P[i]

T P[i]= pupuT

u: u,i( )∈R∑

di = P[i]T ri = rui pu

u: u,i( )∈R∑

ALS graph

user

s item

s

ALS graph

1

2

3

user

s items

links

1

2

3

Taxonomy idea

1

2

3

user

s lin

ks

items

1

2

3

Metric trees

Similarities & candidates

Similarities

Inner product: sij = qiTqj

Cosine distance: sij =qiTqj

qi qj

L2 distance: sij = qik − qjk( )2

k∑ = qi − qj

2

Как быстро находить кандидатов?

Metric tree idea

Metric tree construction

function TreeNode kdTree(points, depth) { int axis = depth mod k; select median by axis from points; TreeNode node; node.location = median; node.left = kdTree(points before median, depth+1); node.right = kdTree(points after median, depth+1); return node;

}

O n logn( )Работает за

Nearest neighbor search in KD tree

1. Спускаемся по дереву до листа 2. Назначаем его «лучшим» 3. Поднимаемся вверх по дереву:

1.  Если текущий элемент ближе, то он становится «лучшим» 2.  Проверяем, могут ли быть более близкие элементы в другом

поддереве •  Если да, то выполняем такой же рекурсивный поиск в поддереве •  Если нет — поднимаемся выше

4. Если дошли до корня, выводим «лучший»

O logn( )Работает за

А что делать с косинусным расстоянием?

А что делать с поиском кандидатов?

Преобразование пространства

φ =maxi yiMIP => NN:

g(yi ) = φ 2 − yi2 , yi

T( )T

h(x) = 0, xT( )T

Тогда j = argmini

h(x)− g(yi )2= argmax

ix ⋅ yi

То есть получилось сведение MIP к NN

Можно построить и обратные преобразования!

Эвристика для поиска в дереве

• Построим PCA-tree— kd-tree по осям главных компонент

• Пронумеруем листы в дереве двоичными числами

• Будем искать соседей только с расстоянием Хэмминга 1

Locality Sensitive Hashing

Similarities & candidates

Требуется и

Locality Sensitive Hashing Family

Введем такое семейство хэш-функций , что Hx, y ∈ℜnдля любых

если sim(x, y)> S0 то PH h(x) = h(y)( ) ≥ p1

если sim(x, y)< cS0 то PH h(x) = h(y)( ) < p2

Возьмем k хэшей из H и составим мета-хэш Bi (x)Таких мета-хэшей посчитаем L штук независимо.

c <1 p1 < p2

Search for LSH

• Pre-processing: –  По всей базе посчитаем значения всех мета-хэшей

• Query: –  Посчитаем для вектора-запроса мета-хэши и вернем все исходные вектора, у которых совпал хотя бы один мета-хэш

Поиск работает за с памяти O(np logn) O(n1+p )

p = log p1log p2

<1

LSH for L2

ha,bL2 =

aT x + br

!

"!

#

$#

Хэш-функция из H:

ai ~ N 0,1( )b ~U 0,1( )r общая для всех (хорошо работают маленькие)

Но это для L2!

Требуется и

Asymmetric LSH Family

Введем такое семейство хэш-функций , что Hx, y ∈ℜnдля любых

если sim(q, x)> S0 то PH h(Q(q)) = h(P(x))( ) ≥ p1

если sim(q, x)< cS0 то PH h(Q(q)) = h(P(x))( ) < p2

Дальше аналогично составим мета-хэши и построим поиск

c <1 p1 < p2

Преобразования пространства

P(x) = x, x 2 , x 4… x 2m( )

Q(q) = q, 12,12…

12( )

Доказательство P(x) = x, x 2 , x 4… x 2m( )Q(q) = q, 12,

12…

12( )

xi ≤U <1Положим q =1

Тогда P(x) 2 = x 2+ x 4

+…+ x 2m+ x 2m+1( )

Q(q) 2 = q 2+m4=1+ m

4

Q(q)T P(x) = qT x + 12

x 2+ x 4

+…+ x 2m( )В итоге Q(q)−P(x) 2 = 1+ m

4"

#$

%

&'− 2qT x + x 2m

argmin Q(q)−P(x) 2 ≈ argmaxqT x

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

разработчик

www.4ducks.ru