devmoon

Content Based Recommendation / TF-IDF 본문

AI/추천 시스템

Content Based Recommendation / TF-IDF

Orca0917 2022. 11. 2. 17:42

 Content Based Recommendation 

 

영화 '인터스텔라'

 

 

콘텐츠 기반 추천은 유저가 선호하는 아이템들의 특성(feature)을 파악하여, 동일하거나 비슷한 특성을 가진 다른 아이템들을 추천하는 것을 말한다. 일상생활의 예시로 유저 A가 영화 인터스텔라, 그래비티를 선호한다고 하면 SF와 우주를 배경으로 하는 다른 영화를 해당 유저에게 추천을 해주는 것이다.

 

 

 

 

콘텐츠 기반 추천의 장점

  • 다른 유저의 데이터를 참고하지 않기 때문에, 다른 유저의 데이터가 필요 없다.
  • 새로운 아이템이나 인기가 낮은 아이템의 추천이 가능하다.
  • 추천이 왜 되었는지를 설명할 수 있다.

 

 

 

콘텐츠 기반 추천의 단점

  • 아이템의 특성(feature)을 파악하는 것이 어렵다.
  • 한 분야야의 추천만 계속 진행될 수 있다.
  • 다른 유저의 데이터를 활용하지 않는다.

 

 

 

 

콘텐츠 기반의 추천을 하기 위해서는 아이템들의 특성 파악이 필수적이다. 아이템의 특성정보를 여기서는 Item Profile이라고 부르는데, 음악을 예시로 들자면 작곡가, 가수, 분위기, 장르 등이 포함될 수 있다. 아이템이 가진 특성들을 수학적으로 표현하기 가장 적합한 것은 벡터 형태이며 각 차원에는 이진값이나 실수 값으로 채워서 표현하는 것이 가능하다.

 

 

 

 

 

 TF-IDF 

 

TF-IDF는 Term Frequency - Inverse Document Frequency의 앞글자를 딴 말로, 각 문서를 가장 잘 표현하는 단어를 찾아내기 위해서 주로 사용한다.  이름은 꽤나 복잡해보이지만 사실 간단한 원리가 적용된 알고리즘이다.

 

 

여러 동물들의 정보가 주어진 문서 묶음이 있고 각 문서에는 동물 1마리에 대한 글들이 작성되어 있다고 해보자. <원숭이🐵>에 대한 문서 A에서 단어 "바나나🍌"가 많이 등장하였지만, 전체 문서 통틀어서는 "바나나🍌"가 많이 등장하지 않는다면, 단어 "바나나🍌"가 <원숭이🐵>에 대한 문서에서만 많이 등장하였다는 의미가 되고 이는 곳 해당 단어가 <원숭이🐵> 문서 A를 잘 표현하는 것을 말하게 된다.

 

 

 

 

여기서 단어 $w$가 하나의 문서 $d$에서 많이 등장하는 것을 TF(Term Frequency), 하지만 전체 문서 $D$를 보았을 때 적게 등장하는 것을 IDF(Inverse Documnet Frequency)라고 한다. 최종적으로 TF-IDF를 계산할 때는 TF값과 IDF값을 곱해준다.

 

 

 

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

 

  • $w$ : 단어 ex. 바나나🍌
  • $d$ : 문서 ex. 원숭이🐵

 

 

 

 

TF를 계산하는 방법에는 2가지 방법이 있는데, 첫 번째는 실제로 해당 문서에서 단어 $w$가 몇 번 등장했는지의 값을 사용하는 것이고, 두번 째는 단어 $w$의 빈도를 각 문서에서 가장 많이 등장한 단어의 개수로 나누어 일반화시키는 방법이 있다.

 

 

 

 

\begin{aligned}
TF(w, d) &= \text{freq}_{w, d} \\\\
TF(w, d) &= \frac{\text{freq}_{w, d}}{\underset{k}{\max} \text{freq}_{k, d}}
\end{aligned}

 

 

 

원숭이와 강아지의 문서가 주어졌을 때, 각 단어의 freq 값

 

 

 

IDF는 단어마다 변화의 폭이 크기 때문에 smoothing 효과를 주기 위해서 $\log$를 사용한다. 전체 문서의 개수를 단어 $w$가 등장한 문서의 개수로 나눈 값에 $\log$를 취해주기만 하면 된다.

 

 

 

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

 

  • $N$ : 전체 문서의 수
  • $n_w$ : 단어 $w$가 등장한 문서의 수

 

 

 

원숭이와 강아지문서에 대한 TF-IDF 계산

 

 

 

 

이렇게 TF-IDF를 사용하면 어떤 문서의 정보를 벡터로 표현할 수 있게 된다. 벡터의 차원은 전체 문서에 사용된 단어의 개수로 설정하고, 각 차원의 값에 특정 단어와 문서에 대한 TF-IDF 값이 들어가는 것이다. Item Profile의 생성을 완료했다면 이번에는 유저에게 아이템 추천을 진행해야 한다. 따라서 User Profile을 생성해야 하며 이전에 선호했던 아이템들을 활용하여 생성하게 된다.

 

 

 

 

User Profile을 구축할 때는 선호했던 아이템들의 Item Profile 벡터를 사용하는데 이때 계산되는 방식에는 2가지가 존재한다. 하나는 이전에 선호했던 아이템 벡터를 모두 더해서 평균을 내는 방식(Simple)이고, 다른 하나는 선호도로 정규화를 진행하여 계산하는 방식(Variant)이 있다.

 

 

 

 

User profile과 Item profile 모두 생성되었다면, 유사한 두 profile을 매칭 시켜주는 작업이 필요하다. 그 계산을 하기 위해서 추천 시스템에서는 가장 많이 사용하는 기법이 코사인 유사도를 사용하는 방법이다. 코사인 유사도는 두 아이템 벡터가 얼마나 비슷한 곳을 가리키고 있는지 알려주는데 그 값이 더 클수록 해당 아이템과 유저가 관련도가 높다는 뜻이다.

 

 

 

$$ \cos(v_i, v_j) = \frac{v_i \cdot v_j}{\vert v_i \vert \vert v_j \vert} = \frac{\sum_{k=1}^N v_{ik}v_{jk}}{\sqrt{\sum_{k=1}^N v_{ik}^2} \sqrt{\sum_{k=1}^N v_{jk}^2}} $$

 

 

 

 

 

만약, 유저가 아이템에게 줄 평점 정보를 예측하고 싶다면, 유저가 선호했던 아이템($i \in I$)과 추천을 진행할 아이템($i'$) 간의 유사도를 모두 구한 뒤, 이전 아이템에게 내린 평점을 사용하여 가중평균을 계산한다.

 

 

 

$$ \text{sim}(i, i') = \cos(v_i, v_{i'}) $$

$$ \text{prediction}(i') = \frac{\sum_{i=1}^{N} \text{sim}(i, i') \; r_{u, i}}{\sum_{i=1}^{N} \text{sim}(i, i')} $$

 

  • $i$ : 유저가 선호한 아이템
  • $i'$ : 새롭게 추천할 아이템
  • $r_{u, i}$ : 유저 $u$가 아이템 $i$에 내린 평점
Comments