[황승진의 AI칼럼] 넷플릭스·유튜브는 새 상품을 어떻게 추천할까

News

[황승진의 AI칼럼] 넷플릭스·유튜브는 새 상품을 어떻게 추천할까

[지디넷코리아]

아마존, 넷플릭스, 아이튠(iTune), 유튜브, 스포티파이(Spotify), IMDb 같은 온라인 서비스 기업은 어떤 방법으로 새 상품을 추천할까? 아마존의 경우 매출의 35%가 추천 시스템에 기인하고, 넷플릿스는 80%에 달한다 하니 기업의 흥망성쇠가 추천에 달렸다해도 과장은 아니다.

사용자에 많은 부류가 있고, 또 아이템에도 많은 부류가 있으니 서로 궁합이 맞는 쌍을 연결하는 것이 추천 시스템의 핵심이다. 특히, 이를 시행하기위해 ‘여러 사용자의 선호도’를 반영한 과거 데이터를 이용하는 방식을 협업 필터링(Collaborative filtering)이라 부르며, 여기에 임베딩을 사용하는 방식을 여기 소개한다. 먼저 임베딩에 대한 복습으로 시작한다.

새로운 임베딩 시스템은 다음과 같이 만들어졌다. 많은 아이템의 집합이 여기 있다. 먼저, 각 아이템에게 하나의 벡터 임베딩을 부여한다. 의미상으로 유사한 아이템끼리는 벡터가 가깝고, 유사하지 않은 아이템끼리는 멀도록 임베딩을 잘 선택한다. 또한 두 아이템 간의 유사도를 설명하는 ‘유사도 측정값’을 써야 된다. 우리는 두 벡터의 내적(內積)(dot product)을 유사도 측정값으로 선택하며, 이 값이 클수록 두 아이템은 유사하다.

이제 넷플릭스 같은 영화 OTT에 추천 시스템을 보자. 아이템은 영화라 하고, 사용자는 시청자라 부르기로 한다. 유사한 시청자들은 유사한 영화를 좋아한다는 점을 이용하기 위해, 유사한 시청자들을 서로 근처에 가도록 몰아 놓고, 또 유사한 영화를 그들끼리 몰아 놓아야 한다. 이를 임베딩으로 한다. 먼저, 영화 집합에 그리고 시청자의 집합에 임베딩을 적용한다. 따라서 각 시청자는 자기 임베딩을 가지고, 각 아이템도 자기 임베딩을 가지고 있다.

황승진 스탠퍼드경영대학원 잭디프 로시니 싱 석좌명예교수.

흥미롭게도, 여기서 시청자와 영화는 같은 벡터 공간을 사용한다. 예를 들어, 시청자의 임베딩은 그가 어떤 속성의 영화를 선호하느냐로 정한다. 시청자의 임베딩을 (모험, 로맨스, 대규모 제작, 유명 배우 출현, 유명 여배우 출현, 외국어, 할리우드 스타일, …)이라 가정하자. 사실 실제 임베딩은 이렇게 요소별로 명확한 속성을 가지는 게 아니지만 설명을 위해 이리 가정한다. 가만히 보면, 이러한 시청자의 임베딩은 영화에게도 자연스럽게 적용된다. 그리고 임베딩의 유사성이 선호도와 연결된다.

시청자 A가 영화 B를 좋아한다면, 둘의 임베딩은 어느 정도 겹칠 것이다. 즉, A는 ‘모험=1’이고 ‘낭만=0’ 라면, 그는 그와 비슷한 영화 B(예, 0.9, 0.1)를 좋아한다. 즉, A와 B가 벡터상으로 비슷하면, 이 말은 곧 A와 B의 유사도 측정값, 두 벡터의 내적 값이 0.9처럼 크다는 것을 뜻한다. 즉 ‘궁합이 맞다’는 우리말은 수학적으로 ‘내적 값이 크다’로 해석된다. 지금 마침 한 시청자가 도착하여 넷플릭스에 로그인하면, 사이트는 매칭 프로세스를 시작한다. 사이트는 그 시청자의 계정에 연결된 임베딩을 알고 있다. 시청자와 그가 아직 시청하지 않은 100개 영화들 사이의 유사도 측정값을 하나씩 계산한다. 그 결과, 사이트는 가장 높은 순위의 영화를 추천할 것이다.

