Recommender System/논문 및 블로그 리뷰

[Recommender System] - 3D CNN for Session-based Recommendation 번역 & 리뷰

Yamarae 2019. 3. 25. 18:28

 

 

업무 차 해외출장을 갔던 도중, 운이 좋게도 <3D Convolutional Networks for Session-based Recommendation with Content Features> 논문의 저자를 만날 기회가 있었다. 그래서 급하게 질문거리를 만들기 위해 논문 리뷰를 했는데, 워낙에 글쓰기적으로 잘 쓴 논문이라 반나절만에 빠른 논문 리뷰가 가능했다. 그래서 이번 포스팅은 번갯불에 콩 구워먹듯 읽어본 논문을 다시 한 번 소화시키기 위해 정리하는 포스팅이다.

 

이 논문은 Recommender System 관련 paper에서 꽤나 인지도가 있었던 논문이다. criteo, RecSys 등의 영향력 있는 추천 미디어에 선정된 논문이기도 하며, 아이디어 자체가 굉장히 재미있어서 주목받았던 아티클이다. 보통 추천 시스템에 적용되는 알고리즘은 feature 관점에서 cross-feature 를 찾아내거나, implicit feedback을 활용하는 방법에 포커스가 맞춰지곤 하는데, 여기서는 아주 다른 관점에서 추천 알고리즘의 feature를 풀어낸다.

 

하지만 결론적으로는, 유행하는 알고리즘을 흥미롭게 짜깁기한 형태가 되어버렸다. 그래서 학문적인 읽을거리로써는 아주 흥미롭고 가치도 있는 논문이지만, 실제 추천 상황에 적용하기에는 다소 어렵지 않을까 생각해본다. 

 

나의 의견은 이렇다. 저자가 주장하는 바가 학문적 가설에만 근거하며, 평가에 대한 metric이 다소 편협하다는 아주아주 주관적인 의견. (논문을 읽고 어디엔가 잘 적용해 보았거나, 학문적으로 귀중한 의미를 찾아낸 사람의 태클을 환영한다) 하지만 아이디어는 정말 재미있고, 알고리즘의 디자인도 단순한 편이라 빠르게 적용해보기도 좋을 것 같다. 만약 공평한 dataset을 가지고 일반적인 metric으로 평가했다면 어떤 결과가 나왔을지 궁금하긴 하다. 어쨌든 이 논문은 cold-start problem의 해결에 하나의 작은 길을 개척했다고도 평가할 수 있겠다. (옳은 길이라고는 못하겠다)

 

참고. 본 포스팅은 링크의 논문을 요약 및 번역한 것이며, 단순 번역에 추가하여 주관적인 의견과 해석, 비유를 덧붙였다.

 

 


 

 

 

3D Convolutional Networks for Session-based Recommendation with Content Features

 

 

 

Abstract

 

기존의 실제 추천환경에서는 user-profile, activities log 등 Implicit 레벨에서의 데이터에서 접근했기 때문에, 모델 자체가 아주 높은 성능까지 이끌어내지는 못하였다. 이는, 더 정확히는 session 데이터(클릭 데이터, 클릭된 아이템의 description)를 의미한다. 기존의 전통적인 추천의 접근법은, user-item interaction에 기반한다. 이런 상황에서는 아주 정확한 성능을 기대하기 힘들다. 그래서 이 논문에서는 session click과 content feature, 그리고 아이템의 category를 결합한 새로운 추천 방법을 제시한다. 이러한 모델을 만들기 위해 데이터가 nature한 특성을 가질 수 있도록, 3d-CNN을 이용하여 character-level로 인코딩된 input data를 활용하고자 한다. 3d 구조는 데이터의 시공간적 패턴을 표현할 수 있는 가장 자연스러운 방법이다. (이 부분은, 저자가 과학과 철학에 꽤나 조예가 깊다는 것을 알 수 있는 대목으로 보인다. 3d 구조를 시공간적 패턴으로 연결시키는 능력은 단순히 머신 러닝만 잘한다고 주장할 수 있는 개념이 아니라고 생각한다) 그리고 모든 피처를 character-level 네트워크 방식으로 raw 데이터 처리과정을 거치게 되면, feature engineering effort를 감소하는 효과도 있다. 이 모델의 연구 결과는 add-to-cart 행동을 예측하는데 사용되었으며, 이는 next click보다 훨씬 예측하기 어려운 것이다. 이 방식은 SOTA인 RNN 기반 prediction보다 더 높은 성능을 보여준다. (사실 이 결과는 믿을만 한 것이 못 된다. 잘 알려진 데이터셋에 동일한 metric을 적용한 것이 아닌, 본인들의 데이터를 적용한 것이기 때문. 대부분의 연구는 이런 식의 사기를 치긴 하지만.)

 

 


 

 

