Ранжирование
Milvus обеспечивает возможности гибридного поиска с помощью API hybrid_search(), используя сложные стратегии ранжирования для уточнения результатов поиска по нескольким экземплярам AnnSearchRequest
. В этой теме рассматривается процесс реранжирования, объясняется его значение и реализация различных стратегий реранжирования в Milvus.
Обзор
Следующий рисунок иллюстрирует выполнение гибридного поиска в Milvus и подчеркивает роль реранкинга в этом процессе.
Ранжирование в гибридном поиске - это важный этап, который объединяет результаты из нескольких векторных полей, обеспечивая релевантность и точную расстановку приоритетов в итоговой выдаче. В настоящее время Milvus предлагает следующие стратегии ранжирования:
WeightedRanker
: Этот подход объединяет результаты, вычисляя средневзвешенное значение оценок (или векторных расстояний) из разных векторных поисков. Он присваивает веса в зависимости от значимости каждого векторного поля.RRFRanker
: Эта стратегия объединяет результаты на основе их рангов в различных векторных столбцах.
Взвешенная оценка (WeightedRanker)
Стратегия WeightedRanker
присваивает различные веса результатам из каждого маршрута векторного поиска на основе значимости каждого векторного поля. Эта стратегия ранжирования применяется, когда значимость каждого векторного поля варьируется, что позволяет выделить определенные векторные поля по сравнению с другими, присвоив им более высокие веса. Например, при мультимодальном поиске текстовое описание может считаться более важным, чем распределение цветов на изображениях.
Основной процесс работы WeightedRanker выглядит следующим образом:
Сбор оценок во время поиска: Сбор результатов и их оценок из различных маршрутов векторного поиска.
Нормализация оценок: Нормализация оценок по каждому маршруту в диапазоне [0,1], где значения ближе к 1 означают более высокую релевантность. Эта нормализация очень важна, так как распределения баллов варьируются в зависимости от типа метрики. Например, расстояние для IP находится в диапазоне [-∞,+∞], а расстояние для L2 - в диапазоне [0,+∞]. Milvus использует функцию
arctan
, преобразуя значения в диапазон [0,1], чтобы обеспечить стандартизированную основу для различных типов метрик.Распределение веса: Присвойте вес
w𝑖
каждому маршруту векторного поиска. Пользователи задают веса, которые отражают надежность, точность или другие важные метрики источника данных. Каждый вес находится в диапазоне [0,1].Слияние баллов: Вычисление средневзвешенного значения нормализованных оценок для получения итоговой оценки. Затем результаты ранжируются на основе этих оценок от самой высокой до самой низкой, чтобы получить окончательные отсортированные результаты.
взвешенный ранжир
Чтобы использовать эту стратегию, примените экземпляр WeightedRanker
и задайте значения весов, передав переменное количество числовых аргументов.
from pymilvus import WeightedRanker
# Use WeightedRanker to combine results with specified weights
rerank = WeightedRanker(0.8, 0.8, 0.7)
Обратите внимание, что:
Каждое значение веса варьируется от 0 (наименее важный) до 1 (наиболее важный), влияя на итоговый суммарный балл.
Общее количество значений веса, указанных в
WeightedRanker
, должно быть равно количеству экземпляровAnnSearchRequest
, созданных ранее.Стоит отметить, что из-за различий в измерениях разных типов метрик мы нормализуем расстояния между результатами отзыва так, чтобы они лежали в интервале [0,1], где 0 означает "разные", а 1 - "похожие". Итоговая оценка будет представлять собой сумму значений веса и расстояния.
Взаимное слияние рангов (RRFRanker)
RRF - это метод слияния данных, который объединяет ранжированные списки на основе взаимности их рангов. Это эффективный способ сбалансировать влияние каждого векторного поля, особенно когда нет четкого приоритета важности. Эта стратегия обычно используется, когда необходимо уделить равное внимание всем векторным полям или когда существует неопределенность в отношении относительной важности каждого поля.
Основной процесс RRF выглядит следующим образом:
Сбор рейтингов во время поиска: Ретриверы по нескольким векторным полям получают и сортируют результаты.
Слияние рангов: Алгоритм RRF взвешивает и объединяет ранги, полученные от каждого ретривера. Формула выглядит следующим образом:
rrf-ranker
Здесь 𝑁 представляет собой количество различных маршрутов поиска, rank𝑖(𝑑) - ранговая позиция извлеченного документа 𝑑 по 𝑖-му ретриверу, а 𝑘 - параметр сглаживания, обычно устанавливаемый на 60.
Комплексное ранжирование: Повторное ранжирование найденных результатов на основе комбинированных оценок для получения окончательных результатов.
Чтобы использовать эту стратегию, примените экземпляр RRFRanker
.
from pymilvus import RRFRanker
# Default k value is 60
ranker = RRFRanker()
# Or specify k value
ranker = RRFRanker(k=100)
RRF позволяет сбалансировать влияние полей без указания явных весов. Лучшие совпадения, согласованные несколькими полями, будут приоритетными в итоговом рейтинге.