추천시스템 - Content-based Filtering

SJ Kim·2025년 1월 5일

Recommender System

목록 보기
2/3

추천 시스템 알고리즘은 우리가 평소에 넷플릭스를 고르는 방식과 크게 다르지 않습니다. 예전에 봤던 작품을 다시 보는 것이 아니라면, 넷플릭스의 작품 리스트를 훑어보며 보고싶은 작품을 고르게 됩니다. 문제는 제가 이렇게 고른 작품을 제가 좋아할 지 모르겠다는 것이죠. 저의 소중한 시간을 들여 그저그런 컨텐츠를 보는 일이 없도록 여러 측면을 고심하여 컨텐츠를 선정합니다. 이때 고민하는 과정을 알고리즘화 한 것이 추천 시스템 알고리즘입니다. 그렇기 때문에 추천 시스템은 우리의 사고 흐름과 유사하여 이해가 쉽습니다.

가장 기본적인 추천 시스템은 크게 두가지로 분류가 가능합니다.

  • Content-based recommendation
  • Collaborative recommendation

물론 이 외에도 이 두 방식을 합친 Hybrid recommendation도 있고, rating이 아니라 선호 순서를 예측하는 알고리즘도 존재하지만, content-based와 collaborative가 가장 기반이 되는 개념이므로 이 두가지에 대해 먼저 알아보려고 합니다.

이번 글은 그 중에서도 Content-based recommendation에 대해 다루어 보겠습니다.

Content-based filtering 알고리즘

Content-based filtering에 기반이 되는 가정은 아래와 같습니다.

내가 전에 좋아했던 작품과 비슷한 작품을 추천받고 싶다

그래서 content-based filtering에서는 작품들 간 유사성을 구하는 것을 목표로 합니다. 예를 들어서, 제가 좋아하는 작품들과 장르, 출연 배우, 감독, 주제, 배경이 비슷한 작품을 추천해주는 것입니다. 예를 들어 제가 앤 해서웨이가 출연한 "인턴"이라는 영화와 "악마는 프라다를 입는다" 라는 영화에 평점을 높게 주었다면, 앤 해서웨이가 출연한 다른 영화를 추천해주는 방식입니다. 제가 로맨스 코미디 영화들을 즐겨보았다면, 최신 상영작 중 로맨스 코미디 영화를 추천해줄 수도 있습니다. 앤 해서웨이가 나오는 로맨스 코미디면 더 좋겠죠.

Vectorization

사람들이 납득하기 좋은 추천 방식임에도 content-based filtering을 적용하기에는 많은 어려움이 있습니다.

우선 작품 간 유사도를 구해야 하기 때문에 정확한 유사도를 구하기 위해서는 작품에 대한 여러 특성들이 정의되어야 합니다. 따라서 모든 작품에 대한 상세한 특성들을 가지고 있어야 한다는 점이 어려운 점 중에 하나입니다.

작품의 특성이 정의되어 있다면 유사도를 계산해야 하는데요, 여러 요소를 한번에 고려한 유사도를 구하기 위해 각 작품을 벡터화 하고, 벡터 간 유사도를 계산해야 합니다. 벡터화를 하는 과정에서 one-hot encoding이 사용되기 때문에 사실 많은 정보를 잃게 되는데요, 이유는 장르 간 거리가 장르에 관계없이 모두 동일하게 세팅되고, 배우 들도 모두 거리가 동일하게 세팅되기 때문입니다.

content-based filtering을 사용하는 이유 중 하나가 영화나 책에 대한 줄거리가 비슷한 컨텐츠를 추천하기 위해서입니다. 그러나 줄거리는 장르와 다르게 벡터화 하기가 어렵습니다. one-hot encoding이 어렵기 때문에 줄거리에서 키워드가 얼마나 자주 등장했는가를 기준으로 벡터화하는 방식인 tf-idf를 사용합니다. 따라서 컨텐츠의 줄거리에서 키워드와 중요성을 기반으로 벡터화할 수 있습니다.

유사도 알고리즘

컨텐츠들을 벡터화 했다면, 벡터간 거리를 구하는 식을 통해 컨텐츠 간 유사도를 구할 수 있습니다. 예를 들어 다음 수식 중 하나를 사용할 수 있습니다.

  • Cosine similarity
  • Euclidean distance
  • Manhattan distance

유사도를 구했다면, 유사도가 높은 컨텐츠 순서로 사용자에게 추천을 하는 방식이 content-based filtering 입니다.

다음 글은 collaborative filtering에 대해 소개하겠습니다.


위 글은 아래 논문을 참고했습니다.
Adomavicius, Gediminas, and Alexander Tuzhilin. "Toward the next generation of recommender systems: A survey of the state-of-the-art and possible extensions." IEEE transactions on knowledge and data engineering 17.6 (2005): 734-749.

profile
공부한 내용을 잊지 않기 위해 기록을 남깁니다

0개의 댓글