Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Во время выполнения векторного запроса поисковая система ищет аналогичные векторы, чтобы найти лучших кандидатов, возвращаемых в результатах поиска. В зависимости от того, как индексировано векторное содержимое, поиск соответствующих совпадений является исчерпывающим или ограничен ближайшими соседями для ускорения обработки. После обнаружения кандидатов метрики сходства используются для оценки каждого результата на основе силы совпадения.
В этой статье описываются алгоритмы, используемые для поиска соответствующих совпадений и метрик сходства, используемых для оценки. Он также предлагает советы по улучшению релевантности, если результаты поиска не соответствуют ожиданиям.
Алгоритмы, используемые в векторном поиске
Векторные алгоритмы поиска включают:
Исчерпывающие К-ближайшие соседи (KNN), выполняющие сканирование всего векторного пространства.
Иерархический навигационируемый малый мир (HNSW), который выполняет поиск приблизительного ближайшего соседа (ANN).
Для поиска и оценки используются только поля векторов, помеченные как searchable
в индексе или searchFields
запросе.
О исчерпывающем KNN
Исчерпывающий KNN вычисляет расстояния между всеми парами точек данных и находит точные k
ближайшие соседи для точки запроса. Так как алгоритм не требует быстрого случайного доступа к точкам данных, KNN не потребляет квоту размера векторного индекса . Однако он предоставляет глобальный набор ближайших соседей.
Исчерпывающий KNN является вычислительным ресурсоемким, поэтому используйте его для небольших и средних наборов данных или когда потребность в точности перевешивает потребность в производительности запросов. Другим вариантом использования является создание набора данных для оценки полноты алгоритма ANN, так как исчерпывающий KNN можно использовать для создания эталонного набора данных для ближайших соседей.
Сведения о HNSW
HNSW — это алгоритм ANN, оптимизированный для приложений с высокой точностью и низкой задержкой, с неизвестным или изменчивым распределением данных. Во время индексирования HNSW создает дополнительные структуры данных, которые упорядочивают точки данных в иерархическом графе. Во время выполнения запроса HNSW проходит по этому графику, чтобы найти наиболее релевантные совпадения, что позволяет эффективно выполнять поиск ближайших соседей.
HNSW требует, чтобы все точки данных располагались в памяти для быстрого случайного доступа, который использует квоту размера векторного индекса . Эта конструкция балансирует точность поиска с эффективностью вычислений и делает HNSW подходящим для большинства сценариев, особенно при поиске по большим наборам данных.
HNSW предлагает несколько настраиваемых параметров конфигурации для оптимизации пропускной способности, задержки и отзыва для приложения поиска. Например, поля, которые указывают HNSW, также поддерживают полный KNN с помощью параметра запроса"exhaustive": true
. Однако поля, индексированные для exhaustiveKnn
, не поддерживают запросы HNSW, поскольку отсутствуют дополнительные структуры данных, позволяющие осуществлять эффективный поиск.
О ANN
ANN — это класс алгоритмов для поиска совпадений в векторном пространстве. Этот класс алгоритмов использует различные структуры данных или методы секционирования данных, чтобы значительно сократить пространство поиска и ускорить обработку запросов.
Алгоритмы ANN жертвуют некоторой точностью, но предлагают масштабируемое и быстрое получение приблизительных ближайших соседей, что делает их идеальными для балансировки точности и эффективности в современных приложениях получения информации. Вы можете настроить параметры алгоритма, чтобы точно настроить требования к памяти, задержке, памяти и объему дискового пространства приложения поиска.
Поиск ИИ Azure использует HNSW для алгоритма ANN.
Как работает ближайший поиск соседей
Векторные запросы выполняются для пространства внедрения, состоящего из векторов, созданных из той же модели внедрения. Как правило, входное значение в запросе отправляется в ту же модель машинного обучения, которая вызвала внедрение в векторный индекс. Выходные данные — это вектор в том же пространстве внедрения. Так как аналогичные векторы кластеризованы близко друг к другу, поиск совпадений эквивалентен поиску векторов, ближайших к вектору запроса, и возврату связанных документов в качестве результата поиска.
Например, если запрос запроса относится к отелям, модель сопоставляет запрос с вектором, который существует где-то в кластере векторов, представляющих документы о отелях. Определение векторов, которые наиболее похожи на запрос, на основе метрики сходства, определяет, какие документы наиболее релевантны.
Если векторные поля индексируются для исчерпывающего KNN, запрос выполняется по отношению ко всем соседям. Для полей, индексированных для HNSW, поисковая система использует граф HNSW для поиска по подмножествам узлов в векторном индексе.
Создание графа HNSW
Во время индексирования служба поиска создает граф HNSW. Цель индексирования нового вектора в граф HNSW — добавить его в структуру графа таким образом, чтобы обеспечить эффективный поиск ближайших соседей. Этот процесс состоит из следующих шагов.
Инициализация: начните с пустого графа HNSW или существующего графа HNSW, если он не является новым индексом.
Точка входа: это верхний уровень иерархического графа и служит отправной точкой для индексирования.
Добавление к графу: различные иерархические уровни представляют различные детализирований графа, а более высокие уровни являются более глобальными, а более низкие уровни более детализированные. Каждый узел в графе представляет точку вектора.
Каждый узел подключен к
m
соседям, расположенным рядом. Этоm
параметр.Число точек данных, которые считаются кандидатами, регулируется параметром
efConstruction
. Этот динамический список формирует набор ближайших точек в существующем графе для алгоритма, который следует учитывать. БолееefConstruction
высокие значения приводят к рассмотрению большего количества узлов, что часто приводит к более плотным локальным кварталам для каждого вектора.Эти подключения используют настроенную сходство
metric
для определения расстояния. Некоторые подключения являются "длинным расстоянием", которые подключаются между разными иерархическими уровнями, создавая ярлыки в графе, которые повышают эффективность поиска.
Очистка графа и оптимизация. Это может произойти после индексирования всех векторов, а также повышает удобство навигации и эффективность графа HNSW.
Навигация по графу HNSW во время запроса
Векторный запрос перемещает иерархическую структуру графа для проверки совпадений. Ниже приведены инструкции, описанные в процессе.
Инициализация: алгоритм инициирует поиск на верхнем уровне иерархического графа. Эта точка входа содержит набор векторов, которые служат начальными точками поиска.
Обход. Далее он проходит по уровню графа, переходя от верхнего уровня к более низким уровням, выбирая узлы-кандидаты, которые ближе к вектору запроса на основе настроенной метрики расстояния, например сходства косинуса.
Обрезка: чтобы повысить эффективность, алгоритм обрезает пространство поиска, рассматривая только узлы, которые, скорее всего, содержат ближайшие соседи. Это достигается путем поддержания очереди приоритетов потенциальных кандидатов и обновления ее по мере выполнения поиска. Длина этой очереди настраивается параметром
efSearch
.Уточнение. По мере перемещения алгоритма на более низкий, более детализированный уровень HNSW рассматривает больше соседей рядом с запросом, что позволяет уточнять набор векторов кандидатов, повышая точность.
Завершение: поиск завершается, когда нужное число ближайших соседей было идентифицировано или когда выполняются другие условия остановки. Это требуемое число ближайших соседей регулируется параметром
k
времени запроса.
Метрики сходства, используемые для измерения близости
Алгоритм находит векторы кандидатов для оценки сходства. Для выполнения этой задачи вычисление метрик сходства сравнивает вектор кандидата с вектором запроса и измеряет сходство. Алгоритм отслеживает упорядоченный набор наиболее похожих векторов, найденных его, который формирует ранжированный результирующий набор, когда алгоритм достиг завершения.
Метрическая | Описание |
---|---|
cosine |
Эта метрика измеряет угол между двумя векторами и не влияет на разные длины векторов. Математически он вычисляет угол между двумя векторами. Cosine — это метрика сходства, используемая моделями внедрения Azure OpenAI, поэтому если вы используете Azure OpenAI, укажите cosine в конфигурации вектора. |
dotProduct |
Эта метрика измеряет длину каждой пары двух векторов и угол между ними. Математически он вычисляет продукты величин векторов и угол между ними. Для нормализованных векторов это идентично сходству cosine , но немного более эффективно. |
euclidean |
(также известный как l2 norm ) Эта метрика измеряет длину векторной разницы между двумя векторами. Математически он вычисляет расстояние Евклиида между двумя векторами, что является нормой l2 разницы двух векторов. |
Примечание.
При параллельном выполнении двух или нескольких векторных запросов или при гибридном поиске, объединяющем векторные и текстовые запросы в одном запросе, для оценки конечных результатов поиска используется взаимодействие с обратным рангом Fusion (RRF ).
Оценки в результатах векторного поиска
Оценки вычисляются и назначаются каждому совпадению, при этом самые высокие совпадения возвращаются в виде 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
результаты для отправки дополнительных результатов поиска в модель чата, если вы используете его.Попробуйте использовать гибридные запросы с семантической ранжированием. В тестовом тестировании эта комбинация последовательно создает наиболее релевантные результаты.