컨텐츠기반 추천알고리즘
컨텐츠기반 추천시스템
- 컨텐츠가 비슷한 아이템을 추천한다.
- 사용자가 과거에 경험했던 아이템 중 비슷한 아이템을 현재 시점에 추천한다.
- Information Retrieval과 Machine Learning의 중간 지점
- Main Idea - 유저 A가 높은 평점을 주거나 큰 관심을 갖은 아이템 x와 유사한 아이템 y를 추천
- 예시 - 영화: 같은 배우, 같은 장르, 같은 감독 등 비슷한 특징을 갖는 영화를 찾아서 추천
장점
- 다른 유저의 데이터가 필요하지 않다.
- 추천할 수 있는 아이템의 범위가 넓다.
- 추천하는 이유를 제시할 수 있다.
단점
- 적절한 features를 찾기가 어렵다.
- 새로운 유저를 위한 추천이 어렵다.
- 선호하는 특성을 가진 항목을 반복 추천한다.
컨텐츠기반 추천시스템 Architecture
예시
- 신곡이 출시되면, 음악을 분석하여 장르, 비트, 음색 등 400여 항목 체크 -> features extraction
- 유저로부터 'like'를 받은 음악의 특색과 해당 유저의 프로파일 준비 -> profile learner
- 음악의 특징과 사용자 프로필을 바탕으로 선호하는 음악 추천 -> filtering component
컨텐츠 기반 추천시스템에서 가장 중요한 것
- 컨텐츠의 내용을 분석하는 아이템 분석 알고리즘
- 추천시스템의 성능을 높일 수 있는 적절한 컨텐츠를 사용하는 것
Item Representation-1
- Item을 set of features로 표현한다.
- Item의 여려 특성을 attributes, features라고 한다.
- Item Profile은 분석된 여러 특성들을 나타내며, 이를 정량화해서 사용한다.
- Item 설명은 text features이므로, text preprocessing 등을 통해 features를 얻을 수 있다.
- Item-Item 간의 유사도는 Cosine Similarity를 활용한다.
Item Representation-2
1. Features Extraction
- 유저의 관심사를 나타내는 많은 정보를 얻을 수 있다. -> 만족스러운 추천 결과로 이어진다.
- Feature Weighting 또는 Feature Selection을 통해 discriminative한 features를 추춘한다.
2. 영화
- Meta Information: 영화 장르, 배우, 감독, 간단한 설명, 예고편 등
- 영화 리뷰에 대한 키워드 분석, 영화 설명(시놉시스) 키워드 분석
3. 음악
- Meta Information: 음악 장르, 음악 가사, 음원 데이터 등
- 음악 리뷰, 함께 소개된 음악 종류, 제목 등
4. 뉴스, 웹페이지 등
- 기사 원문, 헤드라인, 댓글 등 텍스트 정보
User Profile -1
- 특성 가중치는 사용자가 가지고 있는 아이템 특성 가중치의 평균 값을 주로 활용한다.
- 사용자의 기호를 따로 파악하거나, 설문조사 또는 자발적인 키워드 입력 등으로 얻은 프로필이다.
- Like/Dislike, Ratings from 0 to 5, 직접 작성한 유저의 주관적인 생각을 담은 댓글 등
- 검색 로그, 아이템 선택 후 구매 또는 선택, 특정 아이템을 위해 비슷한 아이템을 tag한 이력 등
- User Profile 학습은 분류 문제를 푸는 것과 같다. -> 주어진 user profile 정보를 바탕으로 새로운 아이템을 유저가 평가한 metric 중 하나를 선택, 아이템에 대한 유저의 기존 평가 = {r1, r2, ..., r5}
비슷한 컨텐츠를 찾는 방법
유클리드 거리(Euclidean Distance)
- 두 점 사이의 거리를 계산할 때, 사용하는 평가 지표(evaluation metric)
- 여러 차원을 갖는 점과 점 사이의 거리를 계산 할 수 있다.
- 거리 기반 유사도 측정 방법
코사인 유사도(Cosine Similarity)
- 벡터를 비교할 때, 가장 많이 유용하게 사용되는 평가 지표(evaluation metric)
- 코사인 유사도는 벡터 A와 벡터 B 사이의 각도로 계산된다.
- 코사인 유사도는 -1과 1사이의 값을 가지며, -1은 완전히 반대, 0은 서로 독립, 1은 완전히 같은 경우
- 각도 기반 유사도 측정 방법; 두 벡터간 유사한 정도를 코사인 값으로 표현
유클리드 거리와 코사인 유사도 비교
- 비교하고자 하는 데이터(벡터) 간의 스케일 차이가 크게 날 경우 코사인 유사도, 크지 않다면 유클리드 거리
- 유클리드 거리는 단순하게 점과 점 사이의 거리만 측정
- 반면, 코사인 유사도는 무게나 크기 고려하지 않고, 벡터 사이의 각도만으로 측정
다른 평가지표
- Manhattan Distance
- Pearson Similarity
- Minkowski Distance
- Mean Squared Difference Similarity
- Jaccard Similarity
근접 이웃 추천알고리즘
k-Nearest Neighbor 알고리즘
- 데이터(아이템 또는 유저)로부터 거리가 가까운 k개의 다른 데이터를 선택하는 알고리즘
- 데이터와 다른 데이터 사이의 거리를 측정할 때, 'Euclidean distance'등 거리계산 metric을 활용
- 회귀(Regression)의 k-NN 알고리즘 -> 객체의 특성 값이며, 이 값은 k개의 nearest neighbor값들의 평균
- 분류(Classification)의 k-NN 알고리즘 -> 소속된 항목(label)을 출력하며, k개의 nearest neighbor 중 과반수로 분류
- Model-based Learning이 아닌 Lazy Model
- k값과 거리측정 방법 -> 알고리즘 성능의 가장 중요한 Hyperparameter
1. k 값
- k 값에 따라 overfitting과 underfitting 발생
- 개별 데이터 모두를 반영한 지역적 모델 또는 과도한 정규화로 데이터 label 특성 반영이 안된 모델
- k는 홀수로 하는 것이 일반적
2. 거리측정 metric
- Euclidean Distance: 데이터 A와 B사이의 직선거리를 사용한 지표
- Mahalanobis Distance: 변수의 상관관계를 고려한 지표, 변수 내 분산과 변수간 공분산 반영
- Manhattan Distance: 좌표축을 따라 이동한 거리를 사용한 지표
k-NN 알고리즘 장단점
1. 장점
- 훈련이 (거의) 없기 때문에, 빠르게 학습 가능한 알고리즘
- 수치 기반 데이터에서 우수한 성능을 나타내는 알고리즘
- 단순하고 효율적이다.
2. 단점
- 명목 또는 더미 데이터를 처리하기 어렵다.
- 변수(특징)가 많은 데이터는 처리 속도가 느리고 정확도가 많이 떨어진다.
- 적절한 k를 선택하는 것이 어렵다.
- 변수(특징)을 이해하는 알고리즘이 아니며, label과의 관계 파악 등 설명력이 떨어진다.
- 각 변수(특징)마다 스케일이 다른 경우 동일한 거리 척도를 사용하기 어렵다.
k-NN 구현을 위해 고려해야할 부분
- 변수 간의 분포가 다르기 때문에 데이터 정규화를 꼭 해야한다.
- 데이터 간의 거리 측정 효율화
- 공간 상에서 데이터의 representation 상태를 확인해야한다.
나이브베이즈 추천알고리즘
베이즈 정리(Bayes's Theorem)
1. 공식
2. 사전확률
- 현재 정보를 바탕으로 정한 확률(동전 앞면 나올확률 = 1/2)
3. 사후확률
- 사건 B가 사건 A로부터 발생했다는 가정하에 사건 A의 확률 업데이트
- 베이즈 정리를 통해 사후확률 계산
나이브베이즈 분류기(Naive Bayes Classifier)
1. 베이즈 정리에 의한 통계기반 분류 알고리즘; 지도학습
2. 특징
- 아이템의 특징끼리 서로 독립
- 영화 장르와 영화 감독이 서로 연관이 없는 특징이어야 한다
- 데이터 셋이 커도 모델 예측에 관계 없다
- Continuous Variable보다 Discrete Variable에 더 잘 맞는다
- 간단하고, 계산량이 많지 않은 모델
- 데이터의 차원이 높아질수록 모든 class에 대해 확률이 0으로 수렴 가능 -> Laplace Smoothing 활용
TF-IDF
Vector Representation(벡터화)
- m개의 review 문서가 있다고 가정하자
- review 문서 전체에 등장하는 단어의 수는 n개이다.
- 각 항목은 해당 단어가 review에 등장하는 빈도수를 의미한다; (Review 1, Word 0) = 2 => Review 1에 Word 0은 2번 등장한다.
Term Vector Representation
1. Term Weight
- (i, j) = weight
- Term Frequency Vector: 단어의 빈도수로 벡터를 나타냄, 문서 i에서의 단어 j의 중요도
2. TF-IDF
- 흔하게 등장하는 단어는 중요하지 않은 단어
- Information Retrieval에서 많이 사용하는 개념
- 각 단어에 가중치를 부여해서 Keyword extraction 등에 활용
- 문서에서 특정 단어가 등장하는 것으로 문서끼리 관련있음을 표현할 수 있음
TF-IDF
- TF: 단어(Word) w가 문서 d에 등장한 빈도수
- DF: 단어(Word) w가 등장한 문서 d의 수
- N: 전체 문서의 수
- 만약 [단어 w가 포함된 문서 수 = 전체 문서 수] 이면 TF-IDF(w, d) = 0 -> 단어 w의 정보력은 없다
- DF가 큰 단어는 정보력이 적다 -> 흔하게 등장하는 단어는 유사도 계산에서도 제외하게 된다, 대부분 조사, 관사 등이 해당된다
- 즉, TF는 해당 단어가 해당 문서에 얼마나 자주 등장하는지 체크, IDF는 해당 단어가 얼마나 다른 문서에 비해 해당 문서에서 특별한지 체크
TF-ID 실습
https://colab.research.google.com/drive/1TStJAGQMqS-Wbqeq_vb_tBVnMoV_um6o#scrollTo=GNdKEkqxOD2V
Google Colaboratory Notebook
Run, share, and edit Python notebooks
colab.research.google.com