GRU4Rec : Session based Recommendations with Recurrent Neural Networks - penny4860/study-note GitHub Wiki
1. 정리
요약
- Deep Rnn 구조를 개인화 추천에 적용한 첫 번쨰 논문
- Session-Parallel mini-batches
-
- BPTT를 사용하지 않고, 1-step만 사용
- 1개 sequence전부를 같은 batch에 넣지 않고, 1개 session에서 1개만 뽑아서 batch를 구성
- Popularity-based sampling
- item 전부에 대한 parameter를 업데이트 하지 않고 일부만 update
- sample
- positive sample : target item
- negative sample : 같은 batch내 item
- popularity의 의미
- popular한 item인데 유저가 반응하지 않은 item은 싫어하는 (negative) item
- ranking loss
- xentropy보다 좋음
- pairwise로 positive/negative에 대해서 사용
- 평가 metric
- recall@20 : CTR과 같은 지표와의 correlation이 크다.
- MRR@20 : Actual order를 반영
질문
2. 내용
3. Recommendations with RNNs
3.1 Customizing the GRU model
- item의 embedding vector를 다른 deeper GRU 에도 입력
3.1.1 Session-Parallel mini-batches
- mini-batch 구성방법
- 일반적인 rnn : 1개의 sequence를 같은 batch에 포함되도록 구성
- Session-Parallel : 1개 session에서 1개만 뽑아서 batch를 구성 :
parallel
3.1.2 Sampling on the output
- 네트워크의 output에서 sampling이 필요한 이유
- 추천 task의 경우 target item의 숫자가 너무 많다.
- item의 일부만 sampling 해서 weight를 update하는 것이 좋다.
- Popularity-based sampling
- 가정
- popular item중에서 user와 interaction(클릭,구매)이 없는 item은 그 유저가 싫어하는 item이다.
- unpopular item중에서 user와 interaction이 없는 item은 좋은지 싫은지 알 수 없음.
- positive / negative sampling
- (+) : session내에서 next item을 positive example로 사용
- (-) : 같은 batch 내부에서 다른 training example을 negative example로 사용
3.1.3 Ranking Loss
- cross entropy보다는 ranking loss가 좋음.
- Ranking loss의 분류
- pointwise : item 1개씩 update
- pairwise : positive/negative의 score를 update
- listwise : 모든 item의 ranking을 구해서 ordering & update
- Pairwise ranking loss
- BPR
- sum_over_j [log(sigmoid(r_i - r_j))] / sample_size
r_i
: desired item의 score
r_j
: negative item의 score
- Top1 :
sum_over_j [sigmoid(r_j - r_i) + sigmoid(r_j**2)] / sample_size
positive score > negative score
& negative score ~ 0
4. Experiments
- 평가 metric
- recall@20
- actual order는 반영되지 않는다.
- CTR과 같은 지표와의 correlation이 크다.
- MRR@20 : mean reciprocal rank
- 1등이면 1.0, 2등이면 1/2, .... 20등이면 1/20
- Actual order를 반영하는 metric
4.1 Baselines
- Popularity predictor
- S-POP
- 현재 session에서 most popular item을 추천
- Item-KNN
4.2 Optimization
- GRU가 LSTM이나 vanial rnn보다 좋음.
- loss
- xentropy보다 ranking loss가 stable
- pairwise ranking loss가 좋음.
- 모델구조
- GRU 1개만 사용한 구조가 deeper구조 보다 좋았음.
- GRU의 hidden unit숫자는 크게 잡는것이 좋았음. (1000개)