Introduction

 

기존의 추천시스템에서 개인화된 결과를 제공하기 위해서는, 유저의 행동 기반 히스토리를 기반으로 profile을 추출하였다. 혹은 explicit rating이나 view log, comment 등의 데이터를 활용하여 이를 실제와 근사하게 프로파일링 하는 개념에 가까웠다. 예를 들면, 주어진 유저에 CF를 적용하여 latent factor를 뽑아내고, Factorized된 Matrix에서 similar profile을 찾아내는 추천 방식이다. 또 다른 방법으로는 Content based 방법이 있다. 이 방법들의 공통점은 user profile 정보를 신뢰하며 활용한다는 것인데, 이 user profile이라는 것이 실제와는 괴리감이 있을 것이다. (이 부분은 아주 공감했는데, user profile을 만드는 것에 대한 제대로 된 검증을 본 적이 없는 것 같다. 하지만 이 논문에서도 user profile을 심도있게 검증하지는 않는다)

 

그래서 온라인상에서 제대로된 profile을 만들기 위해서 유저간의 구분 가능한 session을 통해서 식별해야 한다는 것이 저자의 요지이다. 대부분의 웹사이트는 사용자 인증을 건너뛴 채로 유저가 활동하게 내버려둔다. 물론 쿠키나 지문인증 서비스 등을 이용하여 이를 캐치할 수 있지만, 이를 실제로 잘 활용하기에는 여러 제약이 따른다. 브라우저 쿠키는 크게 믿을만 하지 못하고, 지문인증은 개인정보 문제가 발생한다. 게다가 이런 정보를 잘 캐치해도, profile이 제대로 된 정보적 역할을 하려면 유저의 많은 활동을 요구한다. 대부분의 유저가 중소 커머스 웹사이트에서 충성도가 낮은 것을 고려하면, 이것은 꽤나 큰 문제이다.

 

그래서 제대로 된 user profile을 얻어낼 수 없다는 결론에 도달한다면, 일반적인 해결법은 session 정보를 활용하여 추천 모델링에 응용하는 것이다. 세션 데이터는 두 가지 중요한 특징을 가지고 있는데, 첫째로 session click은 sequential한 데이터라는 것이다. 이는 유저의 의도를 담고있는 가장 자연스러운 정보이다. 그리고 두번째로, 클릭된 아이템은 이름이나 카테고리와 같은 metadata와 연결되어 있다는 것이다. 이 정보들은 유저가 가지고 있는 추가적인 취향 정보들을 담고있다. user profile 정보의 부재가 일어나는 상황이라면, 이 두 가지 특징을 잘 활용해서 데이터로부터 더 많은 정보들을 추출해내야 한다.

 

그래서 저자가 주장하는 session-based recommendation 방법은 다음과 같은 특성으로 전개된다.

 

1. 이 방법은 click stream session 데이터로부터 sequential한 모델링을 해야한다. 이전에 아마존의 추천 알고리즘으로 널리 알려져 있던 item-to-item kNN의 경우, item간의 순서를 고려하지 않은 co-occurences 방법이었다. 그리고 last click에 기반한 다른 모델링의 경우, 이전의 click 정보들을 모두 무시하게 된다. 연구의 결과에 따르면, 가장 최근의 정보와 sequential한 정보, 그리고 모든 past history를 고려하는 것이 가장 좋다고 한다. 

 

