Qdrant 검색 관련성
Qdrant 검색 관련성 (Search Relevance)
기본적으로 Qdrant는 벡터 유사도 점수로 검색 결과를 정렬해요. 하지만 결과를 랭킹할 때 벡터 유사도 외의 추가 요소를 고려하고 싶을 수 있어요. Qdrant는 이를 위한 여러 도구를 제공하며, 이 페이지는 점수 부스팅·MMR·관련성 피드백을 정리해요.
본문
점수 부스팅 (Score Boosting, v1.14.0+)
특정 애플리케이션에 벡터 검색을 도입할 때, 최종 결과 목록을 랭킹하는 데 비즈니스 로직을 고려해야 하는 경우가 있어요. 대표적인 예가 Qdrant 자체 문서 검색 바예요.
문서 사이트의 모든 부분에 벡터가 있어서, 벡터만으로 검색하면 모든 요소가 동등하게 좋은 결과로 간주돼요. 이때 점수 부스팅으로 특정 항목의 가중치를 높여 랭킹에 비즈니스 우선순위를 반영할 수 있어요.
POST /collections/{collection_name}/points/query
{
"prefetch": {
"query": [0.2, 0.8, ...], // <-- dense vector
"limit": 50
}
"query": {
"formula": {
"sum": [
"$score",
{
"mult": [
"metadata.popularity",
0.1
]
}
]
}
}
}
점수 부스팅에서는 감쇠 함수(decay functions)를 함께 사용할 수 있어요.
최대 한계 관련성 (MMR, Maximal Marginal Relevance)
$$\text{MMR} = \arg \max_{D_i \in R\setminus S}[\lambda sim(D_i, Q) - (1 - \lambda)\max_{D_j \in S}sim(D_i, D_j)]$$
여기서 $R$은 후보 집합, $S$는 선택된 집합, $Q$는 쿼리 벡터, $sim$은 유사도 함수, $\lambda = 1 - diversity$예요.
MMR은 Qdrant에서 최근접 이웃 쿼리의 파라미터로 구현돼요. 가장 가까운 후보를 얻을 벡터와, 관련성(0.0)과 다양성(1.0)의 균형을 제어하는 diversity 파라미터를 정의해요.
POST /collections/{collection_name}/points/query
{
"query": {
"nearest": [0.01, 0.45, 0.67, ...], // search vector
"mmr": {
"diversity": 0.5, // 0.0 - relevance; 1.0 - diversity
"candidates_limit": 100 // num of candidates to preselect
}
},
"limit": 10
}
주의: MMR은 한 번에 한 포인트씩 랭킹하므로, Qdrant에서 MMR이 만드는 점수는 쿼리 벡터에 대한 유사도를 가리켜요. 즉 응답은 점수 순서가 아니라 MMR 선택 순서대로 정렬돼요.
관련성 피드백 (Relevance Feedback, v1.17+)
관련성 피드백은 현재 검색 결과의 신호를 다음 검색 반복으로 증류해서 더 관련성 있는 문서를 노출해요. Qdrant는 관련성 피드백 기반 검색의 하위 유형을 제공하는데, 피드백은 모든 모델(관련성 oracle)이 세밀하게 제공해요. 즉 상위 검색 결과를 쿼리에 대한 상대적 관련성으로 재점수화해요.
관련성 피드백 기반 검색을 쓰려면 두 가지 구성 요소가 필요해요.
- 검색 대상인 벡터 컬렉션
- 검색 결과의 관련성을 판단할 oracle
관련성 피드백 기반 검색의 아이디어는 이래요.
- 기본 최근접 이웃 검색을 실행하고, 그 결과를 Retriever Similarity, 그 뒤의 알고리즘을 retriever라고 부릅니다.
- 어떤 feedback model로든 상위 X개 검색 결과(X는 크지 않아도 되고 3~5개가 좋아요)에 관련성 점수를 부여해요. 이 점수를 Feedback Score라고 불러요.
- 상위 결과의 Feedback Score를 분석해서, 피드백 모델이 retriever와 동의하는지, 아니면 검색을 개선할 수 있는지 판단해요.
- (후속 단계에서) 피드백을 활용한 검색을 수행해요.
전체 컬렉션에 걸쳐 검색에 피드백을 활용하기 위해 Qdrant는 다음을 요구하는 쿼리 인터페이스를 제공해요.
- 피드백 목록(각 항목은 대상/예시와
score즉 피드백 점수로 구성) - 피드백을 바탕으로 검색을 수정하는 공식 정의(
strategy)
내부적으로 Qdrant는 관련성 점수를 바탕으로 피드백 목록을 쌍으로 결합하고, 이 쌍을 검색 중 벡터 공간 탐색을 수정하는 공식(retrieval 전략 변경)에 사용해요. 이 관련성 피드백 기반 검색은 후보의 쿼리에 대한 유사도뿐 아니라 각 피드백 쌍에 대한 유사도도 고려해요. 자세한 동작은 관련성 피드백 아티클을 참고하세요.
target이나 example에 포인트 ID를 쓰면 그 포인트는 검색 결과에서 제외돼요. 포함하려면 먼저 원시 벡터로 변환해 쿼리에 사용해요.