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