-
[Recommender System] - 개인화 추천 시스템의 최신 동향Recommender System/추천 시스템 2019. 6. 17. 18:17
[Recommender System] - 추천 시스템의 전반적인 내용 (1)
[Recommender System] - 추천 시스템의 전반적인 내용 (2)
[Recommender System] - 추천 시스템에 사용되는 알고리즘들
추천 시스템의 전반적인 내용을 정리한 기존 블로깅에서는 최신 동향과 시스템에 대해서는 아주 간략한 정도로만 소개했었다. 이번 포스팅에서는 추천 시스템의 최신 기술적 동향을 살펴보도록 하자. 본 포스팅에서 기술하는 내용은 완전히 'general'한 추천시스템에 대한 내용이라기보다는, e-commerce에 어느정도는 초점이 맞춰져 있다고 볼 수 있다. 또한 최근 추천 시스템의 거의 절대적인 트렌드인 '개인화 추천'에도 초점이 맞춰져 있다.
Recent Personalized Recommender System
데이터 수집과 처리 단계를 제외한다면, 일반적으로 요즘 추세의 추천시스템은 다음과 같은 총 3개의 파트로 나눠져 있다. 첫 번째는 Recall part(candidate generate part), 두 번째는 User intention prediction part, 그리고 마지막 세번째는 CTR/CR Ranking part 이다. 온라인 서비스가 더욱 커지며 추천의 대상이 되는 아이템이 exponential 하게 늘어나고, 이에 따라 추천 서비스를 만드는 레이어 역시 세분화 되고 있는 추세인 것 같다. 데이터의 수집과 처리 단계인 Engineering 파트는 잘 알지 못하지만, Batch part, Streaming Part 등 역시나 많은 레이어로 세분화되고, 이에 따른 인큐베이팅 프로젝트 역시 꾸준히 등장하고 있는 것으로 알고있다. 최근 필자가 사용중인 프레임워크는 Airflow, MLflow 인데, 지금까지 언급한 모든 레이어를 관리해주는 프레임워크이다. (MLflow의 경우, 모델링의 관점에서만 관리를 가능하게 해준다. 글 작성 시점인 6/17 에서야 1.0 버전을 사용할 수 있게 되었기 때문에, 아직 Product로 사용하기엔 무리가 있다고 본다)
Candidate generate part
후보군 산출(Recall) 프로세스 단계에서는 수백만개의 상품 중, 후보가 될 만한 수백 여개의 상품으로 선택지를 좁혀나가는 것을 목적으로 한다. 후보군 산출 단계에서는 여러 개의 전략들을 합쳐서(merge) 유저의 관심사가 최대한 많이 포함되도록 coverage를 넓히는 것이 좋다. 또한 일반적인 리콜보다, 조금 더 개인의 선호를 포함하는 리콜을 추려내고 싶은 경우, 유저의 ‘long term preference’를 고려하는 것이 좋다.
Intention prediction part
의도 예측 단계에서는 유저의 ‘최신 행동’에 기반하여 click, buy 등의 다음 행동을 예측한다.
Ranking part(prediction CTR/CR)의도 예측 단계 후에, 지금까지 선정된 수백 개의 candidate를 내로우 다운(Narrow down) 형식으로 추려낼 필요가 있다. 이를 위해 CTR/CR을 정확히 예측하는 모델을 통해 상품이 노출될 순위를 결정해야 한다. 당연하게도 그 모델은 CTR/CR에 대한 성능을 보장할 수 있어야 한다.
각 단계별 세부적인 레이어의 구성은 다음과 같다.1) Generate Data Layer
Hadoop/Spark 등과 같은 MapReduce 혹은 분산처리 기술 플랫폼 위에서, ETL이나 Streaming 작업등을 처리하는 레이어이다. 일반적으로는 Hadoop ecosystem과 ElasticSearch ecosystem이 많이 사용된다. 최근에는 Airflow, Spark를 동시에 사용하면서 DAGs 기반 개발의 편의성과 분산처리의 성능적 장점까지 섞어놓은 구조를 누구나 쉽게 사용이 가능해졌다고 생각한다.
2) Generate Candidate Layer
추천시스템에서 Recall 알고리즘이란, 추천의 상황에 맞는 Candidate 아이템을 추려내는 작업을 말한다. 일반적으로는 Popular 기반 recall, CF(or K-Neighbor) 기반 recall, Graph 알고리즘 기반 recall, Association Rule(CF로 분류하기도 한다) 기반 recall 등이 있다. 경우에 따라서는 CBF에 속하는 Similarity 알고리즘 기반 recall이나 Session-based 알고리즘이 사용되기도 한다.
하나의 recall에서 이러한 모든 요소를 고려하여 최대한 다양한 아이템을 candidate로 확보하는 것이 유리하며, 이를 diversity of recommendation 이라고 한다. 예를 들어, ‘연관 아이템’ 페이지에 사용되는 generate candidates 방법 중 가장 먼저 떠올릴 수 있는 것은 Association Rule 이지만, 더 나은 개인화를 위해서는 다른 추출 방법을 함께 고려해야 한다. 여러 알고리즘의 recall 중에서 diversity를 maximize 하기 위한 전략이 필요한데, scoring을 통해 이를 결정하거나 혹은 다음 레이어의 도움을 받아 이를 최대화할 수 있다.3) User Intention Predict Layer
유저의 최신 관심사 기반의 추천 방식을 흔히, “Session-based recommendations” 라고 한다. Re-rank 레이어가 없는 추천 시스템의 경우, 이 레이어가 최종 prediction 레이어가 되기도 한다. 이전에 리뷰했던 [3D CNN for Session-based Recommendation] 과 유사한 종류의 추천 레이어라고 볼 수 있다. 이 레이어에서는 흔히 ‘순서’를 가지고 있는 데이터를 통해 next action을 predict 하는 문제를 푼다. 현재 가장 널리 알려진 방법은 RNN(GRU, LSTM) 기반의 prediction이며 Bert, Transformer 등을 이용한 Sequential recommendation이 SOTA라고 할 수 있다.
만약 추천시스템이 별도의 Re-rank Layer를 가지고 있는 경우, 아이템의 up-cell 추천보다는 cross-cell에 집중하여 유저의 Intention(Text, Sequential Action) 기반 boosting을 한다고 볼 수 있다. 혹은 앞서 언급한 것 처럼 Cadidated item pool에서 diversity를 최대화해주는 필터링 역할을 하기도 한다.4) Re-Rank Layer
Ranking model이 포함되는 레이어로써, 가장 일반적인 알고리즘군이 포함된다. Linear Regression, Boosting Algorithm, Factorization Machine 등의 predictor를 사용한다. Intention Predict Layer와 별도로 구분되어지는 이유는, 이전 단계에서 ‘개인화’ 요소를 어느정도 고려한 상태에서 context 정보나 추천 도메인에 맞는 비즈니스 정보를 추가하여 prediction 하기 위함이다.
사실 Re-rank 레이어에서 가장 중요한 것은 알고리즘이나 모델의 성능보다는, 전략이다. 어떻게 샘플링할 것인지 (Up sampling, Down sampling…)에 대한 전략을 수립해야 하며, 도메인과 context의 피처 엔지니어링을 어떤 전략으로 녹여낼 것인지가 최종적인 ranking order에 가장 큰 영향을 미친다.
일반적인 ranking predictor를 평가하기 위한 방법은 크게 pointwise, pairwise, listwise rank 3가지로 나뉜다. 이 역시 도메인과 서비스에 따라 사용하는 형태와 종류가 다르다고 할 수 있다.
참고한 문헌 출처 (디테일은 생략)
ACM 2019
ICLR 2016
RecSys 2016KDD 2018
RecSys 2017
'Recommender System > 추천 시스템' 카테고리의 다른 글
Microsoft Research Learning to Rank 알고리즘 - [1] RankNet (2) 2019.10.31 Learning to Rank와 nDCG (0) 2019.08.13 [Recommender System] - Autoencoder를 이용한 차원 축소 기법 (2) 2019.05.20 [Recommender System] - Python으로 Matrix Factorization 구현하기 (32) 2018.08.01 [Recommender System] - MF(Matrix Factorization) 모델과 ALS(Alternating Least Squares) (2) 2018.07.16 댓글