콘텐트 기반 추천 시스템 (2)

in #recommender7 years ago

사용자 프로파일

추천을 위해서 아이템 프로파일만 필요한 것은 아닙니다. 사용자의 선호를 반영해야 합니다. 일단 앞에서 다루었던 사용자 선호도 행렬을 생각해봅니다. 각 행은 한 사용자, 각 열은 한 아이템을 나타내고, 각 행과 열에 만나는 부분에는 평점이 들어가거나 클릭 또는 좋아요 정보를 나타내는 1이 들어갑니다. 후자의 경우 대부분은 비어있는 희소 행렬입니다. 아이템 프로파일과 사용자 프로파일을 적절히 병합해서 사용해야 할 것입니다.

앞서 다룬 영화 정보를 다시 살펴보도록 합니다. 영화-배우로 이루어지고 등장하면 1, 아니면 0인 아이템 프로파일과 1과 blank가 주어져 있는 선호도 행렬이 주어졌을 경우 가중치를 씁니다. 만약 사용자가 본 영화 전체에서 줄리아 로버츠가 등장한 영화가 20%라고 선호도 행렬에서 파악할 수 있다면, 해당 사용자 프로파일 중 사용자-줄리아 로버츠 항목에 1대신 0.2를 쓰면 됩니다. 가중치를 주는 것입니다.

1~5점의 평점이 주어진 선호도 행렬이 있다면, 정규화를 해야합니다. 선호도 행렬에서 특정 사용자가 준 영화 평점 평균을 구한 뒤, 줄리아 로버츠가 등장하는 영화들에 대한 평점에서 뺍니다. 만약 특정 사용자의 전체 평점의 평균이 3점이고, 줄리아 로버츠가 등장한 영화 A, B, C에 대해 점수를 각각 2, 3, 5점을 주었다고 할 때, 각 점수는 2-4=-2, 3-4=-1, 5-4=1가 되고, 이는 사용자 프로파일에서 사용자-줄리아 로버츠 항목에 이 점수들의 평균인 -2/3을 쓰면 됩니다.

요약

아이템 프로파일의 준비: 아이템별 특성-값 쌍으로 이루어진 벡터로 공급자가 작성한 메타 정보를 이용하거나(ex. 출연배우) 분석하여 특성-값을 발견한다(TF-IDF 계산 등). 필요하다면 스케일링 팩터 등을 활용해 각 특성별 영향력을 조절한다.

사용자 프로파일의 준비: 사용자별 특성-값 쌍으로 이루어진 벡터로 선호도 행렬이 있을 때 1과 blank로 주어진 클릭 또는 좋아요 데이터가 있을 때는 전체 좋아요 중 특정 특성의 비중을 계산한다. 평점으로 주어진 데이터가 있을 때에는 평균을 구한 뒤 특정 특성의 값들을 정규화한 뒤 평균을 내 사용자 프로파일의 값으로 활용한다.

콘텐츠 추천하기

앞에서 한 것처럼, 아이템 프로파일과 사용자 프로파일의 내적을 활용해 코사인 값을 구해봅니다. 코사인 거리가 짧을수록 더 높은 추천도를 가질 수 있겠지요. 하지만 여러가지 상황이 있을 수 있습니다. 이와 같이 배우 정보만 있는 경우라면 아주 많은 배우가 등장하는 경우 추천되기 쉬운 건 어쩔 수 없을 것입니다.

정규화 등의 영향으로 좋아하지 않는 배우에 대한 -값이 물론 나올 수 있습니다. 만약 수 많은 배우가 나오는 영화 중 사용자가 좋아하는 배우와 좋아하지 않는 배우가 섞여 있을 때에는 코사인 값이 0에 가깝고 아마 두 벡터의 각은 90도를 이룰 것입니다. 아마 출연 배우 대부분을 사용자가 좋아하지 않는다면, 코사인 값은 아주 큰 -값이 나올 것이고, 두 벡터의 각은 180도에 가까울 것이라 예측할 수 있습니다.

머신러닝을 이용한 콘텐츠 추천

머신러닝을 이용해 사용자별 분류(classification) 문제로 추천 시스템에 접근할 수도 있습니다. 여러가지 알고리즘이 있을 수 있습니다. 하지만 사용자마다 트레이닝과 테스트를 반복해야하니 큰 문제에는 적합하지 않다는 의견도 있습니다.