cs [논문 리뷰] Using Deep Learning to Win the Booking.com WSDMWebTour21 Challenge on Sequential Recommendations - 1
본문 바로가기
  • 매일 한걸음씩
  • 매일 한걸음씩
개발/Recommender System

[논문 리뷰] Using Deep Learning to Win the Booking.com WSDMWebTour21 Challenge on Sequential Recommendations - 1

by 시몬쯔 2021. 9. 23.
728x90

카페에서 빈둥빈둥 서핑을 하며 자유시간을 즐기다가 페이스북 그룹 Recommender System KR에 한 분이 올려주신 소개글을 보고 재밌어보여서 리뷰를 해보고자 한다.

 

(https://www.facebook.com/groups/2611614312273351/permalink/3860159744085462/)

 

대회 페이지: https://www.bookingchallenge.com/

데이터: https://www.bookingchallenge.com/

페이퍼: http://ceur-ws.org/Vol-2855/challenge_short_2.pdf

설명 영상: https://youtu.be/bHuww-l_Sq0

코드: https://github.com/NVIDIA-Merlin/competitions/tree/main/WSDM_WebTour2021_Challenge


부킹닷컴에서 주최한 Challenge(WSDM Web Tour 21 Challenge)에서 우승한 팀으로 NVIDIA소속분들이 쓴 논문이다. 코드도 공개되어 있어 리뷰 후 한 번 돌려봐야겠다.


유저가 출입한 호텔 데이터가 주어졌을 때 마지막으로 예약한 도시의 호텔을 맞추는 Task이다.

Abstract


Competition의 Task는 유저의 Trip에서 이전에 방문한 도시 기록을 기반으로 마지막으로 예악한 호텔의 도시를 예측하는 task이다.

이 논문에서 소개하는 Solution은 Multilayer Perceptron(MLP), Gated Recurrent Units(GRU) 그리고 XLNet(Transformer)을 기반으로 세 가지의 딥러닝 구조를 디자인했다.

 

이러한 세 가지 구조사이에 공유되는 요소는 Session-based Matrix Factorization head인데, 아이템인 도시 임베딩과 세션인 여행 임베딩 사이의 linear mapping을 학습하는 것이다. 이러한 임베딩을 dot product함으로써 추천을 하게 된다.

 

평가 Metric으로는 Precision@4를 사용하여 이 솔루션이 해당 챌린지에서 1등을 차지하였다.

(Top4까지의 아이템 중 몇 개의 아이템이 relevant였는지에 대한 비율. 주어진 데이터에서 유저당 방문한 호텔출입 데이터가 최소 4개이기 때문에 top4까지만 고려한 듯.)

Introduction

 

많은 서비스에서 추천 시스템을 사용 중이다. (추천시스템 소개 내용)

이 솔루션에서는 앞에서도 언급했듯이 세 가지 neural architectures를 이용했는데,
다음과 같다.


(1) MLP with Session-based Matrix Factorization net (MLP-SMF)

(2) GRU with MultiStage Session-based Matrix Factorization net (GRU-MS-SMF)

(3) XLNet with Session-based Matrix Factorization net (XLNet-SMF)



Final 제출은 위의 세 가지 모델에서 나온 예측을 weighted sum한 ensemble형태라 할 수 있다.

 

 

Preprocessing and feature engineering

 

Competition에서 공개한 데이터셋은 tabluar data 구조이고 269k개의 여행에 대한 1.5M개의 예약 기록으로 이루어져 있다.

각 예약은 한 고객의 한 여행에 대한 일부이며 metadata와 city/country 정보를 포함하지만 hotel에 대한 정보는 포함하지 않는다. 따라서 여행 예약에 대한 순서는 체크인 날짜로 알 수 있다.

1. Data splitting for Cross-Validation

 

대부분의 Competitions과 달리 이 챌린지는 두 번의 제출만 가능했기 때문에 validation set을 잘 디자인하는 것이 중요했다. 그래야 best features와 best models을 선택할 수 있기 때문이다.

저자들은 k-fold cross validation을 사용했는데, Training set을 5개로 나누어 마지막 방문 도시를 예측하는 방식을 사용했다.

즉, 각 fold에서 fold train data는 validation set으로 사용됐으며 다른 folds(OOF)의 데이터는 모델을 학습시키는 데에 사용됐다.

Cross Validation score는 5개의 folds로부터 나온 precision@4를 평균낸 것으로 사용했다.


2. Feature Engineering


Original 데이터셋은 9개의 features를 가지고 있는데,

  • user_id
  • utrip_id
  • checkin
  • checkout
  • city_id (label)
  • hotel_country
  • device_class
  • affiliate_id
  • booker_country

로 구성되어 있다.

테스트셋에서의 각 trip의 마지막 예약에서 city_id와 hotel_country는 당연하게 나와있지 않다.(예측해야 하는 것이므로)

저자들은 처음 실험에서, 새로운 features를 만드는게 모델의 정확성을 개선시켰다고 한다.

즉, 주어진 features에서 예를 들면 날짜를 빼서 해당 호텔에서 머무른 기간, 계절등을 새롭게 만들어 내어 사용했다고 한다.

아래 표에서 저자들이 만든 features를 확인할 수 있다.


데이터 전처리와 feature engineering 파이프라인은 RAPIDS cuDF로 하였다.(GPU를 사용하여 dataframe transformation을 가속화시키는 라이브러리. 전에 사용했는데 일반 pandas dataframe보다 그리 빠른 것을 못느꼈는데 다시 해봐야겠다.)

3. Data augmentation with reversed trips

 

이제 이 논문에서 간단하면서 재밌었던 아이디어인 augmentation 부분이다.

1.5M 개의 데이터셋은 다른 추천 데이터셋에 비해 상대적으로 규모가 작은 편이기에 저자들은 data augmentation으로 데이터셋을 증가시키기로 했다. 그리고 여행의 순서를 반대로 만듦으로써 데이터셋을 두배로 늘리는 것이 모델의 정확성을 증가시킴을 확인했다.

(한 Trip은 도시의 Sequence로 구성되어 있는데 여러 도시가 주어졌을 때, 이 도시들을 방문하는 많은 경우의 수가 있긴 하지만 보통 여행을 정할 때 근접 도시로 순서를 정하고 교통 또한 근접일 수록 많기 때문에 무작정 permuations보다는 순서를 단지 뒤집는 것이 reasonable해보인다.)


4. Low frequency cities hashing


예상할 수 있듯이, 도시 당 예약 frequency는 long-tailed distribution을 가진다.

frequency가 1인 도시의 수가 대략 10,000개

(파리, 뉴욕과 같은 특정 도시가 다른 도시들보다 훨씬 인기가 있을 수 있기 때문)
모델이 너무 unpopular 도시(빈도가 9이하인 도시)에 너무 초점을 맞추기 않도록, 이러한 도시의 아이디를 하나로 합치고 inference시 ranking에서 높게 나오지 않도록 했다.
(이러한 처리를 통해 도시의 수는 44,000개에서 11,000로 줄었다.)


Model Architectures


앞에서 언급했던 3개의 neural architectures에 대해 알아보자.

각 architecture는 하나의 NVIDIA V100 GPU로 학습될 수 있다.
라벨의 수가 그리 크지 않기 때문에, 세 개의 모델 모두 추천을 multi-class classification 문제로 취급하여 학습할 수 있다.(sofrmax cross-entropy loss function 사용)

모든 모델구조의 공통 부분은 Session-Based Matrix Factorization(SMF) head이며 더 자세히 알아보자.

1. Session-based Matrix Factorization head(SMF)

 

이 problem을 추천시스템 관점에서 보면 user(=trip)에게 item(=city)를 추천하는 형태가 된다.

Trip은 Session-based recommendation task에서 Session과 같다고 볼 수 있는데, 이는 user interactions의 sequence라 볼 수 있다.(기존에 여행한 도시가 유저가 선택한 아이템들이라 볼 수 있음.)

이 competition에서, 저자들은 일반적인 MLP 대신 SMF를 디자인하여 모든 아이템에 대한 score를 계산했다.
이 디자인은 MF-based의 Collaborative Filtering에서 영감을 받았는데, MF-based CF는 간단히 말하자면 유저와 아이템에 대한 latent factor을 학습하는 것이라 할 수 있다.

대부분의 경우에서 유저는 데이터셋에서 한번의 trip만 하였다. 그렇기 때문에, 유저의 선호도를 모델링하는 것 대신에, Session(=trip) 임베딩을 구하기 위해 모델의 말단을 사용했다. (모델의 last layer의 output이 embedding이라 볼 수 있음.)

그 후, Session(=trip) 임베딩 s와 item(=city) 임베딩 i 간의 dot product를 계산하여 각 아이템의 item relevance probability distribution r을 모델링한다.



이제 SMF를 세 가지 모델에 적용하는 방법에 대해 알아보자.
먼저, MLP를 SMF와 함께 사용한 방법이다.

2. MLP with Session-based Matrix Factorization head(MLP-SMF)

 

MLP w/ SMF는 feed-forward와 embedding layers를 사용하는데 다음의 그림과 같다.

Categorical input features는 embedding layer에 넣어지고 Continuous input features는 linear layer를 통해 projected되어 embedding 형태가 된다. (+여기에 batch normalization과 ReLU를 적용함)

모든 Embedding 차원은 동일하다.(summation하고 concat하기 위해 같게 한 듯.)

또한, Conituous input features와 categorical input features의 임베딩은 summation을 통해 합쳐진다.
(위의 그림에서 "+" 부분)

Output은 5개의 마지막 방문 cities와 contries의 임베딩을 concat한 형태이다.(lag feateures 제외)

City lags의 embedding tables은 공유되며 hotel country lags 또한 비슷하다.
Lag embeddings은 concat되나, 모델은 여전히 lag features의 순서를 통해 도시들의 sequential pattern을 학습할 수 있다. 즉, city lag1의 임베딩 벡터는 concat후에도 같은 위치에 있다.(도시 방문 순서가 중요한 feature이기 때문.)

Concat된 벡터는 3개의 feed-forward layers에 들어간다.(+ BN, PReLU, dropout) 이에 session embedding을 형성하게 된다.
그 다음 SMF을 이용하여 모든 도시에 대한 score를 계산한다.

3. GRU with MultiStage Session-based Matrix Factorization head(GRU-MS-SMF)

 

GRU-MS-SMF는 GRU cell을 historical user actions(이전에 방문한 5개의 도시들)을 임베딩하는데에 사용한다.
(GRU4Rec와 유사한 방법. 이 논문은 안 읽어봐서 담에 읽어봐야겠다.)
5개미만으로 도시를 방문했다면 0으로 패딩시킨다.

Last GRU hidden state는 아래 그림과 같이 다른 categorical input features의 임베딩과 concat된다.


이전 방문 도시들에 대한 embedding tables은 공유된다. 모델은 categorical input features만 사용하는데 추가적으로는, trip length나 reservation order와 같은 numerical features을 임베딩시킨 것도 포함한다.

임베딩을 concat시킨 vector는 MultiStage Session-based MF head에 넣어진다.
1) 먼저 모든 아이템에 대한 softmax head를 통해 top-50 cities를 선정하고, 2) 두번째 단계에서 SMF head을 첫번째 단계에서 구한 top-50 cities와 2개의 trip 임베딩(MLP의 마지막 layer와 끝에서 두번째 MLP layers의 output)에 적용시킨다. 3) 마지막 output은 3개의 head의 weighted sum이 된다. (weight는 trainable)

Multi-stage head는 2단계의 ranking problem으로 작동한다. 첫번째 head는 모든 아이템들을 ranking하고 다른 두개의 head는 첫번째로부터 나온 top-50 아이템들을 reranking하는 방식이다.






다음 포스팅에서 이어짐.
https://simonezz.tistory.com/110

 

[논문 리뷰] Using Deep Learning to Win the Booking.com WSDMWebTour21 Challenge on Sequential Recommendations - 2

https://simonezz.tistory.com/109 [논문 리뷰] Using Deep Learning to Win the Booking.com WSDMWebTour21 Challenge on Sequential Recommendations - 1 카페에서 빈둥빈둥 서핑을 하며 자유시간을 즐기다가 페..

simonezz.tistory.com

 

728x90

댓글