- 검색 엔진의 목표는 주어진 질의(Query)에 대해 관련된 문서들의 집합을 가장 적절한 순서(최상위부터 최하위까지)로 반환하는 것
- 이 순위를 결정하는 알고리즘들을 ‘랭킹 학습(Learning to Rank)’ 알고리즘이라고 합니다. 알고리즘들은 크게 비머신러닝 기반 표준 랭킹 방법과 머신러닝 기반 랭킹 학습 방법으로 나눌 수 있다.
1. 표준 랭킹 알고리즘 (Standard Ranking Algorithms)
머신러닝을 사용하지 않는 기존의 랭킹 방법들입니다.
- PostgreSQL 전문 검색 (Full-Text Search):
- 이 방법은 문서 내에서 질의의 용어들이 나타나는 위치를 살펴보고, 이를 바탕으로 문서의 순위를 매김
- 문서는 일반적으로 제목(title), 부제목(subtitle), 단락(paragraphs)과 같은 고정된 구조를 가지고 있다고 가정
- 사용자가 튜닝을 통해 질의의 단어가 부제목에 나타나는 것이 제목에 나타나는 것보다 더 중요하다고 설정할 수 있지만, 이는 질의별로 이루어져야 하며 사람의 개입이 필요하므로 복잡한 질의나 대규모 데이터베이스에는 적합하지 않음
- 페이지랭크 (PageRank):
- 많은 경우에 유용하며, 집단의 지혜(wisdom of crowds)를 사용하여 학습하고 개선하는 알고리즘
- 이 알고리즘은 URL이나 하이퍼링크가 거의 없는 페이지의 순위를 낮추는 경향이 있습니다.
2. 머신러닝 기반 랭킹 학습 알고리즘 (Learning to Rank Algorithms)
- 특정 질의에 대한 튜닝 없이도 일반적이고 견고한 알고리즘
- 모든 머신러닝 기술은 주어진 질의-문서 쌍에 대한 특징 벡터(Feature Vector)를 생성하는 것에서 시작
- 두 항목에 대한 정보를 담고 있는 값의 숫자 벡터를 추출
TF-IDF(Inversed Document Frequency)
- TF-IDF는 단어의 빈도와 역 문서 빈도를 사용하여 단어들마다 중요한 정도에 따라서 가중치를 부여하는 방법
- 모든 문서에서 등장하는 단어는 중요도가 낮으며, 특정 문서에서만 자주 등장하는 단어는 중요도가 높다.

