Home
📌

리뷰 : PinnerFormer (KDD 22)

Abstract

 Sequential Model

웹사이트에서의 유저 Action을 Sequence로 보고, 다음 Action을 예측하는식의 모델링이다.
개인화 추천에서 강력한 모습을 보인다.
Production에서 사용하려면 준비요건이 많다. (Streaming Pipeline, Mutable Data for Embedding)

 PinnerFormer

직후의 Action을 대신 미래에 발생할 Action들(Long-Term Future)을 예측하는 방식으로 모델링한다.
이를 구현하기 위해 Dense All Action Loss 를 제시했다.
User Representation이 Long-Term Futre를 예측할 수 있으므로 Batch로 인프라를 구성할 수 있다.

Introduction

 User Embedding

User Embedding을 통해 추천의 질을 높이는 방법이 대세이다.
Ranking, Candidate Generation 같은 DownStream Task에서 사용하면 강력한 개인화가 가능하다.
대부분 User의 Action을 이용해 Embedding을 만들어 내는데, 이는 본질적으로 Sequence다.
따라서 User Action Sequence를 이용해 미래의 Engagement를 예측하는 모델을 많이 사용한다.

 Deploy Challenges

Sequence 모델은 두 가지 방식으로 나눌 수 있다.
첫 번째는 Stateless 모델로 User가 Action을 할 때 마다 Embedding을 연산하는 방식이다.
두 번째는 Stateful 모델로 Streaming Pipeline을 통해 Embedding을 얻어내는 방식이다.
Stateless의 경우 연산 비용이 크고, Stateful의 경우 Streaming Infra를 구축해야 한다.

 PinnerFormer

실제 Pinterest에 배포중인 모델로, 기존 연구처럼 User의 과거 Action을 이용해 Embedding을 배운다.
다른점은 Dense All Action Loss 라는 새로운 Loss, Objective를 사용한다는 점인데,
이 Loss 통해 Embedding이 Next-Action 뿐만아니라, Long-Term Interest를 투영하도록 모델링 된다.
Embedding이 Long-Term Interest를 투영하고 있으므로, Batch 세팅이 가능해진다.

Desing Choices

 Single vs Multi Embedding for Single User

저자들의 직전 Work인 PinnerSage에선 명시적으로 Multiple Embedding을 사용했다.
유용하긴 한데, DownStream Model에서 Multiple Embedding을 사용하는건 큰 부담임
우리도 PinnerSage 결과물 가중평균 해서 DownStream Task에 사용함
PinnerFormer는 여러 Feature에서 쉽게 쓸 수 있도록 만들고 싶기에 Single Embedding을 채택함

 Real-time vs Offline Inference

기존 Sequential User Modeling 연구는 (Near)Real-time으로 동작하는 것에 집중했음
위에서 말했다시피, 프로덕션에서 쓰려면 연산 비용 문제와 Infra문제를 해결해야 한다.
Offline으로 대체할 수 있다면, 연산 비용과 Infra 관련해서 품이 훨씬 덜 든다.
PinnerFormer는 Daily Batch 모델임에도 불구하고, Ranker A/B Task에서 더 좋은 성능을 보인다.

PinnerFormer

PinnerFormer는 2021년 봄에 Pinterest에 실제로 배포되었으며 아래는 디테일에 대한 설명임.
P\mathcal P는 Pin의 Corpus를 의미함. 각각은 PinSAGE로 추출된 Embedding을 갖고 있음.
U\mathcal U는 User의 집합임. 각 User는 발생한 시간 오름차순으로 정렬된 Action Sequence AU\mathcal A_U를 갖고있음
긍정적인 Action만 Sequence로 사용함, 다 쓰진 않고 최근 MM개의 Action들을 끊어서 사용함.
PinnerFormer는 U\mathcal U Rd\mathbb R^d 로 가는 함수 ff를 만드는게 목표임. 동시에 P\mathcal PRd\mathbb R^d로 가는 gg도 학습시킴

 Primary Objecitve

다음 Action을 예측하는 것을 넘어, 14일 이후에 발생할 Action까지 예측하는 것이 목표
구체적으로는 14일 이내 긍정적인 Action이 발생할 확률이 높은 Item일수록
User와 가깝게 임베딩하는 방법을 배우는 것
(Range가 14일인 이유는 계산의 편의성 떄문이며, 14일 정도면 관심사를 충분히 반영한다고 가정한다)

 Feature Encoding

