재랭킹

재랭킹 (Reranking)

검색 결과가 나왔는데 순위가 조금 아쉽다면? 그때 필요한 게 재랭킹이에요. 재랭킹은 검색이 반환한 결과 집합을 다른 모델로 재정렬해 검색 관련성을 높이는 기법이에요.

출처: 공식문서

재랭킹은 어떻게 동작하나요?

재랭킹은 쿼리와 각 데이터 객체 사이의 관련성 스코어를 계산하고, 가장 관련성 높은 순서부터 정렬된 객체 목록을 반환해요. 모든 (query, data_object) 쌍에 대해 이 스코어를 계산하는 것은 보통 매우 느려서, 재랭킹은 관련 객체를 먼저 검색한 뒤 2단계(second stage) 로 사용돼요.

재랭커는 검색 이후 더 작은 데이터 부분집합에서 동작하므로, 검색 관련성을 높이기 위해 더 계산 비용이 높은 다른 접근 방식을 사용할 수 있어요.

Weaviate의 reranker 모듈을 사용하면 Weaviate를 벗어나지 않고 다단계 검색(multi-stage search) 을 편리하게 수행할 수 있어요. 다시 말해, 예를 들어 벡터 검색을 수행한 뒤 reranker로 그 결과를 재랭킹할 수 있어요. reranker 모듈은 벡터, BM25, 하이브리드 검색 모두와 호환돼요.

GraphQL 쿼리에서 재랭킹은 이렇게 사용할 수 있어요.

{
  Get {
    JeopardyQuestion (
      nearText: { concepts: "flying" }
      limit: 10
    ) {
      answer
      question
      _additional {
        distance
        rerank(
          property: "answer"
          query: "floating"
        ) {
          score
        }
      }
    }
  }
}

이 쿼리는 JeopardyQuestion 클래스에서 "flying"이라는 쿼리로 하이브리드 검색을 수행해 10개의 결과를 가져와요. 그런 다음 answer 속성과 "floating" 쿼리로 결과를 재랭킹해요.

JeopardyQuestion 클래스의 어떤 property를 reranker에 넘길지 지정할 수 있어요. 여기서 반환되는 score에는 reranker의 스코어가 포함된다는 점을 기억하세요.

더 알아보기 (Learn more)