오늘의 인기 글
최근 글
최근 댓글
Today
Total
05-09 00:00
관리 메뉴

우노

[추천시스템] 유사도(Similarity) 구하는 방법 본문

Data/Recommender System

[추천시스템] 유사도(Similarity) 구하는 방법

운호(Noah) 2020. 10. 12. 16:55

유사도 (Similarity)

  • 드라마를 예시로 들었을 때, 두 드라마의 유사도를 어떻게 측정할 수 있을까?
    • 장르나 키워드가 비슷하면 비슷하다. ( 자카드 유사도 )
      • 보이스 (범죄, 스릴러, 다크, 서스펜스)
      • 터널 (스릴러, 다크, 서스펜스)
    • 사람들의 평가가 비슷하면 비슷하다. ( 평가 유사도 )
      • 사람 1의 영화1 평가 (0.5점)
      • 사람 2의 영화2 평가 (0.6점)

자카드 유사도 (Jaccard Similarity)

  • 자카드 유사도

    • 키워드를 통해 두 집합이 얼마나 비슷한지를 측정

      • 분자
        • 두 집합의 교집합을 뽑는다.
      • 분모
        • 두 집합의 합집합을 뽑는다.
        • 집합의 사이즈가 커지면 커질수록 패널티를 먹는다.
    • 예제

      • 보이스 (범죄, 스릴러, 다크, 서스펜스)
      • 터널 (스릴러, 다크, 서스펜스)
      • 교집합 / 합집합 = 3/4
  • 하지만 장르나 키워드가 명시적으로 주어져 있지 않다면?

    • 우리가 줄거리나 설명글 등에서 키워드를 뽑아내야한다.

    • 중요한 단어만을 뽑아내야 하는데 어떤 단어가 중요한 단어일까?

    • 이 때 사용하는 알고리즘이 TF-IDF 이다.

    • TF-IDF

      • fij= 문서 i에서 단어 i가 등장한 빈도수

      • ni = 단어 i가 등장한 문서 수

      • N = 전체 문서 수

      • TF (Term-Frequency)

        • 어떤 단어가 한 개의 Document에서 몇 번 등장하는지
        • 한 개의 Document에서 해당 단어 등장 횟수 / 한 개의 Document에 가장 많이 등장한 단어 개수
      • IDF (Inverse Document Frequency)

        • ni / N 은 숫자가 높을수록 여러 개의 문서에서 단어가 등장한 것
        • 여러 문서에 단어가 등장 할수록 중요한 단어가 아니기 때문에 ni / N 을 역수로 사용한다.
        • 역수를 사용하면 단어가 등장한 문서 개수가 작아질수록 값이 커지게 된다.
        • 따라서 N / ni 값이 클수록 중요한 단어이다.
      • 따라서, 각 줄거리마다 TF-IDF Score가 가장 높은 단어 몇 개를 키워드로 뽑아 자카드 유사도를 구하면 된다.

평가 유사도

  • 키워드를 뽑지 않고 사람들이 매긴 평점 데이터만으로도 어느 정도의 유사도를 측정할 수 있다.

  • 아래 그림은 A,B,C,D,E,F의 각 드라마 별 평점을 Vector로 표현한 것이다.

    • 과연 보이스, SKY 캐슬 중 터널과 더 비슷한 드라마는 무엇이며

    • 유사도를 어떻게 측정하면 될까?

  • 이 때 사용하는 방법이 코사인 유사도이다.

  • 코사인 유사도 (Cosine Similarity)

    • 드라마에 대한 각 평점을 Vector로 봤을 때, 각 Vector가 비슷한 방향을 가지고 있다면 유사하다고 볼 수 있다.

      • 즉, 두 Vector가 이루는 각도가 작을수록 유사하기 때문에 코사인 유사도를 사용한다.
    • 각 드라마의 평점 Vector를 생성할 때, 평가가 안 된 빈칸들을 0으로 할당한 뒤 코사인 유사도를 구해보자.

      • 실제론 a,b가 a,c보다 유사하다.
      • 하지만 결과값은 a,c의 유사도가 a,b의 유사도 보다 높다. 왜 그럴까?
        • 바로 사용자가 평가하지 않은 경우에 0점을 부여했기 때문이다.
        • 점수가 0점이라는 것은 사용자가 보긴 했지만 최악의 점수를 준 것으로 계산된다.
        • 따라서 0 대신 평균 점수를 부여해야한다.
        • 이를 Centered Cosine Similarity 라고 한다.
  • Centered Cosine Similarity

    • 각 드라마의 평점 Vector를 생성할 때, 평가가 안 된 빈칸들을 평균점수로 할당한 뒤 코사인 유사도를 구해보자.

      • 이제 a,b가 a,c 보다 값이 크긴 하다. 하지만 왜 a,c와 b,c가 양수일까?
        • 모든 평점이 긍정적이기 때문이다.
        • 따라서, 모든 평점을 평균 점수만큼 빼준다.
    • 이제, 평가가 안 된 빈칸들을 평균점수로 할당한 뒤

    • 모든 평점을 평균 점수만큼 빼주자.

      • a,b의 유사도는 양수 a,c의 유사도는 음수를 나타나게 된다.

추천하기

  • 이제 내가 가장 재밌게 본 드라마 a유사도가 가장 높은 드라마 n개를 추천해야한다.

  • 위에서 자카드 유사도(J(a,x))와 평가 유사도(U(a,x))를 구했으므로 이 두 가지를 섞어 유사도를 계산한다.

    • 단순한 방법은 두 가지의 유사도에 원하는 가중치를 설정해 값을 도출하는 방법이다.

Comments