추천시스템
안정적인 선호도로부터 시작
컨텐츠기반 추천에서는 컨텐츠의 속성들을 안정적인 선호도로 선정한다.
뉴스 |
기술관련 뉴스, 대학관련 뉴스, 식당관련 뉴스 등 |
옷 |
면티, 파란색, 저가, 캐쥬얼 |
영화 |
톰 행크스, 우디 앨런, 코미디 |
호텔 |
24시간 프론트데스크, 룸서비스, Wifi, 수영장 |
핵심 아이디어
- 아이템들의 관련된 속성들을 사용해 모델링을 한다.
- 컨텐츠의 속성에 따라서 사용자의 선호도를 노출한다.
- 그것은 곧 추천이 된다.
컨텐츠 기반 필터링
컨텐츠기반 필터링은 컨텐츠의 속성이나, 선호도를 표현할 수 있는 키워드들을 벡터로 만든다.
- 사용자가 아이템을 읽거나, 클릭하거나, 사거나 하는 액션을 취한다면 그것을 통해 사용자의 프로파일 정보를 유추해 볼 수 있다.
- 사용자가 평점를 매긴다면, 그것을 직접적인 평가로 사용할 수 있다.
- 이 두 종류의 정보들을 모아 사용자 프로파일을 만들어 프로파일과 가장 유사한 아이템들을 추천하게 된다.
사용자 프로파일
그렇다면 사용자 프로파일은 어떻게 구축할 수 있을까?
- 키워드의 집합으로부터 시작해 볼 수 있을것이다. (사용자가 좋아하거나 좋아하지 않는 아이템에 대한 키워드 등)
- 사용자가 관심을 가지는 (혹은 싫어하는) 키워드들을 가진 아이템들의 카운트를 세어볼 수 있다.
- 이제 키워드들의 벡터(집합)이 주어지면, 그것을 통해 다른 아이템들에 대한 선호도를 조사해본다.
- 키워드의 백터를 사용해 TFIDF와 같은 기법들을 사용할 수 있다.
키워드벡터
키워드벡터는 키워드를 사용해 벡터공간에 컨텐츠(아이템)를 표현하기 위함이다.
키워드는 아이템을을 정의하는 단어일 수도 있고, 영화의 경우는 장르, 배우와 같은 특성일 수도 있다.
- 각 키워드는 하나의 차원이다 (Onehot Encoding).
- 각 아이템은 키워드의 차원 내의 포지션(벡터)가 된다.
- 각 사용자는 선호도 프로필이 있고, 그 선호도 또한 차원 내의 벡터가 된다.
- 사용자와 아이템의 매치는, 두 벡터가 얼마나 가까이 정렬되어 있는가를 보고 결정한다.
- 차원(키워드)가 많아질 수록 벡터화하기가 어려워지기 때문에, 키워드를 줄이는 것을 고려해야 한다.
아이템을 키워드 벡터로 표현하는 방법
- 키워드가 있는지 없는지? (0/1의값)
- 카운트
- TFIDF (가장 보편적인 방법)
- 다른 변형/조합들
- 결과적으로 모든 방식은 키워드벡터가 되고 그것을 정규화하면 사용이 가능해진다.
TFIDF
TFIDF기법은 정보검색 분야에서 출발한 개념이다.
정보검색과 관련된 개념을 자세히 설명하지는 않을것이지만,
정보검색에 TFIDF가 어떻게 쓰였는지 들여다 보도록 하자.
TF는 "Term Frequency"의 약자로 단어의 빈도수를 뜻한다.
- 이는 문서에서 많이 나오는 단어가 중요한 단어임을 뜻한다.
하지만 모든 단어가 빈도에 대해서 같은 영향을 가지는 것은 아니다.
- "The"와 같은 단어는 모든 문서들에서 많이 나오는 단어이다.
- "Civil War"와 같은 단어는 특정 문서들(특히 역사 관련 문서들)에서만 많이 나오는 단어이다.
- 사용자가 "The Civil War"와 관련된 문서를 원할 때, "The" 보다는 "Civil War"에 중점을 두어야 더 정확한 문서들이 나올것이다.
TFIDF 가중치
TFIDF 가중치는 아래 두가지 요소를 곱한 결과이다:
- Term Frequency X Inverse Document Frequency
Term Frequency
- 하나의 문서에 한 단어가 나오는 단순한 빈도수
- 이 단어가 이 문서와 어느정도 연관성이 있는가를 표현한다.
Inverse Document Frequency
- 특정 단어가 한 문서에서 나올 확률이 얼마나 드문가를 표현한다.
- 계산법은 아래와 같다:
log(모든 문서의 수 / 특정 단어를 가진 문서의 수)
- 문서의 수가 많아지면, 계산하기가 까다로워지기 때문에 log를 취한다.
이 가중치는 검색하는 쿼리의 각 단어들에 적용되어 문서들과 비교된다.
영화 태깅 예제)
영화의 경우 키워드벡터는 어떻게 표현할 수 있을까?
키워드가 있는지 없는지로 표현 (Onehot Encoding)
TF방법
- 톰 행크스가 영화에 얼마나 많이 나왔는지는 중요하지 않다.
- "법정"이라는 단어가 많이 나온다면, 이 단어가 영화를 잘 표현해 주는가?
IDF방법
- 특정 배우가 다른 배우보다 중요한가?
- "감옥장면"이 "키스씬", "로맨스" 보다 중요한가?
TFIDF 강점/약점
강점 |
약점 |
|
|
컨텐츠 기반 필터링과 TFIDF
컨텐츠 필터링은 기본적으로 사용자의 프로필에 기반해 컨텐츠를 추려내는 작업이다.
이 과정에서 TFIDF는 사용자의 프로필에 문서기반 프로필을 만든다.
문서에 나온 단어들이 이 사용자에게 얼마나 중요한 단어인가를 사용해 선호도를 반영한다.
정보검색에서는 사용자의 질의어(Query)와 유사한 문서들을 가져와 랭킹을 매긴다.
사용자의 프로필에 있는 단어들을 벡터화하고, 문서들의 단어를 백터화 해서 비교해보면,
특정 문서에 대한 사용자의 선호도를 알 수 있을 것이다.
아이템에서 사용자 프로필로
벡터모델은 각 특성값을 하나의 스칼라값으로 표현하게 된다.
이 말은 즉, 좋아요 하나가 다른 어떤 중요한 특성값과 같은 의미를 가진다는 것이 되는데,
특정 도메인에서는 좋지 않은 방법이 된다.
그렇다면 사용자의 프로필을 어떻게 표현할것인가?
다음과 같은 사항들을 고려해 볼 수 있다.
- 정규화를 할것인가?
- 모든 벡터가 같은 길이를 가질 수 있게 정규화 할것인가?
- 모든 특성이 같은 중요도를 가지는가?
- 이 방법은 많은 경우 좋지 않다는 것을 알 수 있다.
- 각 특성마다 중요도에 대한 다른 가중치를 둘 것인가?
- 평점을 중요도로 매길 것인가?
- 신뢰도를 사용할 것인가?
- 평점을 어떻게 요소화 할것인가?
- 단항의 값? - 벡터를 모두 더해 가중치가 없이 사용
- 이항의 값? - 양수의 값이면 더하고 음수의 값이면 빼서 사용
- 제한된 단항의 값? - 일정 수준이 넘어서는 단항의 값만 사용 (3.5평점 이상의 이이템만 사용 등)
- 양수의 가중치의 값? - 높은 점수가 높은 값임을 의미
- 음수의 가중치값도 사용한 값? - 음수 평점을 낮은 값으로 사용
- 프로파일을 어떻게 갱신할 것인가?
- 갱신하지 않고 매번 새로 만들어 사용 - 비효율적이다.
- 새로 들어온 가중치를 어떠한 비율로 적용 (선형결합)
- 예전 가중치를 조금씩 감소시키고 (Time Decay) 새로운 가중치를 적용
- (예. 0.95 * 오래된가중치 + 0.05 * 새로운가중치)
예측값(유사도) 계산
컨텐츠 기반 추천의 마지막 단계는 구해진 벡터들을 이용해 예측값을 구하는 것이다.
이 예측값이 곧 추천할 아이템을 선정할 값이 된다.
사용자의 선호도 벡터와 아이템들의 벡터가 있을 때,
사용자가 각 아이템을 선호할 예측값은 두 벡터의 코사인 유사도를 구한 값으로 결정된다.
(또는 유클리디언 거리, 피어슨유사도 등 여러 통계적 유사도를 구하는 방법을 사용해도 된다.)
코사인 유사도는 각 벡터의 내적곱을 구하고, 그것을 각 벡터의 길이를 곱한값으로 나눈 값이다.
벡터 v와 벡터 w의 코사인 유사도를 수식으로 표현하면 아래와 같다:
$$\frac{v \cdot w}{||v|| \cdot ||w||}$$
코사인 유사도의 값은 -1과 1사이의 값이다.
추천할 때는 이 유사도 값을의 최상위 N개를 추천할 수 있다.
컨텐츠 기반 추천의 장단점
컨텐츠기반 추천은 간단하다는 장점이 있지만, 여러 단점 또한 존재한다.
이 추천 방법의 여러 장단점은 아래 표에서 알아볼 수 있다.
장점 |
단점 |
|
|
본 포스팅은 Minnesota대학교의 Intro to Recommender Systems코세라 강좌를 정리한 내용입니다.
https://www.coursera.org/learn/recommender-systems-introduction?specialization=recommender-systems
'데이터사이언스 > 추천시스템' 카테고리의 다른 글
추천시스템 - (11) 추천시스템 평가 (0) | 2020.08.04 |
---|---|
추천시스템 - (10) 추천시스템의 학습 (0) | 2020.08.04 |
추천시스템 - (8) 연관성 분석 추천 예제 (0) | 2020.07.12 |
추천시스템 - (7) 제품연관성 (0) | 2020.06.26 |
추천시스템 - (6) 인구통계 (0) | 2020.02.23 |