Content-based Filtering
Content-based Filtering
(이전 게시글 내용)
User의 과거 이력을 기반으로 유사한 Item을 추천해주는 방식입니다. User의 과거 로그 정보 외에도 Item의 기본 정보가 필요할 것입니다. 해당 Item을 설명할 수 있는 특징을 모델이 이해할 수 있는 형태인 벡터로 바꿔주는 벡터화 작업이 수행되어야 합니다.
저번 게시물에서 다룬 Content-based Filtering에 대해 더 구체적으로 알아보려 합니다. Content-based Filtering의 핵심은 유사한 Item 추천입니다.
Steps
- User의 과거 이력 분석
- 해당 Item과 유사한 다른 Item 선정
- 새로운 Item을 User에게 추천
Pros & Cons
장점
- 다른 User의 정보는 필요하지 않다.
- 추천 가능한 Item의 범위가 넓다. (Long Tail 문제 방지)
- 추천의 근거를 제시할 수 있다. (A와 B제품의 ~라는 유사한 특성에 근거하여 추천)
단점
- 적절한 feature를 찾기 어렵다. (제품의 “특성”의 유사성에 기반하여 추천하는데, 특성을 어떻게 정의해야 하는가)
- 새로운 User에게 추천이 어렵다.(과거이력이 없는 User는 분석이 어렵다.)
- 선호하는 특성의 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/