당신을 좋아할 사람을, 0.1초 안에 찾아내는 방법 (CUPID)

당신을 좋아할 사람을, 0.1초 안에 찾아내는 방법 (CUPID)

추천인데, 상대방도 나를 골라야 성립합니다

넷플릭스가 나에게 영화를 추천할 때, 그 영화는 나를 신경 쓰지 않습니다. 그런데 아자르(Azar)처럼 1:1 영상으로 사람과 사람을 연결해주는 소셜 디스커버리 서비스는 다릅니다. 내가 상대방을 좋아해도, 상대방이 나를 원하지 않으면 매칭이 성립하지 않습니다. 이런 문제를 상호 추천(reciprocal recommendation)이라고 부르는데, 여기서는 “추천 대상”이 곧 “다른 사람에게는 추천을 받는 아이템”이라는 독특한 구조를 가집니다.

게다가 좋은 추천을 하려면 그 사람이 지금까지 세션 안에서 누구를 만났고 어떻게 반응했는지, 즉 순차적인 행동(session)까지 반영해야 성능이 좋아집니다. 문제는, 세션을 반영하는 모델은 계산량이 크다는 것입니다.

실시간이어야 하는데, 무거우면 답이 없다

기존의 세션 기반 추천 방식들은 추천을 하나 만들 때마다 그 사람의 지난 행동 시퀀스를 처음부터 다시 모델에 통과시켜야 했습니다. 일반적인 추천 서비스라면 이 정도 지연은 감수할 수 있을지 몰라도, 아자르처럼 실시간으로 다음 상대를 계속 연결해줘야 하는 서비스에서는 치명적인 병목이 됩니다.

여기에 상호 추천의 특성까지 겹치면 상황은 더 나빠집니다. 사용자가 곧 아이템이기 때문에, 대규모 사용자 데이터셋에서 학습을 시키려면 계산량이 기존 추천 시스템보다 훨씬 폭발적으로 늘어납니다. “세션을 반영하고 싶다”와 “실시간으로 서빙하고 싶다”가 정면으로 충돌하는 상황이었죠.

CUPID의 해법: 무거운 일은 미리, 가벼운 일만 실시간으로

저희(HYPERCONNECT, ICDMW 2024)가 제안한 CUPID의 핵심 아이디어는 간단하지만 강력합니다. 시간이 오래 걸리는 사용자 세션 모델링을, 실시간으로 이루어지는 매칭 과정에서 아예 떼어내는 것입니다.

구체적으로는 2단계 학습 전략을 씁니다. 먼저 임베딩 레이어에서 각 사용자의 세션 정보를 반영한 벡터를 미리(비동기로) 계산해둡니다. 그리고 실제로 두 사용자를 매칭하는 순간에는, 이미 계산되어 있는 이 임베딩들을 가지고 가벼운 예측 레이어만 실시간으로 통과시킵니다. 무거운 세션 추론을 매칭 순간에서 분리해내면서, 순차적으로 모델을 몇 번이나 다시 돌려야 했던 연산을 수백 분의 1로 줄이는 것이 가능해졌습니다.

실제로 얼마나 빨라졌나요?

아자르의 대규모 실제 데이터셋으로 실험한 결과, CUPID는 비동기 구조가 아닌 기존 방식 대비 응답 지연 시간을 76% 이상 줄였습니다. 그리고 단순히 빨라지기만 한 게 아니라, 사용자 인게이지먼트(engagement) 지표도 함께 유의미하게 개선됐습니다. “실시간이어야 한다”는 제약 때문에 포기해야 했던 세션 기반 추천의 이점을, 아키텍처를 다시 설계해서 그대로 가져온 셈입니다.

이 모델이 실제 아자르 서비스에 어떻게 적용되어 있는지는 별도로 정리한 글에서 좀 더 이야기 형태로 풀어냈고, 그보다 앞서 어떤 지표를 목표로 이 추천 모델을 설계했는지는 아하 모멘트를 찾은 과정에서 확인하실 수 있습니다. 논문 원문은 위 카드를 클릭하면 arXiv에서 바로 볼 수 있습니다.