RS Paper Review: COLD - Towards the Next Generation of Pre-Ranking System

jisu825·2021년 3월 30일
0

Recommendation System

목록 보기
5/5

이 논문을 읽은 이유

오늘은 논문 리뷰에 앞서, 왜 이 논문을 선정했는지에 대해 잠깐 얘기하고 넘어가겠습니다. 그동안 저는 Neural Collaborative Filtering과 같이 딥러닝 기반 추천의 베이스가 된 논문부터, AutoRec, WDL, BST 등 다양한 ranking system model을 다루는 논문까지 주로 ranking에 초점을 맞춘 논문들을 읽었습니다. 실제로 RS 관련 논문들은 대부분 ranking의 전 단계인 pre-ranking(reduced candidate set을 retrieval하는 단계)가 존재한다고 언급만 한 채로, ranking 단계에 초점을 맞추고 있습니다.

하지만 분명 이 pre-ranking 단계를 어떻게 거치느냐 역시 중요한 문제일 것입니다. 그래서 이 레벨에 대해 논하고 있는 논문들 중, 최대한 NLP가 아닌 RS에 초점이 맞춰진듯한 논문을 하나 골라보았습니다. 그 논문이 바로 이 COLD: Towards the Next Generation of Pre-Ranking System입니다. 그럼 논문 리뷰 시작하겠습니다.

1. Introduction

Search Engine, Recommendation System, 그리고 Online advertising System은 matching, pre-ranking, ranking, re-ranking의 sequential한 flow로 user에게 노출시킬 대상을 선정합니다(개인적으로 큰 틀에서는 셋 모두 추천시스템이라고 생각합니다). 하지만 논문에 따르면, 그동안 위 분야의 연구 대부분은 ranking에 초점을 맞추었을뿐, pre-ranking system에는 큰 관심을 두지 않았다고 합니다. 그 동안은 pre-ranking system은 computing power cost를 줄이기 위한 simplified ranking system의 취급을 받아왔습니다. 독자적인 하나의 방법론이라기보다는, ranking system에 input으로 넣어줄 candidate set의 size를 줄이기 위한, computing power를 많이 쓰면 안되는 심플한 단계로 고려되어왔다고 합니다. 이를 필자는 'pre-ranking system is often designed as a lightweight ranking system by simplifying the ranking model to handle the explosion of computing power for online inference'라고 표현했습니다.

1.1. Brief Introduction of the Development History of the Pre-Ranking System

본 논문 이전에는, pre-ranking system은 크게 3개의 세대로 분류되었습니다.

우선 1세대는 Ad-wise statistical score로, 개인화 추천이 아닌 전체 데이터로 통계학적인 평가 지표를 만드는 모델이었습니다. 이는 매우 간단한 모델(사실 모델보다도 단순한 산수에 가까운 수준입니다)이어서 잦은 update가 가능하다는 장점을 가지고 있었습니다. 그 다음 2세대는 Logistic Regression으로, online learning이 가능한 모델이었습니다.

3세대부터 조금 모델다운 형태를 띄기 시작하였는데요, 바로 vector-product based DNN입니다. 언뜻 보면 NCF 모델과 유사하게 생긴 이 모델은, user와 ad(item)의 feature를 각각 embedding하고 후에 합친다는 점에서 실제로 ranking system과 유사한 특성을 지녔습니다. Pre-ranking system은 ranking system과 마찬가지로 latency time에 매우 민감합니다(처리에 오랜 시간이 걸려서는 안됩니다). 따라서 vector-product based DNN은 user-wise와 ad-wise embedding vector의 계산을 offline에서 미리 산출하고, 그 2 vector의 inner product만을 online으로 수행합니다.

위 방식을 통해 vector-product based DNN은 이전 세대의 모델들에 비해 훨씬 높은 수준의 성능을 보여줄 수 있었지만, 심각한 단점도 2가지나 있었습니다. 바로 Model Update FrequencyModel Expression Ability입니다. 구체적으로 왜 이러한 단점이 생기는 지는 아래 2.2에서 더 자세히 설명하겠습니다.

필자는 위의 단점들이 결국 pre-ranking system의 설계 시 모델의 성능이 아닌 computing power에만 집중하였기 때문에 발생한다고 지적합니다.

1.2. COLD: new generation of pre-ranking system