2. 이 방법은 item id와 메타데이터를 표현하는 가장 간단한 결합 방법을 제시한다. 일반적으로 하나의 아이템은 다른 타입의 여러 피처들과 연결되어 있다. 예를 들면 ‘112321’ 이라는 아이템 id가 text 정보, text description, 그리고 hierarchy category 정보를 가지고 있는 것 처럼 말이다. 현존하는 대부분의 방법은 이러한 피처들의 독립성을 가정한다. 그 경우, 피처 엔지니어링에 쏟아야 하는 시간이 기하급수적으로 늘어난다. 그래서 조금 더 실용적이고 자동화된 방법을 제안하고자 하는 것이다.

 

이 방법이 갖는 장점은 다음과 같다. 우선 item id, textual information에 one-hot encoding을 적용한 기존 연구와 다르게, character-level encoding은 훨씬 사용하기 좋고 정확한 input을 전달해준다. 그리고 embedding layer도 별도로 필요하지 않다. 당연하게도 이에 따라 parameter 개수도 급감하게 된다. sparse한 one-hot encoding의 경우 파라미터가 많기 때문이다.

 

 

다음으로 prediction과 결과의 평가에 대한 것을 언급하고 있다. 

 

session based 추천을 평가하기 위한 방법은 유저의 next 액션을 top prediction list로 잘 예측하는 것이다. 그러나 next 액션을 잘 평가하는 것은 뉴스와 같은 미디어 페이지에는 적합한 방식이지만, e-commerce에서는 다소 부족한 방법이다. 게다가 일반적인 상황에서는 next action prediction 보다, purchase prediction이 훨씬 어렵다. (아마도 CTR보다 CR 예측이 더 어렵다는 이야기인가?)

 

그래서 3D CNN을 이 모든 상황을 해결해줄 방법으로 제시하고 있는데, 한 세션 안에서의 수집 가능한 모든 유저의 클릭을 input으로 활용하여 short list of items 를 추천해준다고 한다. 

 

 


 

 

Related Works

 

선행연구에 대한 언급 부분이다. 대부분 일반적인 내용이지만, 저자의 연구 방향에 대한 힌트가 될 만한 내용들을 언급하였다.

 

 

1. CB, CBF

 

기존의 CF, CBF의 방식(저자는 계속해서 아마존의 kNN을 언급하고 있음)은 user-item interaction 기반의 user-profile을 필요로 한다. 그리고 이 두 개의 방법을 하이브리드하면, 저자가 최종적으로 주장하고 싶은 user profile(session based)과 content feature의 combined model이 된다고 한다. 그렇다면 결국, 추천의 패러다임을 바꾸는 일을 했다기보다는, session과 CNN+character-level의 인코딩을 통해 조금 더 실제에 가까운 natural 한 모델을 연구했다는 것이 이 저자가 하고싶은 이야기인듯 하다. 하지만 저자가 아마존이 내부에서 사용하는 kNN을 제대로 구현해냈을리는 없다. 그래서 이 비교는 약간 어불성설이다.

 

 

2. Deep Learning

 

본 논문에서는 추천 시스템에서 DL을 적용하여 활발히 연구가 된 예로, autoencoder(RBMs)과 FCs를 포함한 feature extraction 예시를 들고 있다. 결국 이 feature 역시 CF에 들어가는 형태로, 흔히 Deep CF 라고 불리는 기법을 이야기하는 듯 하다. 이 개념 역시 user-item based의 CF feature extraction 에서의 sparsity problem을 극복하는 것이 목적이다. 저자가 풀고자 하는 문제와 본질이 동일하다고 할 수 있겠다.

 

아마도 논문의 결정적인 힌트를 얻은 것은 Van den Oord의 연구로, 이 연구는 autoencoder 대신 CNN layer를 이용하여 sparsity problem을 극복한 연구이다. 구글이 발표한 최신 연구결과(이 논문의 발표 당시)에서도, CNN 레이어를 user-item 임베딩에 활용했다고 한다.

 

 

3. Session based recommendation

 

