본문 바로가기
IT 기록/추천 시스템

#2 추천 시스템 - 후보 생성(Candidate Generation)

by Lazy Quant 2019. 6. 30.
반응형

[이전 글]#1 추천 시스템 - 소개 및 배경지식


1.후보 생성(Candidate Generation) 개요

 후보 생성은 추천 시스템의 첫 번째 단계이다. Query를 입력하면, 관련된 후보군의 Item 세트를 생성한다. 후보 생성 과정에는 두 가지 대표적인 필터링 기법이 있다.

 

 첫 번째는 Item 간의 유사도를 활용하여 사용자가 좋아하는 Item과 유사한 Item을 추천하는 콘텐츠 기반 필터링(Content-based filtering)이다. 예를 들어, 사용자 A가 고양이 비디오를 보았다면, 다른 귀여운 동물 비디오를 추천하는 방식이다.

 

 두 번째 필터링 기법은 협업 기반 필터링(Collaborative filtering)이다. Query와 Item의 유사도를 동시에 활용하여 추천한다. 사용자 A가 사용자 B와 비슷할 때, 사용자 A가 비디오 1을 좋아한다면, 사용자 B에게도 비디오 1을 추천하는 방식이다.


2.임베딩 공간(Embedding Space)

 임베딩 공간이란 차원 축소 후 데이터가 임베드되는 공간이다. 차수는 일반적으로 주변 공간보다 낮다.

 

 콘텐츠 기반 필터링과 협업 기반 필터링은 각 Item과 각 Query(또는 컨텍스트)를 공통 임베딩 공간 $E = \mathbb{R}^d$의 임베딩 벡터에 매핑한다. 임베딩 공간은 일반적으로 낮은 차원이며, item과 query의 숨겨진 구조를 잡아낸다. 예를 들어, YouTube에서 동일 사용자가 시청했던 영상은 임베딩 공간에서 가깝게 위치한다. "근사(Closeness)"의 개념은 유사도 측정으로 정의된다.


3.유사도 측정(Similarity Measures)

 유사도 측정 함수 $s : E \times E \rightarrow \mathbb{R}$는 임베딩 쌍을 가져와 유사성을 측정하는 스칼라를 반환한다. 임베딩은 다음과 같이 후보 생성에 사용될 수 있다. Query 임베딩($q \in E$)이 주어지면, 시스템은 $q$와 근접한 Item 임베딩($x \in E$)를 찾는다. 즉 유사성이 높은 임베딩 쌍을 찾는 함수 $s(q,x)$이다.

 

유사도를 측정하는 방법은 대표적으로 세 가지가 있다. 첫 번째는 두 벡터 간 각도의 코사인 값(Cosine)이고, 두 번째는 두 벡터의 내적 값(Dot Product), 마지막으로 거리가 작을 수록 높은 유사도를 의미하는 유클리드 거리(Euclidean Distance) 있다.

 

 코사인 값(Cosine)단순히 두 벡터 사이의 각도의 코사인 값을 말한다. 

$s \left (q, x  \right ) = cos \left ( q, x \right )$

 내적 값(Dot Product)은 아래와 같이 정의 된다. 또한 각도의 코사인에 norm의 product 값을 곱한 값으로 주어지기도 한다. 따라서 임베딩이 정규화되면 내적과 코사인이 일치한다. $s(q,x) = \parallel x\parallel\parallel q\parallel\cos(q,x)$ 이 만족한다.

$s \left (q, x  \right ) = \left \langle q, x \right \rangle = \sum_{i=1}^{d} q_{i} x_{i}$

 유클리드 거리(Euclidean distance)는 평범한 유클리드 공간에서의 거리이다. 유사도 측정 함수는 아래와 같다. 거리가 작을수록 높은 유사성을 의미한다. 임베딩이 정규화 될 때, 유클리드 거리의 제곱은 내적(및 코사인)과 일치한다. 이러한 경우에는 ${\frac{1}{2}}\parallel q-x\parallel^2 = 1- \langle q,x \rangle$을 만족한다.

$s(q,x) = \parallel q-x\parallel = \left[\sum_{i=1}^{d}(q_{i}-x_{i})^2\right]^{\frac{1}{2}}$

4.유사도 측정 함수 비교

 위의 그림을 살펴보자. 검은색 벡터는 Query 임베딩을 나타낸다. 다른 3 개의 임베딩 벡터 (Item A, Item B, Item C)는 후보 Item을 나타낸다. 어떤 유사성 측정 함수를 사용하느냐에 따라 Item의 추천 순위가 달라 질 수 있다. 위의 그림을 사용하여 코사인, 내적, 유클리드 거리의 세 가지 유사성 측정법을 사용하여 Item의 순위를 결정해보자.

 

 

 Item A는 가장 큰 norm을 가지고 있으며 내적 값(Dot Product)에 따라 가장 높은 순위가 된다. Item C는 Query와 가장 작은 각도를 가지므로 코사인 유사성(Cosine)으로 측정했을 때 가장 높은 순위가 된다. Item B는 물리적으로 Query에 가장 가깝기 때문에 유클리드 거리가 선호합니다.


5.어떤 유사도 측정법을 선택해야 하는가?  

 코사인(Cosine)에 비해, 내적 유사도(Dot Product)는 임베딩의 놈(norm)에 민감하다. 즉, 임베딩의 norm이 클수록, 유사도가 높고(예각에 있는 품목들), 추천될 가능성이 크다. 이러한 방식은 아래와 같은 영향을 미치기도 한다.

 

 Training Set에 자주 등장하는 Item(ex. YouTube의 인기 동영상)은 큰 norm 값의 임베딩을 가지는 경향이 있다. 만약 정보의 인기도를 포함하는 것이 맞다면, Dot Product 방식을 사용하는 것이 좋다. 하지만 주의해서 사용하지 않으면, 인기있는 Item만 추천되는 상황이 발생할 수 있다. 새로운 Item을 계속해서 사용자에게 추천해야 하는 경우에는 적합하지 않을 수 있다. 실제로 Item의 norm 영향도를 낮추기 위해 변형된 유사도 측정 식을 사용하기도 한다.

 

 또한 드물게 나타나는 Item의 경우에는 학습 중 자주 업데이트 되지 않는다. 초기에 큰 norm 값으로 세팅된다면 시스템은 관련된 Item 보다 더 추천하게 된다. 이러한 문제를 피하기 위해, 임베딩 초기화를 신경써서 해야하며 적절하게 정규화를 사용해야한다.


[출처] 구글 머신러닝 추천시스템


공감댓글, 그리고 공유는 큰 힘이 됩니다 : )

 

반응형

댓글