ITMO RecSys course. Autumn 2014. Lecture 5

Preview:

Citation preview

Рекомендательные системы Лекция №5: Deep learning

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

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

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

Language probabilistic model

p(w1T ) = p(wt |w1

t−1)t=1

T

Текст — это последовательность слов. Тогда можно записать:

Если использовать только последние n слов, то получим n-gram model:

p(wt |w1t−1) ≈ p(wt |wt−n+1

t−1 )

где — последовательность слов w1T w1,w2…wT( )

Как обучать такие модели?

•  Введем вектора слов •  Выразим вероятность следующего слова через

вектора предыдущих •  Обучим вектора и параметры модели,

максимизируя правдоподобие

Feedforward NN language model

Что происходит в сети?

x = C wt−1( ),C wt−2( ),!,C wt−n+1( )( )C

H

U

W y = b+Wx +U tanh d +Hx( )

p wt |wt−1,!,wt−n+1( ) =exp ywt( )exp yi( )

i∑

Backprop для NNLM

1. 

2. 

3. 

4. 

x(k) =C wt−k( )x = x(1), x(2),!, x(n−1)( )o = d +Hxa = tanh(o)

yj = bj + aUj

yj = yj + xWj

если есть прямые связи

Forward:

pj = exp yj( )s = s+ pj

pj =pjs

1. 

2. 

3.  (если есть прямые связи)

4. 

5. 

6. 

Backward: ∂L∂yj

= δ j == wt( )− pj

bj = bj +ε∂L∂yj

∂L∂x

=∂L∂x

+∂L∂yj

Wj;

∂L∂a

=∂L∂a

+∂L∂yj

U j;

Wj =Wj +ε∂L∂yj

x

Uj =Uj +ε∂L∂yj

a

∂L∂ok

= 1− ak2( ) ∂L∂ak

; ∂L∂x

=∂L∂x

+ "H ∂L∂o

d = d +ε ∂L∂o; H = H +ε

∂L∂o

"x

C(wt−k ) =C(wt−k )+ε∂L∂x(k)

│ Сама NNLM — обучение │ с учителем.

│ Вектора слов — обучение │ без учителя!

8

Recurrent NN Language Model

x t( ) = w t( )+ s t −1( )

sj t( ) =σ xi t( )ujii∑"

#$

%

&'

yk t( ) = g sj t( )vkjj∑"

#$$

%

&''

где g — softmax.

Input layer:

Context layer:

Output layer:

А можно проще?

10

Continuous bag of words

wt−1wt−2wt−3 wt+1 wt+2 wt+3

wt

input

projection

output

Hierarchical softmax

Обычный softmax — слой размера . Но вместо линейного слоя можно использовать дерево! Таким образом, вместо связей получается .

V

Vlog2 V!" #$

Одно из самых удачных представлений: коды Хаффмана.

Skip-gram model

wt−1wt−2wt−3 wt+1 wt+2 wt+3

wt

input

projection

output

Behind the model…

Цель сети: максимизировать логарифм вероятности 1T

log p wt+ j |wt( )−c≤ j≤c, j≠0∑

t=1

T

Простая skip-gram модель задает эту вероятность как

p wO |wI( ) =exp !vwO

TvwI( )exp !vw

TvwI( )w=1

V∑

где — «выходной» вектор слова !vwO — «входной» вектор слова vwI

Behind the model (2)…

Для skip-gram с иерархическим softmax это можно переписать как

p wO |wI( ) =σ !vn(w, j )vwI( )

j=1

L(w)−1

σ − "vn(w, j )vwI( )j=1

L(w)−1

если n w, j +1( ) = ch n w, j( )( )

иначе

где L w( ) длина пути в дереве для слова w

n w, j( ) j-й узел в пути от корня к , то есть w n w,1( ) = rootn(w,L(w)) = w

ch n( ) произвольный узел-ребенок n

Negative sampling

logσ !vwOTvwI( )+ EwI ~Pn w( ) logσ − !vwi

TvwI( )#$

%&

i=1

k

Будем обучать модель с таким objective (вместо H-SM):

Negative sampling

logσ !vwOTvwI( )+ EwI ~Pn w( ) logσ − !vwi

TvwI( )#$

%&

i=1

k

Будем обучать модель с таким objective (вместо H-SM):

положительные примеры

Negative sampling

logσ !vwOTvwI( )+ EwI ~Pn w( ) logσ − !vwi

TvwI( )#$

%&

i=1

k

Будем обучать модель с таким objective (вместо H-SM):

выберем k примеров по популярности

Negative sampling

logσ !vwOTvwI( )+ EwI ~Pn w( ) logσ − !vwi

TvwI( )#$

%&

i=1

k

Будем обучать модель с таким objective (вместо H-SM):

будем обучать их как негативные

Subsampling of frequent words

p wi( ) =1− tf wi( )

Выкинем слова из обучающего множества с вероятностью:

где — частота слова f wi( )

— параметр (обычно ) t ~10−5

Semantic relationships = vector operations

X = vector "biggest"( )− vector "big"( )+vector "small"( )

X = vector "red"( )− vector "green"( )+vector "vert"( )

X ≈ "smallest"

X ≈ "rouge"

тут примерное равенство означает ближайший к X элемент V

Модели NLP можно применять к любым естественным языкам. Это могут быть любые последовательности, создаваемые человеком. Например, плейлисты.

│ Казалось бы, причем тут │ рекомендации?..

22

Как получить вектора более длинных сущностей?

23

Phrase vectors

В качестве слов в CBOW и Skip-Gram можно передавать все, что хочется. Например, частотные фразы. Выделение частотных фраз можно сделать так:

score wi,wj( ) =count wiwj( )−δ

count wi( )× count wj( )

Теперь добавим результаты к словам и запустим word2vec!

doc2vec: document vector clustering Chinese Restaurant Process

•  выбираем стол с ближайшей суммой векторов (по косинусам) •  с вероятностью n/(n+1) садимся за него, иначе за новый •  или садимся за него, если sim(v,C) > 1/(n+1)

Вектор документа — сумма векторов наиболее репрезентативного кластера (например, по tf-idf).

Paragraph vector: distributed memory

wt−1wt−2d wt+1 wt+2

wt

input

projection

output

Paragraph vector: distributed BoW

input

projection

output

wt−1wt−2 wt+2wt+1wt

d

В качестве документа может выступать что угодно, например, пользователь…

│ Казалось бы, причем тут │ рекомендации?..

28

А где же “deep” learning?

Music content-based recommender

Low-level: signal, MFCC, tempo

High-level: genre, mood, epoch, instrument

Content-based recommender

Semantic gap!

Сверточные сети

Идея: вместо обучения полносвязной сети давайте смотреть на «окрестности» и вводить связи только там. Это реализуется операцией свертки. В нашем случае все просто:

s = xicii∑

Архитектура

Где активируются фильтры?

14 242 250 253

14 — vibrato singing 242 — ambience 250 — vocal thirds 253 — bass drums

Фильтр 37 — китайский язык!

│ Можно обучать что │ угодно! │ Например, вектора SVD.

34

Удачи! Андрей Данильченко группа разработки рекомендательных систем, Яндекс danilchenko@yandex-team.ru

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

Recommended