View
166
Download
2
Category
Tags:
Preview:
DESCRIPTION
ITMO RecSys course. Autumn 2014. Lecture 3. Demo of Oryx. Taxonomy. Similarities & candidate selection: - metric trees - lsh - alsh
Citation preview
Структура
• Demo
• Таксономия
• Similar items & candidate selection • Как строить • Как искать
• metric trees • LSH, ALSH
Audioscrobbler dataset (2005)
http://www-etud.iro.umontreal.ca/~bergstrj/audioscrobbler_data.html
• 148 111 пользователей • 1 631 028 исполнителей • 24 296 858 «событий»
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)∑
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∑
Similarities
Inner product: sij = qiTqj
Cosine distance: sij =qiTqj
qi qj
L2 distance: sij = qik − qjk( )2
k∑ = qi − qj
2
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 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 общая для всех (хорошо работают маленькие)
Требуется и
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( )
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
Recommended