Retrieval Task에 특화된 메트릭

HanJu Han·2025년 2월 25일
0

추천 시스템

목록 보기
47/49

tfrs.metrics.FactorizedTopK란 무엇인가?

FactorizedTopK는 TFRS 라이브러리에서 추천 시스템의 검색(retrieval) 작업을 평가하기 위해 설계된 메트릭입니다. 추천 시스템에서는 사용자가 좋아하는 아이템(예: 영화, 상품 등)을 대규모 카탈로그에서 찾아 상위 K개의 추천 목록으로 제시하는 것이 중요합니다. 이 메트릭은 모델이 상위 K개의 추천 항목 중 얼마나 많은 항목이 실제로 사용자에게 적합한지 평가합니다.

주요 특징 (이미지 설명 기반)

이미지의 상단 설명 부분에는 FactorizedTopK 메트릭의 핵심 내용을 리스트로 정리해 놓았습니다. 하나씩 자세히 살펴보겠습니다:

  1. Retrieval Task에 특화된 메트릭

    • 추천 시스템에서 검색(retrieval) 작업은 사용자가 상호작용한 아이템(예: 좋아요, 클릭, 구매 등)과 같은 긍정적 사례(positive examples)만 다룹니다.
    • 예를 들어, 사용자가 "영화 A"를 시청했다면 이는 긍정적 사례이지만, 사용자가 "영화 B"를 싫어한다는 명시적인 부정적 사례(negative examples)는 일반적으로 없습니다.
    • 이로 인해 분류 문제에서 사용하는 일반적인 정확도(accuracy, 예: 맞춘 개수/전체 개수)는 계산할 수 없습니다. 대신, 상위 K개의 추천이 얼마나 잘 맞는지 평가하는 방식이 필요합니다.
  2. Retrieval Task는 Positive밖에 넣지 않음

    • 위 내용을 다시 강조한 부분으로, 검색 작업에서는 긍정적 사례만 사용되므로 전통적인 정확도 계산이 불가능하다는 점을 분명히 합니다.
    • 이는 추천 시스템에서 흔히 발생하는 암묵적 피드백(implicit feedback) 상황을 반영합니다. 예를 들어, 사용자가 어떤 영화를 봤는지 알 수 있지만, 보지 않은 영화가 싫어서인지 관심 없어서인지 알 수 없습니다.
  3. Candidates를 정의 가능

    • 이 메트릭에서는 추천 대상이 될 수 있는 후보 항목(candidates)을 정의할 수 있습니다.
    • 후보는 전체 카탈로그에서 추천할 수 있는 모든 아이템을 의미하며, 코드에서 이를 모델을 통해 처리된 데이터로 설정합니다(이에 대해서는 코드 부분에서 더 설명하겠습니다).
  4. Accuracy @ K를 계산

    • FactorizedTopK는 상위 K개의 추천 항목 중 얼마나 많은 항목이 사용자에게 적합한지(즉, 테스트 데이터에서 실제로 사용자가 상호작용한 항목인지)를 측정합니다.
    • 이를 Accuracy @ K라고 부르며, 추천 시스템에서 자주 사용되는 지표입니다. 이는 상위 K개의 순위에 포함된 관련 항목의 비율을 나타냅니다.
  5. ScANN (ANN 라이브러리)를 이용한 Evaluation도 가능

    • 대규모 데이터셋의 경우, 모든 후보 항목에 대해 정확한 상위 K 계산을 하는 것은 시간이 오래 걸릴 수 있습니다.
    • 이를 해결하기 위해 ScANN(Scalable Approximate Nearest Neighbors)라는 근사 최근접 이웃(Approximate Nearest Neighbors, ANN) 라이브러리를 사용해 효율적으로 평가할 수 있습니다. 이는 정확도를 약간 희생하면서도 계산 속도를 크게 향상시킵니다.

코드 예제 분석

이미지에는 아래와 같은 Python 코드가 포함되어 있습니다:

metrics = tfrs.metrics.FactorizedTopK(
    candidates=movies.batch(128).map(movie_model1)
)

이 코드를 단계별로 풀어서 설명하겠습니다:

  • tfrs.metrics.FactorizedTopK:

    • TFRS 라이브러리의 메트릭 클래스입니다. 이 클래스는 상위 K개 추천의 품질을 평가하는 데 사용됩니다.
  • candidates=movies.batch(128).map(movie_model1):

    • movies: 영화 데이터셋으로, 추천 시스템에서 추천할 수 있는 모든 영화 항목을 나타냅니다.
    • .batch(128): 데이터를 128개씩 묶어서 처리합니다. 이는 메모리 효율성을 높이고 대규모 데이터를 다룰 때 유용합니다.
    • .map(movie_model1): movie_model1이라는 모델을 각 영화에 적용합니다. 이 모델은 일반적으로 영화의 특징을 추출하거나 임베딩(embedding, 저차원 벡터 표현)을 생성하는 역할을 합니다.
    • 결과적으로, candidates는 모델로 처리된 영화 데이터의 임베딩 집합이 됩니다. 이 임베딩은 추천 시스템에서 각 영화의 유사성을 비교하거나 순위를 매길 때 사용됩니다.
  • 코드의 의미:

    • 이 코드는 FactorizedTopK 메트릭을 초기화하며, 추천 후보로 사용할 영화 데이터(movies)를 movie_model1을 통해 변환한 결과를 지정합니다. 이후 이 메트릭은 모델이 예측한 상위 K개의 추천과 실제 사용자 데이터(테스트셋)를 비교해 성능을 평가합니다.