전통적인 CB, CBF는 session-based 데이터에서 잘 동작하지 않는다. 이는 user profile이 잘 정립되지 않은 상황에서 두드러지는데, 그래서 item based CF가 가장 잘 동작하는 방법으로 여겨지는 것이다. 본 논문에서는 이와 아주 유사하게, frequently clicked together item in the same session을 찾아내서 추천하고자 한다. 이 방법이 전통적인 item based CF와 구별되는 지점이 중요하다. 

 

item based CF는 하나의 아이템이 동일한 유저로부터 평가받으면 비슷하다고 간주되는 아주 심플하면서도 훌륭한 아이디어이다. 하지만 클릭의 순서와 최신성(last click)을 고려하지 않는다는 단점을 지니고 있다. 본 논문의 prediction model은 Rendle(FM의 저자)이 연구했던 Factorized Personalized Markov Chains과 같이(sequential 정보를 아이템간의 그래프 정보로써 표현함으로써 next-item을 예측), sequential한 정보로 prediction을 수행한다. 하지만 다른 점은, Rendle의 연구에서는 모든 정보를 same user set에서 추출했지만 이 연구에서는 same user를 구분하지 않았다는 것이다.

 

그 외에도 Bayesian generative model, embedding 기법의 활용, RNN 모델의 click sequence 예측 등의 연구가 있었다. 이 연구들의 공통점은 다른 종류의 feature들을 통합하여 활용하고, session을 sequencial하게 사용한다는 것이었다. 물론 저자가 제안하는 3D CNN은 완전히 다른 모델이고, character-level의 인코딩이라는 독특한 방법(추천시스템에서는 잘 사용되지 않지만, NLP에서는 꽤나 일반화된 방법)을 제안하지만 본질은 같다고 할 수 있다.

 

 


 

 

Method

 

1. Character-level Representation of Input

 

numerical Item ID는 digit character의 연속으로 본다. 그리고 Item의 Name, Item의 Description을 concat 해버린 하나의 sequencial character로 간주한다. 하지만 “iPhone 7 Smart Battery Case - Black” 같은 이름은 이미 description을 포함하고 있기 때문에, 이름만을 사용하여 모델 사이즈를 절약할 수 있다. 마지막으로 category 정보는 information을 utilize 하기 위해 계층적으로 인코딩할 필요가 있다. 그래서 최상위 계층까지 포함하는 category 정보를 sequence of characters로 나타낸다. 예를들면 “apple/iphone/iphone7/case” 처럼 말이다.

 

이제 이 개념으로 각 피처(item ID, name, category…) 마다 |V| x k 벡터들을 만들어 낸다. |V|는 character-level의 encoding을 위한 vocab이고 k는 length of feature이다. (item ID가 “113300” 이면, item ID 피처의 k는 6인 것)

 

그리고 제약을 주기 위해, 논문에서는 sequence of characters의 길이의 max를 150으로 잡았는데, 넘치면 잘라내고 모자라면 0으로 채우는 방식을 사용한다. 아래 그림은 R^(m X n X d) 로 표현할 수 있는데, 여기서 m는 vocab size, n은 word length(limited), d는 click의 sequential nuber를 의미한다.

 

 

 

2. CNN architecture

 

click stream을 패턴으로 해석할 수 있다면, 패턴 러닝에 있어서 SOTA인 CNN을 사용하는 것이 이치에 맞을 것이다. 혹은 FM이나 regression에서 사용하는 feature combination도 패턴으로 학습할 수 있을 것이다. 게다가 Feature engineering의 수고까지 덜 수 있으니, character-level의 피처를 활용하기에 좋은 방법일 것이다. 이제 Why CNN을 조금 더 파고들면 다음과 같다.

 

이제 우리가 가진 피처는 공간(역주 : content), 그리고 시간(역주 : sequential click stream)에 대한 정보를 가지고 있다. 하지만 2D CNN은 공간과 시간정보를 jointly modeling 하지 못한다. 그래서 3D CNN을 도입한다. 3D CNN이 2D CNN과 다른 중요한 점은, pooling으로 잃어버리는 정보량을 보완하고 input data의 variance에 robust한 학습을 가능하게 한다는 것이다. 이를 가능하게 하는 논리는 scala를 output으로 하는  2D CNN와 달리, 3D CNN은 vector를 output으로 하기 때문이다. 만약 input data의 차원이 3차원이라면,  2D CNN은 레이어를 거쳤을 때 하나의 차원을 잃어버리게 된다. 하지만 3D CNN은 방향정보를 그대로 가지고 있기 때문에, 시공간 정보를 그대로 가져가서 학습하게 된다.

 

 

