메모
Azure AI 검색 Azure 포털, REST API 및 Azure SDK 통해 사용할 수 있습니다. 또한 엔터프라이즈 콘텐츠를 Microsoft Foundry 포털의 에이전트에 대해 재사용 가능한 사용 권한 인식 기술 자료로 변환하는 관리되는 기술 계층인 Foundry IQ를 뒷받침합니다.
상호 순위 Fusion(RRF)은 이전에 순위가 지정된 여러 결과의 검색 점수를 평가하여 단일 통합 결과 집합을 생성하는 알고리즘입니다. Azure AI 검색 RRF는 하이브리드 쿼리 및 여러 벡터 쿼리와 같은 두 개 이상의 쿼리를 병렬로 실행할 때 사용됩니다. 각 개별 쿼리는 순위가 지정된 결과 집합을 생성하고, RRF는 해당 순위를 쿼리 응답에 대한 단일 결과 집합으로 병합하고 균질화합니다.
RRF는 검색 결과 목록에서 첫 번째로 관련 있는 문서의 순위에 대한 역수인 상호 순위 개념을 기반으로 합니다. 이 기술의 목표는 원래 순위에서 항목의 위치를 고려하여 여러 목록에서 순위가 높은 항목에 더 높은 중요도를 부여하는 것입니다. 이 방법을 사용하면 최종 순위의 전반적인 품질과 안정성을 향상시킬 수 있으므로 여러 순서가 지정된 검색 결과를 융합하는 작업에 더 유용합니다.
RRF 순위 지정 작동 방식
RRF는 여러 방법에서 나온 검색 결과를 가져와 각 문서에 상호 순위 점수를 부여한 다음, 이 점수들을 결합해 새로운 순위를 생성하는 방식으로 작동합니다. 이 개념의 핵심은 여러 검색 방법에서 공통적으로 상위에 등장하는 문서일수록 관련성이 높을 가능성이 크므로, 통합된 결과에서 더 높은 순위로 배치되어야 한다는 것입니다.
다음은 RRF 프로세스에 대한 간단한 설명입니다.
병렬로 실행되는 여러 쿼리에서 순위가 지정된 검색 결과를 가져옵니다.
각 순위 목록의 결과에 대해 상호 순위 점수를 할당합니다. RRF는 각 결과 집합의 각 매치에 대해 새로운
@search.score을 생성합니다. 검색 결과에 포함된 각 문서에 대해, 엔진은 목록에서의 위치를 기준으로 상호 순위 점수를 부여합니다.1/(rank + k)는 점수가 계산되는 방식으로,rank는 목록 내 문서의 위치이고k는 상수입니다. 실험에서는 60과 같은 작은 값으로 설정할k때 알고리즘이 가장 잘 수행됨을 보여 줍니다. 이k값은 RRF 알고리즘의 상수이며 가장 가까운 인접 항목의 수를 제어하는 값과 완전히 별개k입니다.점수를 결합합니다. 각 문서에 대해 엔진은 각 검색 시스템에서 얻은 상호 순위 점수를 합산하여, 문서별로 하나의 결합 점수를 산출합니다.
엔진은 결합 점수를 기준으로 문서의 순위를 매기고 이를 정렬합니다. 그렇게 생성된 목록이 융합된 순위입니다.
인덱스에서 searchable로 표시된 필드나 쿼리의 searchFields만 점수 매기기에 사용됩니다. 검색 결과에는 retrievable로 표시된 필드 또는 쿼리에서 select로 지정한 필드만이 해당 검색 점수와 함께 반환됩니다.
병렬 쿼리 실행
RRF는 둘 이상의 쿼리가 실행되는 모든 경우에 사용됩니다. 다음 예시는 병렬 쿼리 실행이 발생하는 쿼리 패턴을 보여줍니다.
- 전체 텍스트 쿼리와 하나의 벡터 쿼리(간단한 하이브리드 시나리오)는 두 개의 쿼리 실행과 같습니다.
- 전체 텍스트 쿼리와 두 개의 벡터 필드를 대상으로 하는 하나의 벡터 쿼리는 세 번의 쿼리 실행과 같습니다.
- 전체 텍스트 쿼리와 5개의 벡터 필드를 대상으로 하는 두 개의 벡터 쿼리는 11개의 쿼리 실행과 같습니다.
하이브리드 검색 결과의 점수
결과가 순위가 @search.score 매겨질 때마다 속성에는 결과 순서를 지정하는 데 사용되는 값이 포함됩니다. 점수는 각 방법마다 서로 다른 순위 지정 알고리즘에 의해 생성됩니다. 각 알고리즘은 고유한 범위와 크기를 가집니다.
다음 표에서는 각 관련성 순위 알고리즘에 대한 각 일치 항목, 알고리즘 및 점수 범위에서 반환되는 점수 매기기 속성을 식별합니다. 자세한 내용 및 점수 매기기 워크플로의 다이어그램은 Azure AI 검색의 관련성을 참조하세요.
| 검색 방법 | Parameter | 점수 매기기 알고리즘 | Range |
|---|---|---|---|
| 전체 텍스트 검색 | @search.score |
BM25 알고리즘 | 상한 없음. |
| vector search | @search.score |
HNSW 구성에서 지정된 유사도 메트릭을 사용하는 HNSW 알고리즘입니다. | 코사인 유사도의 경우 0.333~1.00, 유클리드 및 내적(DotProduct)의 경우 0~1입니다. |
| 하이브리드 검색 | @search.score |
RRF 알고리즘 | 상한은 융합되는 쿼리 수에 의해 제한되며, 각 쿼리는 RRF 점수에 최대 1/k만큼 기여할 수 있습니다 (k은 RRF 알고리즘의 매개변수로, 벡터 쿼리가 아닙니다). 예를 들어 세 개의 쿼리를 병합하면 두 개의 검색 결과만 병합되는 경우보다 더 높은 RRF 점수가 생성됩니다. |
| 의미 순위매기기 | @search.rerankerScore |
의미 순위매기기 | 0.00 - 4.00 |
RRF로 결과를 병합한 이후에 시맨틱 순위 지정이 수행됩니다. 해당 점수(@search.rerankerScore)는 항상 쿼리 응답에서 별도로 보고됩니다. 시맨틱 랭커는 의미적으로 풍부한 콘텐츠를 포함한 필드가 존재하는 경우, 전체 텍스트 검색 결과와 하이브리드 검색 결과를 다시 순위 지정할 수 있습니다. 검색 문서에 의미적으로 관련 있는 콘텐츠를 담은 텍스트 필드가 포함되어 있다면, 순수 벡터 쿼리 결과도 다시 순위 지정할 수 있습니다.
하위 점수로 검색 점수 압축 풀기
검색 점수를 분해하여 하위 점수를 볼 수 있습니다. 벡터 쿼리의 경우, 이 정보는 벡터 가중치에 대한 적절한 값을 결정하거나 최소 임계값을 설정하는 데 도움이 될 수 있습니다.
하위 점수를 얻으려면 다음을 수행합니다.
검색 문서 REST API 또는 기능을 제공하는 Azure SDK 패키지를 사용합니다.
쿼리 요청을 수정하여 새로운
debug매개변수를 추가하고, 시맨틱 랭커를 사용하는 경우에는vector또는semantic으로, 그렇지 않은 경우에는all로 설정합니다.
다음은 디버그 모드에서 하위 점수를 반환하는 하이브리드 쿼리 예제입니다.
POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2026-04-01
{
"vectorQueries": [
{
"vector": [
-0.009154141,
0.018708462,
. . .
-0.02178128,
-0.00086512347
],
"fields": "DescriptionVector",
"kind": "vector",
"exhaustive": true,
"k": 10
},
{
"vector": [
-0.009154141,
0.018708462,
. . .
-0.02178128,
-0.00086512347
],
"fields": "DescriptionVector",
"kind": "vector",
"exhaustive": true,
"k": 10
}
],
"search": "historic hotel walk to restaurants and shopping",
"select": "HotelName, Description, Address/City",
"debug": "vector",
"top": 10
}
가중 점수
또한 하이브리드 쿼리에서 벡터 쿼리의 중요도를 높이거나 줄일 수 있습니다.
특정 문서에 대해 RRF를 계산할 때, 검색 엔진은 해당 문서가 나타나는 각 결과 집합에서의 순위를 확인합니다. 하나의 문서가 세 개의 서로 다른 검색 결과에 나타난다고 가정해 보겠습니다. 이 결과들은 두 개의 벡터 쿼리와 하나의 BM25 기반 텍스트 쿼리에서 나온 것입니다. 해당 문서의 위치는 각 결과마다 다릅니다.
| 매치가 발견되었습니다 | 결과에서의 위치 | @search.score | 가중치 승수 | @search.score (가중치 적용) |
|---|---|---|---|---|
| 벡터 결과 1 | 1번 위치 | 0.8383955 | 0.5 | 0.41919775 |
| 벡터 결과 2 | 5번 위치 | 0.81514114 | 2.0 | 1.63028228 |
| BM25 결과 | 10번 위치 | 0.8577363 | NA | 0.8577363 |
각 결과 집합에서의 문서 위치는 초기 점수에 해당하며, 이 점수들이 합산되어 해당 문서의 최종 RRF 점수가 생성됩니다.
벡터 가중치를 추가하면 초기 점수에 가중치 배수가 적용되어 점수가 증가하거나 감소합니다. 기본값은 1.0이며, 이는 가중치를 적용하지 않는다는 의미로 초기 점수가 그대로 RRF 점수 계산에 사용됩니다. 그러나 가중치를 0.5로 설정하면 점수가 감소하여 해당 결과는 통합 순위에서 중요도가 낮아집니다. 반대로 가중치를 2.0으로 설정하면 해당 점수는 전체 RRF 점수에서 더 큰 비중을 차지하게 됩니다.
이 예시에서는 @search.score(가중치가 적용된) 값이 RRF 순위 모델로 전달됩니다.
하이브리드 쿼리 응답의 순위가 지정된 결과 수
기본적으로 페이지 매김을 사용하지 않는 경우 검색 엔진은 전체 텍스트 검색의 상위 50개 순위 일치 항목과 가장 유사한 k 일치 항목을 벡터 검색에 반환합니다. 하이브리드 쿼리에서 top은 응답의 결과 수를 결정합니다. 기본 설정에 따라 통합된 결과 집합에서 순위가 가장 높은 상위 50개의 매치가 반환됩니다.
종종 검색 엔진은 top 및 k보다 더 많은 결과를 찾습니다. 더 많은 결과를 반환하려면 페이징 매개 변수 top, skip 및 next을 사용합니다. 페이징은 각 논리 페이지 결과 수를 결정하고 전체 페이로드를 탐색하는 방법입니다. 하이브리드 쿼리의 텍스트 측에서 더 많은 결과를 반환하려면 maxTextRecallSize 값을 더 크게 설정할 수 있습니다(기본값은 1,000입니다).
기본적으로 전체 텍스트 검색에는 최대 1,000개의 일치 항목이 적용됩니다(API 응답 제한 참조). 일치 항목 1,000개가 발견되면 검색 엔진은 더 이상 검색하지 않습니다.
자세한 내용은 검색 결과로 작업하는 방법을 참조하세요.