그렇다면 COLD는 어떻게 다를까요?
필자는 3가지 측면에서 COLD가 가지는 장점을 어필합니다.

  1. COLD는 다양한 형태의 deep learning model을 이용할 수 있습니다. 즉 COLD는 단 하나의 형태를 가지는 model이 아니라, 다양한 model을 이용하는 방법론의 성격을 띄고 있습니다.
  2. COLD는 병렬 컴퓨팅과 semi-precision calculation 등의 다양한 최적화 기법을 활용하여 computing power cost를 엄청나게 감소시켰습니다.
  3. COLD는 online learning과 serving에도 잘 동작하여, 급격한 데이터의 변화를 포착하는데 용이합니다.

2. Overview of Pre-Ranking System

이 쯤에서 COLD가 도대체 어떠한 모델인지를 설명해주면 좋겠지만, 필자는 다시 pre-ranking system 이야기로 돌아갑니다. 우선 pre-ranking system을 더 잘 이해해보자는 의도같습니다.

위 그림에서도 알 수 있듯이, pre-ranking은 matching system으로부터 candidate set을 받아 ranking system에게 더 줄어든 candidate set을 전달하는 과정입니다. Alibaba의 display advertising system의 경우, 보통 수만개의 ad set을 받아 몇백개만을 전달한다고 합니다.

쉽게 파악할 수 있듯이, pre-ranking은 사실상 ranking과 유사한 역할을 합니다. 다만 둘 사이의 매우 중요한 차이점이 존재하는데, 바로 Scale입니다. Pre-ranking에서는 ranking의 100배에 달하는 itemset을 처리하기 때문에, ranking과 같은 model을 사용한다면 computing cost를 감당 할 수 없을 것입니다.

2.1. Vector-Product based DNN Model

앞서 언급되었던 3세대 pre-ranking model인 vector-product DNN을 잠깐 살펴보겠습니다. v-p DNN은 user와 ad가 각각 embedding - concatenating - FC layer의 전형적인 단계를 거쳐 vector $v_u$와 $v_a$가 도출됩니다. 그리고 이를 통해 다음과 같이 pre-ranking score를 계산합니다.
$$
p = \sigma(v_u^Tv_a), ;;;where ;;;\sigma(x) = {1 \over 1+e^{-x}}
$$

2.2. Shortcomings of the Pre-Ranking System with Vector-Product based DNN Model

DNN을 기반으로 한 pre-ranking system은 물론 statistical score나 logistic regression을 기반으로 한 전 세대의 모델들보다는 좋은 성능을 보여주엇습니다. 하지만 Introductiond에도 설명되었듯이 몇가지 치명적인 단점을 가지고 있습니다.

  1. Model Expression Ability
    사실 성능이 이전 2세대에 비해 나아졌다 뿐이지, 그렇게 뛰어난 것은 아닙니다. Deep model이라고 부르기 힘든 단순한 vector-product를 사용하기 때문이기도 하고, user와 item 각각의 embedding만 사용한 채 cross feature를 사용하지 않았기 때문이기도 합니다.
  2. Model Update Frequency
    Embedding vector가 사전에 계산되어야 하기 때문에, 모델의 update를 자주 시행 할 수 없습니다. 예를 들어 최근 몇시간 사이에 사람들의 구매 패턴이 크게 변했다 할 지라도, user embedding은 사전에 계산해 놓은 값만을 사용하기 때문에 모델이 이 변화를 포착하지 못하게 됩니다. 특히 embedding의 pre-calculation은 그 자체가 몇시간이 소요되기 때문에 잦은 update를 해줄 수 없습니다. 또한, user와 item 각각의 pre-calculation time이 많이 차이나는 것도 문제입니다. 실제로 둘을 동시에 update하지 않으면 model 성능이 감소한다고 합니다. 이를 보정하기 위해 결국 한쪽이 기다려야 하므로, update frequency는 더욱 낮아질 수밖에 없습니다.

3. COLD: Computing power cost-aware Online and Lightweight Deep pre-ranking System

COLD는 위에 언급되었던 문제들을 해결하기 위해, 3가지 포인트에 집중하였습니다.

  1. Model Design
  2. System Design
  3. Computing Power Cost

3.1. Deep Pre-Ranking Model in COLD

COLD는 온갖 종류의 복잡한 deep model architecture를 사용 할 수 있습니다. 또 이 모델이 user와 item embedding 뿐만이 아닌, user-item cross feature를 사용하고 있을지라도 괜찮습니다. 실제로 저자는 본 논문의 experiment section에서 GwEN이라는 cross feature를 사용하는 모델을 COLD에 적용시켰습니다.

