재순위화

재순위화 (Reranking)

검색이 반환한 결과 순서가 항상 원하는 대로는 아니에요. 재순위화(리랭킹) 모듈은 다른 기준이나 더 정교한(더 값비싼) 알고리즘으로 결과 집합의 순서를 다시 매깁니다. 예를 들어 벡터 유사도로 뽑은 뒤 크로스-인코더 같은 모델로 관련성을 다시 평가하는 식이죠.

재순위화를 쓰려면 컬렉션에 리랭커 모델 통합을 활성화해야 해요. 하나의 컬렉션에 리랭커가 여러 개일 수 있는데, 여러 개가 활성화돼 있으면 스키마의 moduleConfig 섹션에서 사용할 모듈을 지정합니다.

출처: 공식문서

Named vectors

named vectors가 설정된 컬렉션의 모든 벡터 기반 검색은 쿼리에 target 벡터 이름을 포함해야 해요. 그래야 Weaviate가 쿼리 벡터와 비교할 올바른 벡터를 찾을 수 있습니다.

벡터 검색 결과 재순위화

벡터 검색 결과를 재순위화하려면 정렬할 객체 프로퍼티를 구성합니다. 아래는 near_text 결과를 question 프로퍼티를 대상으로 "publication"이라는 쿼리로 재순위화하는 예시입니다.

from weaviate.classes.query import Rerank, MetadataQuery

jeopardy = client.collections.use("JeopardyQuestion")
response = jeopardy.query.near_text(
    query="flying",
    limit=10,
    rerank=Rerank(
        prop="question",
        query="publication"
    ),
    return_metadata=MetadataQuery(score=True)
)
for o in response.objects:
    print(o.properties)
    print(o.metadata.score)

키워드 검색 결과 재순위화

키워드(BM25) 검색 결과도 동일하게 재순위화할 수 있어요.

from weaviate.classes.query import Rerank, MetadataQuery

response = jeopardy.query.bm25(
    query="paper",
    limit=10,
    rerank=Rerank(
        prop="question",
        query="publication"
    ),
    return_metadata=MetadataQuery(score=True)
)
for o in response.objects:
    print(o.properties)
    print(o.metadata.rerank_score)

Boost와의 관계

외부 리랭크 모델을 호출하지 않고 필터·프로퍼티 값·시간/숫자 감쇠 기반의 가벼운 재정렬을 원한다면 Boost를 사용하세요. Rerank와 Boost는 독립적으로 쓸 수 있어요.

  • Rerank: 더 똑똑한 모델로 top-N을 다시 순위화해야 할 때.
  • Boost: 이미 객체에 있는 단순 신호로 결과를 치우치게 하고 싶을 때.

더 알아보기 (Learn more)