각 Action은 Item에 대응되는 PinSAGE Embedding과, Metadata Feature가 존재함.
Categorical Feature(Type, Surface)는 Embedding Table 만들어서 사용 Duration은 Log씌워서 사용
TimeStamp는 (1)마지막 Action으로 부터 얼마나 지났는지 (2)Action간의 Term은 얼마나 되는지를 추출해서 사용(Time2vec을 사용했다고 함)
위의 Feature들 Single Vector로 Concat해서 Transformer에 입력으로 넣음

 Model Architecture

Transformer 사용했으며, PreNorm Residual Connections, Layer Norm Before Each Block함
Learnable Positional Encoder → Transformer → Small MLP → L2 Normalize 구조
후보 Pin에 대해서는 MLP → L2 Normalize를 이용해 Projection했음

 Negative Sampling & Loss

Negative Selection
Negative Sample의 Source로 In-Batch와 Random Negative가 있음
In-Batch는 Batch안의 다른 Positive Sample을 Negative로 사용하는것, 효율적이지만 빈도 문제 있음
Random은 Uniform하게 Negative Pin을 가져오는건데, 너무 쉬워서 학습이 안될 수도 있음
우리는 각각의 장점을 가져오기 위해 두개를 Merge해서 하나의 Pool로 만들어 사용함
Loss Function
logQ Correction Sampled Softmax가 가장 잘 동작하는것을 찾아냈다.
각 Logit에 대하여, Batch에서 등장할 확률을 보정해주는 Loss임

 Next Item Prediction

SASRec
Sequence Modeling을 하는 가장 직관적이고 Naive한 방법은
TT시점까지 Sequence가 주어졌을때 T+1T+1 시점의 Action을 예측하는 Next Item Prediction이다.
SASRec은 이를 확장시켜, 모든 Step에서 다음 Item을 예측하도록 했다.
All Action Prediction
PinnerFormer는 장기적인 관심사를 고려해야하므로 KK일 이내의 Action까지 예측하도록 학습해야한다.
구체적으로는 KK일 이내 발생한 Action중 32개를 샘플링하고 Positive Action을 예측하도록 학습한다.
Dense All Action Prediction
미래의 Action을 예측하기 위해 마지막 Embedding만 사용하지 않고, Sequence 내의 임베딩을 사용한다.
Random하게 Sequence내에서 Embedding을 샘플링해서 예측에 사용하는데
과거 혹은 현재 데이터만 사용가능할 수 있도록 Casual Masking을 입혀서 Transformer에 넣는다.

 Model Serving

Offline-Batch로 Inference 했으며 Daily, Incremental Workflow 형태로 설계했다.
지난 하루동안 Action이 발생했던 사용자에 대해서만 User Embedding을 Inference하고
과거 Embedding이 있다면 Merge해서 Online Feature Store에 올린다. (Merge?)
Pin Embedding은 가벼운 MLP이므로 매일 새로 Inference해 ANN Index를 갱신키긴다.

Experiments

 Offline Evaluation

Rec@10을 Metric으로 사용했다. ANN Pool은 랜덤한 Pin 100만개를 사용했다.
학습 데이터의 마지막 날짜로부터 2주뒤 까지를 Evalutation Pool로 설정했다.
학습 때 등장한 적 없는 User를 사용했다.
tt 까지의 데이터로 Embedding을 만든뒤 이후 tt+14일 까지 상호작용한 모든 Pin을 찾아내는지를 확인했다.
User와 Pin사이의 거리는 각각의 임베딩간 L2거리로 측정했다.
PS : PinnerSAGE
Batch 작업으로 바꿔도 성능 하락폭이 낮다.
Ranker의 User Feature를 대체하자 체류 Metric이 올라갔다.
Ranker의 User Feature를 대체하자 CTR이 급격히 상승했다.

Conclusion

Pinnerformer는 User의 Long-Term 관심사를 Capture하는 Sequence Model이다.
PinSAGE를 Backbone으로 사용해 Transformer로 모델링 했다.
tt시점부터 이후 NN일 동안의 Positive Engagement를 예측하도록 학습된다.
Task덕분에 User의 장기적인 관심사를 Embedding에 녹여낼 수 있으며, Offline Inference도 가능하다.