컨텐츠 기반 추천 Content-based Recommendation
사용자가 과거에 선호한 아이템과 비슷한 아이템을 그 사용자에게 추천
ex) 같은 장르의 음악
장점 | 단점 |
다른 유저의 데이터가 필요하지 않음 | 아이템의 적합한 피쳐를 찾는 것이 어려움 :이미지냐 텍스트냐에 따라 feature preprocessing도 달라져 시간이 오래 걸린다. |
새로운 아이템이나 인기도가 낮은 아이템을 추천할 수 있음 | 한 분야의 추천 결과가 계속 나온다 overspecialization |
설명 가능 | 다른 유저의 데이터 활용 불가 |
Item Profile
item이 가진 부가정보로 feature를 찾아서 item profile을 만들어야 한다.
아이템이 가진 feature를 vector형태로 표현하는 것이 쉽다. 하나의 feature가 1개 이상의 vector dimensiondp 이진/실수 값으로 구성된다.
TF-IDF : Term Frequency - Inverse Document Frequency
text의 feature를 기본적인 개념인 TF-IDF에 대해서 알아보자
text는 단어들의 집합이고 단어가 문서의 특징을 나타내게 된다. 중요한 단어를 선정하는 score가 필요한데 이를 나타내는 방법이 바로 TF-IDF인 것이다.
TF(Term Frequency) : 단어w가 문서d에서 많이 등장한다
IDF(Inverse Document Frequency) : 단어w가 전체 문서D에서는 적게 등장한다.
->전체 문서에서는 적게 등장하는데 해당 문서d에 등장했다는 것은 단어w가 문서d를 잘 설명하는 중요한 단어라는 뜻이므로 TF와 IDF를 곱한 TF-IDF가 높게 된다.
$$TF-IDF(w,d)=TF(w,d)\cdot IDF(w)$$
- TF : 단어w가 문서d에 등장하는 횟수
$TF(w,d)=freq_{w,d}=\frac{freq_{w,d}}{\underset{k}{max}(freq_{k,d})}$
max를 씌워 normalize할 수도 있다. 문서의 길이가 제각각 다르면 절대적인 문서의 길이에 따라 전체적인 term frequency 값이 커질 수 있다. 그럴 경우에 해당 문서에서 가장 많이 나온 단어의 갯수 $\underset{k}{max}(freq_{k,d})$로 나누어 준다. - IDF : 전체 문서 가운데 단어 w가 등장한 비율의 역수
$IDF(w)=log\frac{N}{n_{w}}$
※ N : 전체 문서의 갯수, $n_{w}$ : 전체문서 N 가운데단어w가 등장한 문서 갯수
IDF는 단어마다 정의되고 값의 변화가 크기 때문에 log를 사용한다.
network | read | system | apple | |
d1 | 2 | 1 | 3 | 0 |
d2 | 0 | 2 | 1 | 0 |
TF-IDF(network, d1)= 2$\cdot log \frac{2}{1}$ 와 같이 각각에 칸마다 TF-IDF를 계산할 수 있을 것이고
d1에 대한 vector $v_{d1}$은 [TF-IDF(network, d1), TF-IDF(read, d1), TF-IDF(system, d1), TF-IDF(apple, d1)]가 된다.
단어의 갯수가 총 4개이기 때문에 이 문서를 표현하는 item profile vector은 4차원 vector가 된다.
Build User Profile
Item profile뿐만 아니라 유저에게 아이템을 추천하기 위해서는 User Profile도 필요하다.
User profile 생성 과정
- 과거에 유저가 선호했던 아이템 list
아이템은 아까의 예시로 치면 문서d단위 이다.
이제부터 유저의 선호 아이템 list=[d1,d3] 로 해보자 - 개별 item들은 TF-IDF를 통해 Item profile로 표현된다.
- 유저의 선호 아이템 list안에 있는 item들의 item vector을 통합하면 user profile이 완성
통합하는 방법이 2가지가 있다.- simple
유저가 선호한 item vector의 평균값 사용
$simple\;vector=\frac{v_{d1}+v_{d3}}{2}$
두 개의 아이템만 선호하기 때문에 2로 나누어 평균을 구해준다. - variant
유저가 아이템에 내린 선호도로 정규화한 평균값 사용
예를 들어 user가 d1과 d2를 에 대해 평점을 각각 3($r_{d1}$),4($r_{d2}$) 로 선호도로써 매겼다면
선호도 값을 가중치로 이용해 가중평균을 낼 수 있다.
$variant\;vector=\frac{r_{d3}v_{d1}+r_{d3}v_{d3}}{r_{d1}+r_{d3}}$
- simple
User Profile기반 추천하기
Cosine Similarity
주어진 두 벡터 X,Y에 대해서 각 벡터의 각도가 같을수록 1 직교하면 0, 반대이면 -1을 가리킨다.
또한, 추천시스템에서 가장 많이 사용되는 유사도이다.
$$cos(\theta) = cos(X,Y)=\frac{X\cdot Y}{|X||Y|} = \frac{\Sigma^{N}_{i=1}X_{i}Y_{i}}{\sqrt{\Sigma^{N}_{i=1}X_{i}^{2}} \sqrt{\Sigma^{N}_{i=1}Y_{i}^{2}}}$$
이 cosine similarity를 이용해서 user vector와 item vector의 거리를 계산해보자
user vector는 item vector의 합으로 표현되어 있기 때문에 두 vector의 차원은 같다.
user vector와 item vector의 cosine similarity가 곧 이 유저가 item에 갖는 score여서 클수록 좋다.
$$score(u,i)=cos(u,i)=\frac{u\cdot i}{|u|\cdot|i|}$$
score가 큰 아이템부터 유저에게 추천할 수 있다. score가 큰 순서대로 N개를 추천한다면 그게 TopN 추천이 된다!
Rating 예측하기
유저가 특정 한 아이템에 가질 선호도(평점)을 예측하고 싶을 수도 있다. (예측문제)
user profile을 만들지 않고 user가 평점을 남긴 모든 item vector를 이용해서 평점을 예측한다.
- 유저 1명
u - 유저u가 평점을 남긴 아이템
$I={i_{1}, \dotsb , i_{N}}$ - Item Vector
$V={v_{1}, \dotsb , v_{N}}$ - 평점
$r_{u,i_{n}}$ - 평점을 예측할 새로운 아이템
i'
일단 새로 예측할 i'과 선호했던 i들과의 유사도를 구한다.
$$sin(i,i') = cos(v_{i},v_{i'})$$
이 유사도를 가중치로 사용해서 과거에 선호했던 아이템들의 평점에 적용해 i'의 평점을 추론한다.
'부스트캠프 AI Tech 3기 > 이론 : U-stage' 카테고리의 다른 글
[Day32] Collaborative Filtering 3-1 CF & Neighborhood-based CF (0) | 2022.03.08 |
---|---|
[추천시스템] Precision@K, Recall@K, AP@K (0) | 2022.03.08 |
[Day31] 추천 시스템 Basic 2-1 연관 분석 (0) | 2022.03.07 |
[Day31] 추천 시스템 Basic 1-2 추천시스템의 평가 지표와 인기도 기반 추천 (0) | 2022.03.07 |
[Day31] 추천 시스템 Basic 1-1 추천시스템이란 (0) | 2022.03.07 |