Релевантность в векторном поиске

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

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

Алгоритмы поиска векторов включают в себя исчерпывающие соседи k-ближайших (KNN) и иерархический навигационно-малый мир (HNSW).

  • Исчерпывающий KNN выполняет поиск подбора, который сканирует все векторное пространство.

  • HNSW выполняет приблизительный поиск ближайшего соседа (ANN ).

Для поиска и оценки используются только векторные поля, помеченные как searchable в индексе или как searchFields в запросе.

Когда следует использовать исчерпывающий KNN

Исчерпывающий KNN вычисляет расстояния между всеми парами точек данных и находит точные k ближайшие соседи для точки запроса. Он предназначен для сценариев, когда высокий отзыв имеет крайне важное значение, и пользователи готовы принять компромиссы в задержке запросов. Так как это вычислительно интенсивно, используйте исчерпывающий KNN для небольших и средних наборов данных, или когда требования точности перевешивают рекомендации по производительности запросов.

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

Исчерпывающая поддержка KNN доступна до 2023-11-01 REST API, 2023-10-01-Preview REST API и клиентских библиотек Azure SDK, предназначенных для любой версии REST API.

Когда следует использовать HNSW

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

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

Как работает ближайший поиск соседей

Векторные запросы выполняются для пространства внедрения, состоящего из векторов, созданных из той же модели внедрения. Как правило, входное значение в запросе отправляется в ту же модель машинного обучения, которая вызвала внедрение в векторный индекс. Выходные данные — это вектор в том же пространстве внедрения. Так как аналогичные векторы кластеризованы близко друг к другу, поиск совпадений эквивалентен поиску векторов, ближайших к вектору запроса, и возврату связанных документов в качестве результата поиска.

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

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

Создание графа HNSW

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

  1. Инициализация: начните с пустого графа HNSW или существующего графа HNSW, если он не является новым индексом.

  2. Точка входа: это верхний уровень иерархического графа и служит отправной точкой для индексирования.

  3. Добавление к графу: различные иерархические уровни представляют различные детализирований графа, а более высокие уровни являются более глобальными, а более низкие уровни более детализированные. Каждый узел в графе представляет точку вектора.

    • Каждый узел подключен к m соседям, расположенным рядом. Это m параметр.

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

    • Эти подключения используют настроенную сходство metric для определения расстояния. Некоторые подключения являются "длинным расстоянием", которые подключаются между разными иерархическими уровнями, создавая ярлыки в графе, которые повышают эффективность поиска.

  4. Очистка графа и оптимизация. Это может произойти после индексирования всех векторов, а также повышает удобство навигации и эффективность графа HNSW.

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

  1. Инициализация: алгоритм инициирует поиск на верхнем уровне иерархического графа. Эта точка входа содержит набор векторов, которые служат начальными точками поиска.

  2. Обход. Далее он проходит по уровню графа, переходя от верхнего уровня к более низким уровням, выбирая узлы-кандидаты, которые ближе к вектору запроса на основе настроенной метрики расстояния, например сходства косинуса.

  3. Обрезка: чтобы повысить эффективность, алгоритм обрезает пространство поиска, рассматривая только узлы, которые, скорее всего, содержат ближайшие соседи. Это достигается путем поддержания очереди приоритетов потенциальных кандидатов и обновления ее по мере выполнения поиска. Длина этой очереди настраивается параметром efSearch.

  4. Уточнение. По мере перемещения алгоритма на более низкий, более детализированный уровень HNSW рассматривает больше соседей рядом с запросом, что позволяет уточнять набор векторов кандидатов, повышая точность.

  5. Завершение: поиск завершается, когда нужное число ближайших соседей было идентифицировано или когда выполняются другие условия остановки. Это требуемое число ближайших соседей регулируется параметром kвремени запроса.

Метрики сходства, используемые для измерения близости

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

Метрическая Description
cosine Эта метрика измеряет угол между двумя векторами и не влияет на разные длины векторов. Математически он вычисляет угол между двумя векторами. Cosine — это метрика сходства, используемая моделями внедрения Azure OpenAI, поэтому если вы используете Azure OpenAI, укажите cosine в конфигурации вектора.
dotProduct Эта метрика измеряет длину каждой пары двух векторов и угол между ними. Математически он вычисляет продукты величин векторов и угол между ними. Для нормализованных векторов это идентично сходству cosine , но немного более эффективно.
euclidean (также известный как l2 norm) Эта метрика измеряет длину векторной разницы между двумя векторами. Математически он вычисляет расстояние Евклиида между двумя векторами, что является нормой l2 разницы двух векторов.

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

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

Метод поиска Параметр Метрика оценки Диапазон
векторный поиск @search.score Косинус 0.333 - 1.00

Дляcosine метрик важно отметить, что вычисляемое @search.score значение не является косинусным значением между вектором запроса и векторами документов. Вместо этого поиск ИИ Azure применяет преобразования, такие как функция оценки монотонно уменьшается, то есть значения оценки всегда будут уменьшаться, так как сходство становится хуже. Это преобразование гарантирует, что оценки поиска доступны для ранжирования.

Существуют некоторые нюансы с оценками сходства:

  • Косинус сходство определяется как косинус угла между двумя векторами.
  • Косинус расстояние определяется как 1 - cosine_similarity.

Чтобы создать монотонную функцию уменьшения, @search.score определяется как 1 / (1 + cosine_distance).

Разработчики, которым требуется косинусное значение вместо искусственного значения, могут использовать формулу для преобразования оценки поиска обратно в косинус расстояние:

double ScoreToSimilarity(double score)
{
    double cosineDistance = (1 - score) / score;
    return  -cosineDistance + 1;
}

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

Советы для настройки релевантности

Если вы не получаете соответствующие результаты, поэкспериментируйте с изменениями конфигурации запросов. Для векторных запросов нет конкретных функций настройки, таких как профиль оценки или поле или повышение терминов:

  • Экспериментируйте с размером блока и перекрытием. Попробуйте увеличить размер блока и обеспечить достаточное перекрытие для сохранения контекста или непрерывности между блоками.

  • Для HNSW попробуйте изменить внутренний efConstruction состав графа близкого взаимодействия. Значение по умолчанию — 400. Диапазон составляет от 100 до 1000.

  • Увеличьте k результаты для отправки дополнительных результатов поиска в модель чата, если вы используете его.

  • Попробуйте использовать гибридные запросы с семантической ранжированием. В тестовом тестировании эта комбинация последовательно создает наиболее релевантные результаты.

Следующие шаги