씨랭크

검색 랭킹 시그널의 비밀과 기계학습 알고리즘

검색 랭킹의 본질

사용자가 검색어를 입력하면, 검색엔진은 수억 개의 문서 중에서 가장 적합한 결과를 순서대로 보여줘야 합니다. 이 순서를 결정하는 것이 랭킹이고, 그 판단 기준이 되는 것이 랭킹 시그널입니다.

주요 검색엔진들은 150개에서 200개 이상의 시그널을 사용하는 것으로 알려져 있습니다. 이 중 약 50개 정도는 오랜 기간 변하지 않는 핵심 시그널이며, 나머지는 지속적으로 발굴되고 교체됩니다.

시그널을 비공개하는 이유

랭킹 시그널이 무엇인지 외부에서 알게 되면, 그 시그널은 즉시 무력화됩니다. 시그널의 존재가 알려지는 순간 이를 조작하려는 시도가 발생하고, 검색 품질이 훼손됩니다. 그래서 검색엔진 회사들은 구체적인 시그널 목록을 공개하지 않습니다.

새로운 시그널을 발굴하는 것이 검색엔진 개발자의 핵심 업무입니다. 발굴된 시그널이 조작되면 또 다른 시그널을 찾아야 하는 끝없는 과정이기도 합니다.

Learning-to-Rank: 기계학습 기반 랭킹

현대 검색엔진은 기계학습(Machine Learning)을 사용하여 랭킹 함수를 계산합니다. 이를 Learning-to-Rank(LTR)라고 합니다. 기본 원리는 다음과 같습니다:

Feature Vector의 구성

각 문서는 랭킹 시그널들로 구성된 Feature Vector(특성 벡터)로 표현됩니다. 예를 들어:

  • x1: 검색어가 제목에 포함된 비율
  • x2: 검색어가 본문에 포함된 비율
  • x3: 사이트 신뢰도 점수
  • x4: 체류 시간 데이터
  • … (150개 이상)

가중치 학습

이 시그널들에 각각 가중치(w1, w2, … wn)를 부여하고, 그 합산으로 최종 랭킹 점수를 산출합니다:

랭킹 점수 = x1×w1 + x2×w2 + … + xn×wn

최적의 가중치를 찾는 것이 기계학습의 역할입니다. 사람이 만든 평가 데이터셋을 기반으로, 이상적인 검색 결과 순서에 가장 가까운 가중치 조합을 반복 학습으로 발견합니다.

랭킹 성능 평가: DCG

랭킹의 품질을 수치로 평가하는 방법이 DCG(Discounted Cumulative Gain)입니다. 상위에 좋은 문서가 올수록 높은 점수를 받고, 하위에 좋은 문서가 있으면 점수가 할인(discount)되어 반영됩니다.

이상적인 순서(5, 4, 3, 2, 1)와 실제 순서(5, 4, 3, 1, 2)를 비교하면, 후자의 NDCG 점수는 약 0.996으로 거의 이상적인 수준입니다. 하지만 순서가 크게 어긋나면 점수는 급격히 하락합니다.

시그널의 실전 예시

구체적인 시그널의 예를 살펴보면:

  • 키워드 매칭: 검색어의 단어가 문서에 몇 개나 포함되는지. 3개 단어 검색어에서 1개 매칭, 2개 매칭, 3개 매칭에 따라 점수가 달라집니다. 일반적으로 매칭 비율이 높을수록 점수가 올라갑니다.
  • 제목 매칭: 제목에 키워드가 포함되면 보완적 시그널로 활용됩니다. 다만 과도하게 키워드를 넣으면 오히려 점수가 하락합니다.
  • 체류 시간: 사용자가 해당 URL에서 머무른 시간이 길면 좋은 문서일 가능성이 높지만, 이 시그널 역시 조작이 가능하기 때문에 단독으로는 사용되지 않습니다.

A/B 테스트와 시그널 검증

새로운 시그널이 개발되면 A/B 온라인 테스트를 거칩니다. 일부 사용자에게 새 시그널이 적용된 결과를 보여주고, 사용자 반응(클릭률, 만족도, 불만 접수 등)을 분석하여 시그널의 유효성을 검증합니다.

검색 랭킹이 완벽하지 않은 것은 조작이 아니라 기술력의 한계입니다. 전 세계에서 사용자가 만족할 만한 검색 서비스를 제공하는 회사는 극소수에 불과하며, 이는 이 문제가 얼마나 어려운 컴퓨터 과학의 과제인지를 보여줍니다.