재순위화
재순위화 (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: 이미 객체에 있는 단순 신호로 결과를 치우치게 하고 싶을 때.