그렇다면, 시청자와 영화의 임베딩은 어떻게 얻을 수 있을까? 그저 우리가 속성별로 벡터 숫자를 메길까? 아니다. 여기에 모델의 절묘한 한 수가 있다. 먼저, ‘피드백 행렬’을 준비한다. 엑셀 스프레드시트에 큰 테이블을 만든다. 가장 왼쪽 열에 시청자들의 이름을 나열하고, 맨 위 행에 영화의 이름을 나열한다. 다음, 테이블의 셀을 채운다. 시정자 A가 영화 B를 보았다면 해당 행과 열이 만나는 셀에 1을 입력한다. 그렇지 않다면 0을 입력한다. 이 테이블 Z를 ‘피드백 행렬’ 혹은 ‘상호관련 행렬’이라고 한다. 이것은 시청자와 영화 사이의 관계를 데이터로 보여준다. 이제 드디어 임베딩이 등장한다. 이제 그 행렬 Z를 두 개의 행렬, 즉 시청자 임베딩 행렬 X와 영화 임베딩 행렬 Y의 곱(Z=XYT)으로 표현한다. 이렇게 하면 두 개의 임베딩 행렬 X, Y를 동시에 추출할 수 있다.

행렬 X는 시청자들의 벡터 임베딩을 열거한 것이고, 행렬 Y는 영화들의 벡터 임베딩을 열거한 것이다. 이렇게 추천 시스템이 완성된다. 요약하면, 피드백 행렬에서 두 개의 임베딩을 생성하고, 유사도 측정값을 적용해 시청자와 영화의 쌍에 대한 '매칭'을 찾는다. 이런 방식의 추천 시스템을 ‘임베딩을 이용한 협업 필터링’이라 부른다.

2006년 넷플릭스의 추천 시스템 공개 경쟁에서 기존 추천시스템을 이긴 사이몬 펑크(Simon Funk)와 비슷한 아이디어이고 구글의 개발자용으로도 소개됐다. 그때 주어진 데이터는 1억 개의 시청자 평가로, 50만 시청자와 1만7000편의 영화에 벡터 사이즈는 40이었다.

최근에는 LLM을 본격적으로 활용하는 추천 시스템이 개발됐다. 그 중 하나는 생성형 추출 방법(Generative Retrieval)을 이용해 영화와 시청자에게 임베딩과는 약간 다른 벡터 ID를 부여한다. 이 ID는 SID(의미상 ID)라 부르며 여러 속성에 대한 정보로 구성된다. 다음, 앞의 리스트를 보고 다음 영화를 예측케 하는 NWP(다음 단어 추측)식으로 LLM을 훈련시킨 후 다음 영화들을 추천한다. 또 다른 접근법으로는 '그래프-기반 추천법'이 있다. 지식 그래프의 모든 노드를 시청자 노드와 영화 노드 지역으로 양분한 후, 각 노드에 그 속성을 담아 임베딩을 만들고, 벡터 DB에 넣은 후, 시청자를 유사한 영화에 연결하는 방식이다. 이 각 사례에서는 LLM의 일등공신인 임베딩 아이디어를 이용한 깔끔한 애플리케이션을 보여준다.

0 Comments
제목
Category
접속자 통계
  • 현재 접속자 50 명
  • 오늘 방문자 519 명
  • 어제 방문자 979 명
  • 전체 방문자 293,217 명
  • 전체 게시물 6,535 개
  • 전체 댓글수 674 개
  • 전체 회원수 57 명
Facebook Twitter GooglePlus KakaoStory KakaoTalk NaverBand