Оценка релевантности в гибридном поиске с помощью RRF

Взаимное ранжирование Fusion (RRF) — это алгоритм, который оценивает оценки поиска из нескольких, ранее ранжированных результатов для создания единого результирующего набора. В службе "Поиск ИИ Azure" 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 используется в любое время, когда выполняется несколько запросов. В следующих примерах показаны шаблоны запросов, в которых выполняется параллельный запрос:

  • Полнотекстовый запрос, а также один векторный запрос (простой гибридный сценарий), равен двум выполнениям запросов.
  • Полнотекстовый запрос, а также один векторный запрос, предназначенный для двух полей вектора, равен трем выполнениям запросов.
  • Полнотекстовый запрос, а также два векторных запроса, предназначенных для пяти векторных полей, равно 11 выполнений запросов

Оценки в результатах гибридного поиска

Каждый раз, когда результаты ранжируются, свойство содержит значение, @search.score используемое для упорядочивания результатов. Оценки создаются алгоритмами ранжирования, которые зависят от каждого метода. Каждый алгоритм имеет свой собственный диапазон и величину.

На следующей диаграмме определяется свойство оценки, возвращаемое для каждого совпадения, алгоритма и диапазона показателей для каждого алгоритма ранжирования релевантности.

Метод поиска Параметр Алгоритм оценки Диапазон
полнотекстовый поиск @search.score Алгоритм BM25 Нет верхнего предела.
векторный поиск @search.score Алгоритм HNSW, используя метрику сходства, указанную в конфигурации HNSW. 0.333 – 1.00 (Cosine), от 0 до 1 для Euclidean и DotProduct.
гибридный поиск @search.score Алгоритм RRF Верхний предел ограничивается числом сплетаемых запросов, причем каждый запрос способствует максимальному значению 1 к оценке RRF. Например, объединение трех запросов приведет к повышению показателей RRF, чем при слиянии только двух результатов поиска.
семантическое ранжирование @search.rerankerScore Семантическое ранжирование 0.00 - 4.00

Семантический рейтинг не участвует в RRF. Его оценка (@search.rerankerScore) всегда сообщается отдельно в ответе запроса. Семантический ранжирование может повторно выполнять полнотекстовые и гибридные результаты поиска, предполагая, что эти результаты включают поля с семантически богатым содержимым.

Число ранжированных результатов в ответе гибридного запроса

По умолчанию, если вы не используете разбиение на страницы, поисковая система возвращает первые 50 самых высоких совпадений для полнотекстового поиска и наиболее аналогичные k совпадения для векторного поиска. В гибридном запросе top определяет количество результатов в ответе. В зависимости от значений по умолчанию возвращаются первые 50 самых высокоранговых совпадений единого результированного набора.

Часто поисковая система находит больше результатов, чем top и k. Чтобы вернуть дополнительные результаты, используйте параметры topразбиения по страницам и skipnext. Разбиение на страницы — это определение количества результатов на каждой логической странице и переход по полной полезных данных.

Полнотекстовый поиск имеет максимальное ограничение в 1000 совпадений (см . ограничения ответа API). После того как найдены 1000 совпадений, поисковая система больше не ищет.

Дополнительные сведения см. в статье "Работа с результатами поиска".

Схема рабочего процесса оценки поиска

На следующей схеме показан гибридный запрос, вызывающий ключевое слово и векторный поиск, с повышением с помощью профилей оценки и семантического ранжирования.

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"
}

См. также