오랜만에 옛날(?) 논문을 가져왔다. 16년도에 구글에서 발표한 추천시스템 모델인 wide and deep 논문이다. 

구글 플레이스토어에서 사용되었고, 대규모 추천 시스템이 가져야하는 효율적인 서빙에 대해서도 고민한 내용이 담겨있다. 

 

간단하지만 강력한 wide&deep에 대해 알아보자. 

 

그럼 시작! 


1. Introduction

본 논문에서 추천의 범위는 '검색'에 대한 '랭킹' 추천이다. 1) given input을 Query로 정의하고, 2)해당 쿼리와 유사한 아이템(여기서는 플레이스토어니까 앱)들을 가져와서, 3) 의도에 맞게 랭킹을 메겨 내려준다. 

 

이 논문에서는 추천이 풀고자 하는 과제를 2가지로 정의했다. 

  1. Memorization
    1. 유저가 이전에 한 행동, 즉 과거 데이터를 추천에 녹인다. 
    2. 과거 유저가 이런 행동을 했다는 걸 쿼리하는 예시를 보면 이해가 된다. (AND(user_installed_app=netflix, impres-sion_app=pandora”)) 
  2. Generalization 
    1. 과거에 거의 발생하지 않았던 새로운 피쳐와 correlation을 찾는다. 과거에 기반하지 않기 때문에 추천 다양성을 의미하는듯 하다. 
    2. 유저의 조금 덜 뾰족한 피쳐들을 사용할 수 있다. AND(user_installed_category=video, impression_category=music)

Wide&Deep 이름의 유래를 알아보자. 

  • Wide component 
    •  일반적으로 linear regression으로 푼다. 
    • 위 Memorization, Generalization에서의 AND 으로 가져온 피쳐들을 사용하는데(cross product) 당연하지만 장점은 유저의 특징을 모델에 녹일 수 있다는 거다. 
    • 그렇기에 단점은 train에 사용하지 않은 피쳐가 실제 infer에 나타났을 경우엔 취약하단 거다. 
    • -> Memorization > Generalization 
  • Deep component 
    •  Factorized Machine(FM), DNN이 여기에 해당한다. 
    • 피쳐들을 dense embedidng화하기 때문에 일반화에 대해서는 Wide component에 비해 잘한다. 반면 query item metrix가 너무 sparse하거나 가져올 수 있는 피쳐들이 적다면 over generalization될 수 있다. 
    • -> Generalization > Memorization 

그래서 Wide&Deep은 DNN과 logistic regression을 합쳤다.  

 

2.RECOMMENDER SYSTEM OVERVIEW

추천시스템을 설명해둔 섹션인데, 간단히 요약해보겠다. 추천시스템을 크게 retriever와 ranker로 나눌 수 있다. 

유저 쿼리가 주어졌을 때 retrieval단계에서 추천할 후보 풀 아이템들을 가져온다. (모든 아이템들을 가져와서 ranking을 메기는 것은 온라인 추천에선 현실적으로 불가하다.) 

이후 ranker에서 유저 별 아이템풀들에 대한 랭킹을 메긴다. 

출처: Wide&Deep paper

 

3. Wide & Deep Learning

아래 figure 1을 기준으로 보자. 맨 아래 하단은 sparse features, 위에서 AND 구문 안에 들어갔던 유저 또는 아이템 피쳐들이다. 

 

1. Wide Models에서는 이 피쳐를 그대로 logistic regression 등을 통해 output을 생성한다. 해당 feature들은 binary로 표현된다. 

(ex. lang=en, 성별=f -> {'en': 1, 'f': 1, 'm': 0, ...} 

 

2. 반면 Deep Model은 피쳐들을 dense embedding으로 만든다. 

 

3. 이 둘을 합친 Wide&Deep은 deep은 deep대로, wide는 wide대로 진행하되 마지막 layer에서 deep과 wide의 output을 합친다. 앙상블 모델인가 싶지만 joint training 을 한다. backpropagation은 같이 진행되기 때문. 

출처: wide&deep paper

 

합칠 땐 weighted sum된 상태로 logistic regression을 사용한다. 아래 식에서 φ는 origin feature의 cross dot product, 즉 Wide에 해당한다. a는 Deep model의 final activation layer까지 통과한 벡터를 의미한다. w_wide와 w_deep은 각각 wide와 deep의 weight 가중치다. 

 

 

4. SYSTEM IMPLEMENTATION

 

data generation에서는 단어들은 categorical화 했고, continuous value는 min max 0, 1해서 quantile별로 값을 메기는 normalization을 진행했다. 

 

학습을 위한 model architecture는 다음과 같다. deep에서 relu를 3번이나 태운다.(hidden layer가 3개라는 뜻으로 보인다.) wide에서 사용한 피쳐는 유저가 아이템에 준 피드백들이 대상이다. 

 

 

 

학습 데이터는 500B개를 사용했다. 

 

 

5. Conclusion

wide보단 deep이, deep보단 deep&wide의 Acquisition Gain이 더 높았다. 

 

논문에서 리포트한 당시 peak 트래픽이 10 ms다.

 


 

키포인트는, DNN으로 랭킹 모델을 만들었지만, 유저의 피드백과 같이 memorization에 해당하는 부분은 Wide 모델로 보강을 해줬다는 거다. 

728x90

+ Recent posts