여기서 CNN의 구조는 residual connection의 구조인데, 1x1 conv를 이용해서 downsampling 하는 구조를 사용하지는 않았다. 그리고 네트워크 구성에는 두 가지 나름의 규칙을 정했는데, 첫번째는 height와 width가 input과 같다면 필터를 변경하지 않는 것이다. 두번째는 만약 height와 width가 절반이 되었다면 필터를 두배로 늘리는 것이다.  

 

여기서 튜닝에 대한 질문이 생긴다. 이에 대해 개인적으로 물어보았고, 저자의 대답은 다음과 같았다.

 

1. 왜 Batch Norm을 사용하지 않고 Dropout을 사용했는지?

-> 레이어가 충분히 Deep 하지 않아서 Dropout이 더 잘 동작했다. 실험적으로 찾아낸 것이다. (근데 그럼 residual block은 왜 쓴건지..? residual 구조는 deep 하지 않다면 큰 의미는 없을텐데.. 어쨌든 이와 관련된 연구가 있어서 그 연구를 차용했다고는 한다. 내가 그걸 읽어보진 않아서 패쓰)

 

2. 왜 1x1 conv layer를 사용하지 않았는지?

-> 사실 썼다. 논문에 되게 짧게 언급해서 놓쳤을 수 있다.

 

3. height와 width가 input과 같다면 필터를 변경하지 않는 것이다 : Why?

-> 직관적으로 input과 output을 유지하는 레이어를 만들고 싶었다. (레이어 모양을 통짜로 가져가고 싶었다는 것 같은데, 그 근거는 직관적인 측면에서 기인했다고 한다)

 

 


 

 

Training

 

3D CNN에는 7개의 sequencial 데이터가 input으로 필요하다. 하지만 클릭이 작거나 많은 경우가 반드시 존재할 것이다. 이 경우, 7개에 못미치는 데이터는 right padding으로 0을 메꿔버린다. 반대로 7개를 넘는 데이터의 경우, 7개로 데이터를 잘라버린다. 데이터를 잘라내는 기준은 다음과 같다.

 

first click을 제거한다 : 더 최근의 클릭이 더 의미있는 경우

last click을 제거한다 : 반대로, 마지막의 클릭이 더 의미있는 경우

middle click을 제거한다 : 두 개를 합친 개념

 

이 중, 3번째 개념을 사용했다고 한다. 여러 가지 조합으로 실험해본 결과 3번째가 가장 결과가 좋았다고 한다. (왜인지는 모르겠지만 직접 대면했을때, 이 부분을 제일 신나하면서 설명했었다..;;)

 

 

 


 

 

 

논문의 나머지 부분은 실험의 결과와 자랑 부분이지만, 사실 이 metric이 납득이 가지 않아서 별도로 리뷰를 하지는 않겠다. 데이터도 데이터지만, 알고리즘의 비교 자체가 실험 단계부터 잘못되었다는 생각을 지울 수 없기 때문이고, 제일 중요한 것은 Amazon과 Gravity 에서 직접 테스트한 것이 아니기 때문이다. 물론 논문이라는 것이 다 그렇기는 하다만.

 

아이디어를 제외하면 그다지 대단할 것은 없는 논문이지만 (네트워크 디자인도 사실 짜깁기에 가깝다고 생각한다), cold-start에 대한 아주 신선한 관점을 제시했기 때문에 상당한 가치를 가지고 있는 논문이라고도 생각한다. 그래서, 오히려 너무 academic한 사실들과 수식들만 나열해놓는 논문보다 이런 논문이 때때로(혹은 자주) 아주 중요한 역할을 한다고 생각한다.