Content-based Filtering

Content-based Filtering


(이전 게시글 내용)

User의 과거 이력을 기반으로 유사한 Item을 추천해주는 방식입니다. User의 과거 로그 정보 외에도 Item의 기본 정보가 필요할 것입니다. 해당 Item을 설명할 수 있는 특징을 모델이 이해할 수 있는 형태인 벡터로 바꿔주는 벡터화 작업이 수행되어야 합니다.


저번 게시물에서 다룬 Content-based Filtering에 대해 더 구체적으로 알아보려 합니다. Content-based Filtering의 핵심은 유사한 Item 추천입니다.

Steps

  1. User의 과거 이력 분석
  2. 해당 Item과 유사한 다른 Item 선정
  3. 새로운 Item을 User에게 추천

Pros & Cons

장점

  1. 다른 User의 정보는 필요하지 않다.
  2. 추천 가능한 Item의 범위가 넓다. (Long Tail 문제 방지)
  3. 추천의 근거를 제시할 수 있다. (A와 B제품의 ~라는 유사한 특성에 근거하여 추천)

    단점

  4. 적절한 feature를 찾기 어렵다. (제품의 “특성”의 유사성에 기반하여 추천하는데, 특성을 어떻게 정의해야 하는가)
  5. 새로운 User에게 추천이 어렵다.(과거이력이 없는 User는 분석이 어렵다.)
  6. 선호하는 특성의 Item만을 반복해서 추천한다.(새로운 특성(잠재적인 특성이라고 부른다.)의 Item을 추천해주지 않는다.)

Architecture

1) User&Item 정보 제공 텍스트와 같은 비정형 데이터로부터 관련 정보를 얻는 작업: feature extraction(특성 추출), vector representation(벡터화: 유사도 측정을 위해 필요)

2) Item 분석

3) User 분석 User의 취향 파악 & 선호할 만한 Item 파악

4) 유사 Item 선정

5) 추천 List 생성

대표적인 모델

TF-IDF, KNN, Naive Bayes

TF-IDF (Term Frequency-Inverse Document Frequency)

TF-IDF란, 단어들마다 중요한 정도에 따라 가중치를 부여하여, 단어 t의 상대적 중요성을 파악하는 방법입니다.

TF

단어 t가 문서 d에 등장한 단순 빈도입니다. 각 문서에서 나타난 전체 단어를 알파벳 순으로 배열하고, 각 문서별로 사용된 단어의 개수를 카운팅해서 벡터로 나타낼 수 있습니다. 문서에서 등장 빈도가 높아야 중요한 단어인 것이라고 생각할 수 있지만, 모든 문서에서 자주 등장하는 단어(ex. 그래서, 하지만)는 문서의 특징이 될 수 없습니다. 따라서 우리는 단어의 상대적 중요성을 파악해야 하는데, 단순 빈도는 이를 표현하지 못한다는 한계가 있습니다.

{문서 d에서 단어 t가 등장한 횟수}를 {문서 d에 등장한 모든 단어의 수}로 나누어주면 TF(t, d)를 계산할 수 있습니다.

TF-IDF

특정 단어가 해당 문서에서 얼마나 unique한가를 나타내기 위한 방식입니다. TF-IDF가 높을수록 특정 단어가 해당 문서에서는 많이 사용되지만, 다른 문서에서는 상대적으로 적게 사용된다는 것을 의미합니다. 즉 해당 문서의 특징적인 단어로 생각할 수 있는 것입니다.

먼저, DF는 단어 t가 등장한 문서의 개수이며, N은 전체 문서의 개수입니다. DF를 분모로 보내기 때문에 역(Inverse)이라고 표현합니다. \[IDF(t) = \log{\frac{N}{DF}}\]

TF가 단순 빈도라면, IDF는 가중치라고 이해할 수 있습니다. +) 분모가 0이 되는 것을 방지하기 위해 분모에 1을 더해주는 경우도 있습니다.

최종 수식은 다음과 같습니다. \[TF-IDF(t) = TF(t, d)*IDF(t)\]



출처: https://seunghan96.github.io/rs/2.Contents-based-Recommender-System/