예제를 통한 이해

이 메트릭이 실제로 어떻게 작동하는지 간단한 예제를 통해 알아보겠습니다.

상황 설정

  • 사용자가 테스트셋에서 "영화 A"와 "영화 B"를 시청했다고 가정합니다.
  • 추천 시스템이 전체 100개의 영화 중에서 상위 5개(K=5)를 추천했다고 해봅시다. 추천 결과는 다음과 같습니다:
    ["영화 C", "영화 A", "영화 D", "영화 E", "영화 B"]

평가 과정

  1. K=5일 때:

    • 상위 5개 추천 중 실제로 사용자가 시청한 영화는 "영화 A"와 "영화 B"입니다.
    • 관련 항목 수: 2개 ("영화 A", "영화 B")
    • 총 추천 수: 5개
    • Accuracy @ 5 = 관련 항목 수 / K = 2 / 5 = 40%
  2. K=3일 때:

    • 상위 3개 추천은 ["영화 C", "영화 A", "영화 D"]입니다.
    • 관련 항목은 "영화 A" 하나뿐입니다.
    • Accuracy @ 3 = 1 / 3 ≈ 33.3%

현실적인 해석

  • 추천 시스템에서 "관련 항목"은 테스트셋에서 사용자가 실제로 상호작용한 아이템을 의미합니다.
  • FactorizedTopK는 모델이 예측한 상위 K개 추천 목록과 테스트셋의 긍정적 사례를 비교해 얼마나 잘 맞는지 계산합니다.
  • 실제 구현에서는 모델이 영화 임베딩 간 유사성을 기반으로 순위를 매기고, 이를 메트릭이 평가합니다.

ScANN의 역할

대규모 데이터셋(예: 수백만 개 영화)에서 모든 후보 항목에 대해 정확한 상위 K를 계산하면 시간이 오래 걸릴 수 있습니다. 이때 ScANN을 사용하면:

  • 영화 임베딩 간 유사성을 근사적으로 계산해 상위 K를 빠르게 찾습니다.
  • 예를 들어, 100만 개 영화 중 상위 10개를 찾는 데 몇 초만 걸리도록 최적화됩니다.
  • 정확도가 약간 낮아질 수 있지만, 추천 시스템에서는 속도가 더 중요한 경우가 많아 유용합니다.

전체적인 의미

  • 추천 시스템에서의 검색과 순위:

    • 추천 시스템은 보통 두 단계로 나뉩니다:
      1. 검색(Retrieval): 대규모 카탈로그에서 후보 항목을 빠르게 선별합니다.
      2. 순위(Ranking): 선별된 후보를 정밀하게 순위 매깁니다.
    • FactorizedTopK는 검색 단계의 성능을 평가하는 데 특화되어 있습니다. 즉, 후보 집합에 사용자가 좋아할 만한 아이템이 얼마나 포함되었는지를 측정합니다.
  • 왜 중요할까?

    • 암묵적 피드백(예: 클릭, 시청 기록)만 있는 상황에서는 전통적인 정확도 대신 순위 기반 메트릭이 필요합니다.
    • FactorizedTopK는 이를 효율적으로 계산하며, TFRS에서 추천 모델의 성능을 평가하는 데 핵심적인 도구입니다.

결론

FactorizedTopK는 TFRS에서 추천 시스템의 검색 작업을 평가하기 위한 메트릭으로:

  • 긍정적 사례만 있는 상황에서 상위 K개 추천의 품질을 측정합니다.
  • 후보 항목(candidates)을 모델로 처리한 데이터를 기반으로 작동합니다.
  • 대규모 데이터셋에서는 ScANN을 활용해 빠르게 평가할 수 있습니다.

위 코드와 설명을 통해, 예를 들어 영화 추천 시스템에서 모델이 얼마나 잘 작동하는지 확인할 수 있습니다. 사용자는 이 메트릭을 사용해 모델을 튜닝하거나 성능을 비교하며 더 나은 추천을 제공할 수 있습니다.

profile
시리즈를 기반으로 작성하였습니다.

0개의 댓글