Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Во время выполнения векторного запроса поисковая система ищет аналогичные векторы, чтобы найти лучших кандидатов, возвращаемых в результатах поиска. В зависимости от того, как индексировано векторное содержимое, поиск соответствующих совпадений является исчерпывающим или ограниченным до ближайших соседей для ускорения обработки. При обнаружении кандидатов метрики сходства используются для оценки каждого результата на основе силы совпадения.
В этой статье описываются алгоритмы, используемые для поиска соответствующих совпадений и метрик сходства, используемых для оценки. Он также предлагает советы по улучшению релевантности, если результаты поиска не соответствуют ожиданиям.
Алгоритмы, используемые в векторном поиске
Векторные алгоритмы поиска включают:
- Исчерпывающие К-ближайшие соседи (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, чтобы отправить больше результатов поиска для чат-модели, если вы используете её.Попробуйте использовать гибридные запросы с семантической ранжированием. В тестовом тестировании эта комбинация последовательно создает наиболее релевантные результаты.