물론 이런 복잡한 모델들을 pre-ranking에 그대로 이용할 수는 없습니다. 앞서 언급했던 scale 문제가 존재하기 때문입니다. 따라서 조금 간소화된 lightweight version을 만들 필요가 있고, 이를 위해 optimization strategy로 다음 2가지를 채택했닥고 합니다.

  1. Design Flexible Network Architecture
  2. Applying Engineered Optimization Trick

3.2. Design of Flexible Network Architecture

다시 한번 목적을 상기해보면, 사용하고자 하는 딥러닝 모델의 lightweight version을 만드는 것입니다. 이에 Network pruning, nueral architecture search 등의 다양한 방법이 사용될 수 있겠으나 저자는 Feature Selection을 사용합니다.

Feature Selection을 위한 방법으로는 SE(Squeeze & Excitation) block을 사용했습니다. SE block이 무엇인 지는 이 블로그를 참고해주세요. 간단하게만 정리하자면 SE란 Computer Vision에서 등장한 개념으로, 원래는 channel간의 inner dependecy를 포착하기 위한 block입니다. 본 논문에서는 이를 일종의 importance weight을 주는 역할로 사용되었는데요, Squueze 단계에서는 각 embedding별 importance를 측정하고, Excitation 단계에서는 기존의 embedding에 해당 importance weight을 더해주는 방식입니다.

구체적으로는 다음과 같습니다.

  1. input $e_i$(embedding vector of input feature group $i$)를 weight을 의미하는 scalar value $s_i$로 squeeze합니다.
    $$
    s = \sigma(W[e_1, e_2, ... e_m] + b)$$
    이 때, $W$와 $b$가 learnable parameter로 모델은 이를 학습합니다.
  2. 기존의 embedding $e_i$와 importance weight $s_i$를 곱하여 새로운 **weighted embedding $v_i$**를 계산합니다.

3.3. Engineered Optimization Tricks

Parellelisim

Low latency를 low computing power로 달성하기 위해서는, parallel computing이 필수적입니다. 따라서 가능한 모든 경우에 parallel computing을 사용하였는데, 예를 들어 ad 각각의 pre-ranking score는 독립적이므로 ad를 scoring할 때에는 병렬 연산을 사용하였다고 합니다.

Column-based Computation

row base로 feature computation하는 것보다 column base로 computation하는 것이 훨씬 빠르다고 합니다.

Low Precision GPU Calculation

GPU를 이용한 연산 속도 향상을 위해서는 float16으로 data type을 맞추어야 하는데, 이를 위해서 약간의 데이터 손실을 감수하거나 scaling 등의 기법을 사용하였습니다.

3.4. Fully Online Infrastructure of COLD Pre-Ranking System

COLD는 training과 serving 모두 online으로 처리할 수 있습니다. 이는 다음 2가지 이점을 가져다줍니다.

  1. Data disribution shift
    데이터의 급격한 변화에 잘 대응 할 수 있게 됩니다. 이는 앞서 vector-product based DNN의 가장 큰 단점 중 하나로 꼽혔었는데요, pre-calculation이 아닌 online learning을 통해 특정 event로 인한 데이터의 변화를 잘 포착할 수 있게 되어다고 합니다.
  2. new model & testing
    새로운 모델 개발과 online A/B tesing도 이전보다 훨씬 용이해졌다고 합니다.

Comment

개인적으로는 논문의 구조가 조금 중구난방격인 느낌이 있어 읽는데 살짝 답답함을 느꼈지만('그래서 COLD가 뭔데'를 여러번 외쳤습니다), 내용 자체는 매우 흥미로웠습니다. 저는 특히 COLD 이전 세대(vector-product based DNN)의 pre-ranking model도 잘 모르고 있었어서.. 새로울 수 밖에 없었던 것 같습니다.

요즘 RS 논문들을 읽으면서 제가 이 분야에 대한 근본 지식이 별로 없다는 걸 많이 느깁니다. 이 분야의 현업에서 실제로 일을 하려면 단순 모델링뿐만 아니라 전체적인 파이프라인을 이해해야 할 것 같은데, 이게 부족하다는 느낌이 많이 들더라구요.

그래서 Kim Falk의 Practical Recommendation System 을 조금 더 빨리 읽어보려고 합니다. 아무래도 근본 쌓는데에는 해당 분야의 유명 기본 서적만한 것이 없는 것 같습니다.

그럼 오늘 포스팅 여기서 마치겠습니다.

profile
서울대학교 산업공학과 1년차 딥러닝 개발자 insta: @jisu_fassyzino & @via_ad_astra98

0개의 댓글