LTR (Learning to Rank)

원본 보기

LTR (Learning to Rank)

참고

이 기능은 8.12.0 버전에서 도입되었으며 일부 구독 등급에서만 사용할 수 있습니다. 자세한 내용은 Elastic 자체 관리형 구독을 참조하세요.

Learning To Rank(LTR)은 학습된 머신러닝(ML) 모델을 사용해 검색 엔진의 랭킹 함수를 구성합니다. 일반적으로 이 모델은 2단계 리랭커로 사용되어, 더 단순한 1단계 검색 알고리즘이 반환한 검색 결과의 관련성을 개선합니다. LTR 함수는 문서 목록과 검색 컨텍스트를 입력받아 순위가 매겨진 문서를 출력합니다:

Learning To Rank overview

정렬할 문서 목록 외에 LTR 함수는 검색 컨텍스트도 필요로 합니다. 일반적으로 이 검색 컨텍스트에는 최소한 사용자가 입력한 검색어(위 예시의 text_query)가 포함됩니다. 검색 컨텍스트는 랭킹 모드에서 사용되는 추가 정보도 제공할 수 있습니다. 검색을 수행하는 사용자에 대한 정보(인구통계 데이터, 위치 정보, 연령 등), 쿼리에 대한 정보(쿼리 길이 등), 또는 쿼리 맥락에서의 문서 정보(title 필드의 점수 등)가 여기에 해당합니다.

LTR 모델은 보통 관련성 등급이 매겨진 쿼리와 문서의 집합인 판정 목록(judgment list)으로 학습됩니다. 판정 목록은 사람이 만들 수도 있고 기계가 생성할 수도 있습니다. 흔히 행동 분석 데이터로 채우며, 사람이 검수하는 경우가 많습니다. 판정 목록은 특정 검색 쿼리에 대한 이상적인 결과 순서를 결정합니다. LTR의 목표는 새로운 쿼리와 문서에 대해 모델이 판정 목록의 순위에 최대한 가깝게 맞춰지도록 하는 것입니다.

판정 목록은 모델 학습에 사용되는 주요 입력입니다. 쿼리와 문서 쌍, 그리고 그에 대응하는 관련성 레이블을 담은 데이터셋으로 구성됩니다. 관련성 판정은 보통 이진값(관련 있음/없음)이거나, 0(전혀 관련 없음)에서 4(매우 관련 있음) 사이의 등급처럼 더 세분화된 레이블입니다. 아래 예시는 등급형 관련성 판정을 사용합니다.

Judgment list example

판정 목록은 사람이 직접 만들 수도 있지만, 클릭이나 전환 같은 사용자 참여 데이터를 활용해 자동으로 구성하는 기법도 있습니다.

판정 목록의 양과 질은 LTR 모델의 전체 성능에 큰 영향을 미칩니다. 판정 목록을 만들 때는 다음 사항을 매우 신중하게 고려해야 합니다:

  • 대부분의 검색 엔진은 여러 쿼리 유형으로 검색할 수 있습니다. 예를 들어 영화 검색 엔진에서 사용자는 제목으로도 검색하지만 배우나 감독으로도 검색합니다. 판정 목록에서 각 쿼리 유형의 예시 수를 균형 있게 유지하는 것이 필수적입니다. 이렇게 하면 과적합을 방지하고 모델이 모든 쿼리 유형에 걸쳐 효과적으로 일반화할 수 있습니다.
  • 사용자는 부정적 예시보다 긍정적 예시를 더 많이 제공하는 경향이 있습니다. 긍정 예시와 부정 예시의 수를 균형 있게 맞추면 모델이 관련 있는 콘텐츠와 관련 없는 콘텐츠를 더 정확하게 구분하도록 학습하는 데 도움이 됩니다.

쿼리와 문서 쌍만으로는 LTR에 사용되는 ML 모델을 학습시키기에 충분한 정보가 되지 않습니다. 판정 목록의 관련성 점수는 여러 속성 또는 피처(feature)에 따라 달라집니다. 다양한 구성 요소가 어떻게 결합되어 문서 관련성을 결정하는지 파악하려면 이러한 피처를 추출해야 합니다. 판정 목록에 추출된 피처를 더한 것이 LTR 모델의 학습 데이터셋이 됩니다.

이러한 피처는 크게 세 가지 범주 중 하나에 속합니다:

  • 문서 피처: 문서 속성에서 직접 도출되는 피처입니다. 예시: 이커머스 스토어의 상품 가격.
  • 쿼리 피처: 사용자가 제출한 쿼리에서 직접 계산되는 피처입니다. 예시: 쿼리의 단어 수.
  • 쿼리-문서 피처: 쿼리 맥락에서의 문서 정보를 제공하는 데 사용되는 피처입니다. 예시: title 필드의 BM25 점수.

학습용 데이터셋을 준비하려면 판정 목록에 피처를 추가합니다:

Judgment list with features

Elasticsearch에서 이를 수행하려면 템플릿 쿼리를 사용해 학습 데이터셋을 만들 때와 쿼리 시점의 추론 과정에서 피처를 추출합니다. 다음은 템플릿 쿼리의 예시입니다:

[
  {
    "query_extractor": {
      "feature_name": "title_bm25",
      "query": { "match": { "title": "{{query}}" } }
    }
  }
]
		

LTR의 핵심은 당연히 ML 모델입니다. 모델은 위에서 설명한 학습 데이터와 목표(objective)를 결합해 학습됩니다. LTR의 경우 목표는 nDCGMAP 같은 랭킹 지표를 기준으로 판정 목록에 대해 결과 문서를 최적의 방식으로 정렬하는 것입니다. 모델은 오직 학습 데이터의 피처와 관련성 레이블에만 의존합니다.

LTR 분야는 빠르게 발전하고 있으며 다양한 접근 방식과 모델 유형이 실험되고 있습니다. 실무에서 Elasticsearch는 LTR 추론에 그래디언트 부스팅 결정 트리(GBDT) 모델을 특정해 사용합니다.

Elasticsearch는 모델 추론을 지원하지만 학습 과정 자체는 GBDT 모델을 사용해 Elasticsearch 외부에서 이루어져야 합니다. 오늘날 널리 쓰이는 LTR 모델 중 LambdaMART는 낮은 추론 지연 시간으로 강력한 랭킹 성능을 제공합니다. 이 모델은 GBDT 모델에 기반하므로 Elasticsearch의 LTR에 아주 적합합니다.

XGBoost는 LambdaMART 구현체를 제공하는 잘 알려진 라이브러리로, LTR에 널리 선택됩니다. Elastic은 학습된 XGBRanker 모델을 Elasticsearch의 LTR 모델로 통합하기 쉽도록 eland에 헬퍼를 제공합니다.

학습에 대한 자세한 내용은 LTR 모델 학습 및 배포에서 확인하거나, elasticsearch-labs 저장소에 있는 대화형 LTR 노트북을 살펴보세요.

이 가이드의 다음 페이지에서는 다음 내용을 배웁니다: