Share via


RRF(Reciprocal Rank Fusion)를 사용한 하이브리드 검색의 관련성 점수 매기기

RRF(Reciprocal Rank Fusion)는 이전에 순위가 매겨진 여러 결과의 검색 점수를 평가하여 통합된 결과 집합을 생성하는 알고리즘입니다. Azure AI 검색에서는 동시에 실행되는 쿼리가 두 개 이상 있을 때마다 RRF가 사용됩니다. 각 쿼리는 순위가 매겨진 결과 집합을 생성하며 RRF는 순위를 쿼리 응답에서 반환된 단일 결과 집합으로 병합하고 균질화하는 데 사용됩니다. RRF가 항상 사용되는 시나리오의 예로는 하이브리드 검색과 동시에 실행되는 여러 벡터 쿼리가 있습니다.

RRF는 검색 결과 목록에서 첫 번째 관련 문서 순위의 역수인 상호 순위 개념을 기반으로 합니다. 이 기술의 목표는 원래 순위에 있는 항목의 위치를 고려하고 여러 목록에서 순위가 높은 항목에 더 높은 중요도를 부여하는 것입니다. 이렇게 하면 최종 순위의 전반적인 품질과 안정성을 향상시킬 수 있으므로 여러 순서가 지정된 검색 결과를 통합하는 작업에 더욱 유용합니다.

RRF 순위 지정 작동 방식

RRF는 여러 메서드에서 검색 결과를 가져와 결과의 각 문서에 상호 순위 점수를 할당한 다음, 점수를 결합하여 새 순위를 만드는 방식으로 작동합니다. 여러 검색 방법에서 최상위 위치에 나타나는 문서는 관련성이 더 높을 가능성이 있으며 결합된 결과에서 더 높은 순위를 매겨야 한다는 개념입니다.

다음은 RRF 프로세스에 대한 간단한 설명입니다.

  1. 동시에 실행되는 여러 쿼리에서 순위가 지정된 검색 결과를 가져옵니다.

  2. 각 순위 목록에서 결과에 대한 상호 순위 점수를 할당합니다. RRF는 각 결과 집합의 각 일치 항목에 대해 새 @search.score 항목을 생성합니다. 검색 결과의 각 문서에 대해 엔진은 목록의 위치에 따라 상호 순위 점수를 할당합니다. 점수는 1/(rank + k)로 계산됩니다. 여기서 rank는 목록에서 문서의 위치이고, k은 상수이며 실험적으로 60과 같은 작은 값으로 설정하면 가장 효과적으로 수행되는 것으로 관찰되었습니다. k 값은 RRF 알고리즘의 상수이며 최근접 항목의 수를 제어하는 k와는 완전히 별개입니다.

  3. 점수를 결합합니다. 각 문서에 대해 엔진은 각 검색 시스템에서 얻은 상호 순위 점수를 합산하여 각 문서에 대해 결합된 점수를 생성합니다. 

  4. 엔진은 결합된 점수를 기준으로 문서의 순위를 지정하고 정렬합니다. 결과 목록은 융합 순위입니다.

인덱스에서 searchable로 표시된 필드나 쿼리의 searchFields만 점수 매기기에 사용됩니다. retrievable로 표시된 필드나 쿼리의 select에 지정된 필드만 검색 점수와 함께 검색 결과에서 반환됩니다.

병렬 쿼리 실행

RRF는 둘 이상의 쿼리 실행이 있을 때마다 사용됩니다. 다음 예제에서는 병렬 쿼리 실행이 발생하는 쿼리 패턴을 보여 줍니다.

  • 전체 텍스트 쿼리와 하나의 벡터 쿼리(간단한 하이브리드 시나리오)는 두 개의 쿼리 실행과 같습니다.
  • 전체 텍스트 쿼리와 2개의 벡터 필드를 대상으로 하는 하나의 벡터 쿼리는 3개의 쿼리 실행과 같습니다.
  • 전체 텍스트 쿼리와 5개의 벡터 필드를 대상으로 하는 2개의 벡터 쿼리는 11개의 쿼리 실행과 같습니다.

하이브리드 검색 결과의 점수

결과 순위가 지정될 때마다 @search.score 속성에는 결과 순서를 지정하는 데 사용되는 값이 포함됩니다. 점수는 각 방법에 따라 달라지는 순위 알고리즘에 의해 생성됩니다. 각 알고리즘에는 자체 범위와 크기가 있습니다.

다음 차트는 각 관련성 순위 알고리즘에 대한 각 일치 항목, 알고리즘 및 점수 범위에 대해 반환된 점수 매기기 속성을 식별합니다.

검색 방법 매개 변수 점수 매기기 알고리즘 범위
전체 텍스트 검색 @search.score BM25 알고리즘 상한 없음
벡터 검색 @search.score HNSW 구성에 지정된 유사성 메트릭을 사용하는 HNSW 알고리즘입니다. 0.333 - 1.00(코사인), 유클리드 및 DotProduct의 경우 0 - 1.
하이브리드 검색 @search.score RRF 알고리즘 상한은 융합되는 쿼리 수에 따라 제한되며 각 쿼리는 RRF 점수에 최대 약 1을 기여합니다. 예를 들어 세 개의 쿼리를 병합하면 두 개의 검색 결과만 병합되는 경우보다 더 높은 RRF 점수가 생성됩니다.
의미 체계 순위 지정 @search.rerankerScore 의미 체계 순위 지정 0.00 - 4.00

의미 체계 순위는 RRF에 참여하지 않습니다. 해당 점수(@search.rerankerScore)는 항상 쿼리 응답에서 별도로 보고됩니다. 의미 체계 순위는 전체 텍스트 및 하이브리드 검색 결과를 다시 표시할 수 있습니다. 이러한 결과에는 의미 체계에 풍부한 콘텐츠가 있는 필드가 포함됩니다.

하이브리드 쿼리 응답의 순위가 지정된 결과 수

기본적으로 페이지 매김을 사용하지 않는 경우 검색 엔진은 전체 텍스트 검색의 경우 상위 50개의 순위 일치 항목을 반환하고, 벡터 검색의 경우 가장 유사한 k 일치 항목을 반환합니다. 하이브리드 쿼리에서 top는 응답의 결과 수를 결정합니다. 기본값에 따라 통합 결과 집합의 상위 50개 순위 일치 항목이 반환됩니다.

종종 검색 엔진은 topk보다 더 많은 결과를 찾습니다. 더 많은 결과를 반환하려면 페이징 매개 변수 topskipnext를 사용합니다. 페이징은 각 논리 페이지 결과 수를 결정하고 전체 페이로드를 탐색하는 방법입니다.

전체 텍스트 검색에는 일치 항목 최대 1,000개가 적용됩니다(API 응답 제한 참조). 일치 항목 1,000개가 발견되면 검색 엔진은 더 이상 검색하지 않습니다.

자세한 내용은 검색 결과로 작업하는 방법을 참조하세요.

검색 점수 매기기 워크플로의 다이어그램

다음 다이어그램은 점수 매기기 프로필 및 의미 체계 순위를 통해 상승하여 키워드 및 벡터 검색을 호출하는 하이브리드 쿼리를 보여 줍니다.

Diagram of prefilters.

이전 워크플로를 생성하는 쿼리는 다음과 같습니다.

POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2023-11-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
   "queryType":"semantic",
   "search":"hello world",
   "searchFields":"field_a, field_b",
   "vectorQueries": [
       {
           "kind":"vector",
           "vector": [1.0, 2.0, 3.0],
           "fields": "field_c, field_d"
       },
       {
           "kind":"vector",
           "vector": [4.0, 5.0, 6.0],
           "fields": "field_d, field_e"
       }
   ],
   "scoringProfile":"my_scoring_profile"
}

참고 항목