랭킹 학습 알고리즘은 학습 방식에 따라 세 가지 주요 클래스로 나뉨
A. 포인트와이즈 랭킹 (Point-wise Ranking Algorithms)
이 방법은 각 문서를 개별적으로 처리하여 질의에 대한 문서의 관련성 점수(relevance score)를 예측
- 작동 방식
- 문서 하나하나를 가져와 해당 질의-문서 쌍의 특징 벡터를 사용하여 관련성 점수를 예측
- 이 과정이 모든 문서에 대해 반복된 후, 예측된 관련성 점수에 따라 문서를 순서대로 배열하여 랭킹
- 모델 예시
- 선형 회귀 (Linear Regression) 가 단순한 예시 이는 통계학 수업에서 배운 선형 회귀와 유사하게, 특징들을 더하고 곱하여 관련성 점수로 변환하는 모델(함수)을 학습합니다.
B. 페어와이즈 랭킹 (Pairwise Ranking Algorithms)
이 방법은 순서(order)가 중요하다는 사실을 활용하여, 문서 쌍(pair)을 입력으로 받아 둘 중 어느 것이 더 관련성이 높은지를 추정
- RankNet:
- 뉴럴 네트워크(신경망)를 사용하는 페어와이즈 랭킹 방법으로, 선형 회귀 모델보다 더 많은 파라미터를 가지므로 유연하지만 더 복잡
- 학습 중에는 더 관련성이 높은 문서에는 높은 예측 점수를, 덜 관련성이 높은 문서에는 낮은 점수를 주도록 학습
- 이 방법은 문서를 목록의 올바른 영역에 배치하는 데는 뛰어나지만 (예: 상위 1% 안에), 그 영역 내에서 순서를 잘 매기는 데는 약할 수 있습니다. 또한, 순위 목록의 어느 위치에 있는 쌍이든 동일한 양만큼 오류를 처리합니다.
- LambdaRank:
- RankNet과 동일한 작업을 수행하지만, **NDCG (Normalized Discounted Cumulative Gain)**에 비례하여 가중치 변화(문서를 밀어 올리거나 내리는 정도)의 크기를 조정
- NDCG는 상위 목록 근처의 부정확한 순서에 더 큰 벌칙을 부과하는 거리 측정 기준
- 따라서 LambdaRank는 목록 아래쪽에 있는 문서 쌍에 대해서는 더 작은 ‘밀기(push)‘를 가하여, 상위 순위에 대한 중요도를 더 높게 반영. 실제로는 RankNet보다 훨씬 더 나은 성능
C. 리스트와이즈 랭킹 (List-wise Ranking Algorithms)
이 방법은 전체 문서 목록을 한 번에 입력으로 받아 의사 결정을 내립니다.
- LambdaMART:
- 가장 선호되는 리스트와이즈 알고리즘 중 하나
- 문서의 점수와 순위를 매기기 위해 결정 트리(Decision Trees) 를 사용합니다.
- 결정 트리는 특정 특징(feature)을 기반으로 데이터를 분할하는 맵의 역할을 합니다.
- 실제로는 여러 개의 트리를 사용하는 앙상블(ensemble) 방식을 사용하며, 각 트리는 서로 다른 특징의 조합을 기반으로 분할합니다. 이러한 앙상블 조합은 모델을 훨씬 더 견고하게 만듭니다.
3. 알고리즘 구현 및 활용 (Implementation and Metrics)
이러한 알고리즘들은 종종 XG boost 모듈을 사용하여 구현될 수 있습니다.
| 알고리즘 클래스 | 예시 알고리즘 | XGBoost 목표 함수 (Objective Function) |
|---|---|---|
| 포인트와이즈 | 선형 회귀 (Linear Regression) | (별도 지정 가능) |
| 페어와이즈 | LambdaRank | rank:pairwise |
| 리스트와이즈 | LambdaMART | rank:ndcg |
NDCG(Normalized Discounted Cumulative Gain)
- 랭킹 학습에서 흔히 사용되는 거리 측정 기준(distance metric).
- 0은 목록 순서가 최악임을, 1은 완벽하게 순서가 지정되었음을 나타냅니다.
- NDCG는 문서의 순서(order)와 문서의 점수(score)를 모두 고려하며, 목록 상단 근처의 부정확한 순서에 대해 하단보다 더 큰 벌칙을 부과
- NDCG의 장점은 순위를 특정 지점(예: 상위 10개 항목)에서 잘라내어 해당 부분의 정렬만 평가할 수 있다는 점입니다.
이러한 랭킹 알고리즘의 발전은 마치 칵테일 제조법을 개선하는 과정과 유사합니다.
- 포인트와이즈는 각 재료(문서)가 얼마나 맛있는지 개별적으로 평가하여(점수 매기기) 맛있는 재료 순으로 나열합니다.
- 페어와이즈는 두 재료를 섞어보고 더 나은 맛을 내는 쌍을 찾습니다. 특히 LambdaRank는 고객이 첫 모금(상위 랭킹)의 맛을 가장 중요하게 생각한다는 점을 알고, 첫 모금의 품질을 개선하는 데 더 많은 노력을 기울입니다.
- **리스트와이즈 (LambdaMART)**는 모든 재료를 한 번에 넣고 섞은 칵테일 전체를 맛본 후, 전체적인 조화(랭킹 목록)를 최적화하기 위해 재료의 비율(특징 기반 분할)을 조정하는 방식이라고 이해할 수 있습니다.