추천시스템

TF-IDF를 활용한 컨텐츠 기반 필터링 (Content-based Filtering)

jeongpil 2021. 8. 23. 18:32

안녕하세요! 오늘은 TF-IDF를 활용한 컨텐츠 기반 필터링에 대해 알아보겠습니다.

 

 

1. 컨텐츠 기반 필터링이란?

2. Item Profile

3. TF-IDF를 활용하는 방법

4. User Profile

5. Item Profile과 User Profile을 이용하여 추천

6. 컨텐츠 기반 필터링의 장단점

 

 

1. 컨텐츠 기반 필터링이란?

 

컨텐츠 기반 필터링이란 유저가 선호하는 아이템을 기반으로 해당 아이템과 유사한 아이템을 추천하는 것을 말합니다.

 

 

 

 

위의 그림을 보면, 유저가 "빨간 원"과 "빨간 삼각형"을 좋아한다고 했으면 이 유저에게 "주황 원"과 "빨간 사각형"을 추천해줍니다.

 

그 이유는 유저가 좋아하는 아이템을 통해 User Profile을 만들면 "빨간색", "삼각형", "원"이 나옵니다.

 

그래서 주황색이지만 원 모양을 가진 "주황 원"을 추천해주고, 사각형이지만 빨간색을 가진 "빨간 사각형"을 추천해주는 것입니다.

 

이러한 추천 방식을 컨텐츠 기반 필터링이라고 말하며, 이 방법이 어떻게 이루어지는지 알아보도록 하겠습니다.

 

 

 

2. Item Profile

 

추천 대상이 되는 아이템들에 대해서 Profile을 만들어야 합니다. 

 

영화를 추천해주는 시스템일 경우, 영화라는 아이템의 Profile을 만들어야 하고 이는 아이템이 가진 속성으로 구성되어 있습니다.

 

영화의 경우 감독, 제목, 출연 배우, 장르 등이 영화가 가진 속성에 해당합니다.

 

이 다양한 속성들을 가장 편리하게 표현할 수 있는 방법은 벡터로 표현하는 것입니다.

 

다른 예시로, 문서는 여러 단어들로 이루어져 있고 이 중, 중요한 단어들이 문서를 대표할 수 있습니다. 

 

이때, 단어의 중요도를 알아내는 가장 많이 쓰이는 기본적인 방법이 TF-IDF입니다.

 

 

 

3. TF-IDF 활용

 

TF란 Term Frequency의 약자로, 특정 단어가 특정 문서에 등장하는 횟수를 말합니다.

 

w는 특정 단어를 뜻하고 d는 특정 문서를 뜻합니다.

 

$$ TF(w,d) = freq_{w,d} $$

 

 

IDF란 Inverse Document Frequency의 약자로, 전체 문서 중 특정 단어가 등장한 문서의 비율의 역수를 말합니다.

 

$$ IDF(w) = log \frac{N}{n_{w}} $$

 

TF-IDF는 TF에 IDF를 곱한 값입니다.

 

$$ TF-IDF(w,d) = TF(w,d) \times IDF(w) $$

 

TF가 크다는 것은 특정 단어가 특정 문서에 많이 등장했다는 것이고 IDF가 크다는 것은 전체 문서 중에서 특정 단어가 등장한 문서가 적다는 말입니다.

 

따라서, TF-IDF가 크다는 것은 특정 단어가 특정 문서를 대표하는 중요한 단어라고 생각할 수 있는 것입니다.

 

 

예시를 통해 알아보겠습니다.

 

 

 

위의 표는 문서 d1~d4에 단어 w1~w6가 나타난 빈도 TF를 나타낸 표입니다.

 

이 표를 이용해 IDF를 구하고 TF-IDF를 구한 표는 아래와 같습니다.

 

 

 

 

이제 Item Profile을 구했으니 유저에게 아이템을 추천해주기 위해서 User Profile을 구해야 합니다.

 

 

 

4. User Profile

 

User Profile은 유저가 선호하는 아이템의 벡터를 통해 구합니다.

 

User Profile을 구하는 방식은 Simple 방식과 Variant 방식이 있습니다.

 

Simple 방식은 유저가 선호한 Item Vector들의 평균 값을 사용합니다.

 

Variant 방식은 유저가 아이템에 내린 선호도로 Normalize하여 평균한 값을 사용합니다.

 

아이템 \( I = {i_1, ... ,i_n}  \) 가 존재하고, 해당 아이템에 대한 선호도는 \( r_{u,i}  \),

 

아이템 i에 대하여 TF-IDF를 통해 얻어진 벡터를 \( V_i  \) 라고 할때,

 

Simple 방식과 Variant 방식을 통해 유저의 프로파일 벡터를 구하는 수식은 다음과 같습니다.

 

 

Simple

 

$$ U = \frac{\sum_{i=1}^n V_i}{n} $$

 

Variant

 

$$ U = \frac{\sum_{i=1}^n r_{u,i}V_i}{\sum_{i=1}^n r_{u,i}} $$

 

 

만약 유저가 문서 d1과 d2를 선호했다면, Simple 방식으로 구한 해당 유저의 프로파일 벡터는 다음과 같습니다.

 

$$ User\ Vector = \frac{v_{d1}+v_{d2}}{2} $$

 

User Profile도 구했으니 Item Profile과 User Profile을 이용해서 아이템을 추천하는 방법에 대해 알아보겠습니다.

 

 

 

5. Item Profile과 User Profile을 이용하여 추천 

 

User Vector를 u, Item Vector를 i라고 했을 때, u의 i에 대한 선호도인 \( score(u,i)  \)를 구하는 방법은 다음과 같습니다.

 

$$ score(u,i) = cos(u,i) = \frac{u \cdot i}{\left\vert u \right\vert \cdot \left\vert i \right\vert}  $$

 

코사인 유사도를 통해 구하는 것인데, 코사인 유사도는 두 벡터가 비슷한 방향을 가리킬수록 1에 가까운 값을 가지고, 반대를 향할수록 -1에 가까운 값을 가집니다.

 

단, 두 벡터의 차원이 같아야 합니다.

 

 

User Vector는 Item Vector를 이용하여 구해진 것이므로 둘의 유사도가 클수록 해당 아이템이 유저에게 관련성이 높다고 판단할 수 있고 추천했을 때 선호도가 높을 것이라 기대할 수 있습니다.

 

 

 

6. 컨텐츠 기반 필터링의 장단점

 

장점

유저에게 추천할 때 다른 유저의 데이터가 필요하지 않아 cost가 적다.

 

아이템의 유사도만 따지기 때문에 새로운 아이템 또는 인기도가 낮은 아이템을 추천할 수 있다.

 

추천 아이템에 대한 설명이 가능하다.

 

 

단점

아이템의 적합한 속성을 찾고 가공하는 것이 어렵다.

 

한 분야/장르의 추천 결과만 계속 나올 수 있다. (Overspecialization)

 

장점이기도 하지만 다른 유저의 데이터를 활용할 수 없기 때문에 유저가 본 것과 비슷한 것만 나오게 된다.  (위의 Overspecialization과 비슷)

 

 

 

이렇게 콘텐츠 기반 필터링에 대해 알아봤습니다. 다음은 다른 유저의 데이터를 활용하여 추천을 해주는 협업 필터링에 대해 알아보도록 하겠습니다 : )

 

 

 

 

Reference

 

러닝 스푼즈의 "비즈니스 Case와 딥러닝을 활용한 추천시스템 구현" 강의