Объединение геопространственной фильтрации и векторного поиска с геометрическими полями и RTREE в Milvus 2.6
По мере того как системы искусственного интеллекта все чаще применяются для принятия решений в режиме реального времени, геопространственные данные приобретают все большее значение во все большем количестве приложений, особенно в тех, которые работают в физическом мире или обслуживают пользователей в реальных местах.
Рассмотрим платформы доставки еды, такие как DoorDash или Uber Eats. Когда пользователь делает заказ, система не просто рассчитывает кратчайшее расстояние между двумя точками. Она оценивает качество ресторана, доступность курьера, дорожную обстановку, зоны обслуживания и все чаще встраивает данные о пользователях и товарах, которые отражают личные предпочтения. Аналогичным образом, автономные транспортные средства должны выполнять планирование пути, обнаружение препятствий и понимание семантики на уровне сцены в условиях жестких ограничений на время ожидания - часто в течение миллисекунд. В этих областях эффективные решения зависят от сочетания пространственных ограничений и семантического сходства, а не от рассмотрения их как независимых шагов.
Однако на уровне данных пространственные и семантические данные традиционно обрабатываются отдельными системами.
Геопространственные базы данных и пространственные расширения предназначены для хранения координат, полигонов и пространственных отношений, таких как вместимость или расстояние.
Векторные базы данных работают с векторными вложениями, которые представляют семантический смысл данных.
Когда приложениям требуется и то, и другое, они часто вынуждены использовать многоступенчатые конвейеры запросов - фильтровать по местоположению в одной системе, а затем выполнять векторный поиск в другой. Такое разделение увеличивает сложность системы, увеличивает задержку запросов и затрудняет эффективное выполнение пространственно-семантических рассуждений в масштабе.
Milvus 2.6 решает эту проблему, представляя поле Geometry Field, которое позволяет сочетать векторный поиск по сходству непосредственно с пространственными ограничениями. Это позволяет реализовать такие сценарии использования, как:
Location-Base Service (LBS): "найти похожие POI в пределах этого городского квартала".
Мультимодальный поиск: "найти похожие фотографии в радиусе 1 км от этой точки".
Карты и логистика: "активы внутри региона" или "маршруты, пересекающие путь".
В сочетании с новым индексом RTREE -древовидной структурой, оптимизированной для пространственной фильтрации, - Milvus теперь поддерживает такие эффективные геопространственные операторы, как st_contains, st_within и st_dwithin, а также высокоразмерный векторный поиск. Вместе они делают пространственно-ориентированный интеллектуальный поиск не только возможным, но и практичным.
В этом посте мы расскажем о том, как работают геометрическое поле и индекс RTREE, и как они в сочетании с векторным поиском по сходству позволяют реализовать пространственно-семантические приложения в реальном мире.
Что такое поле геометрии в Milvus?
Поле Geometry - это тип данных, определяемый схемой (DataType.GEOMETRY) в Milvus, используемый для хранения геометрических данных. В отличие от систем, которые работают только с необработанными координатами, Milvus поддерживает целый ряд пространственных структур - в том числе Point, LineString и Polygon.
Это позволяет представлять такие понятия реального мира, как местоположение ресторана (Point), зоны доставки (Polygon) или траектории движения автономного транспортного средства (LineString), в одной и той же базе данных, в которой хранятся семантические векторы. Другими словами, Milvus становится единой системой, позволяющей определить, где что находится и что означает.
Значения геометрии хранятся в формате Well-Known Text (WKT) - человекочитаемом стандарте для вставки и запроса геометрических данных. Это упрощает ввод и запрос данных, поскольку строки WKT можно вставлять непосредственно в запись Milvus. Например:
data = [
{
"id": 1,
"geo": "POINT(116.4074 39.9042)",
"vector": vector,
}
]
Что такое индекс RTREE и как он работает?
Как только Milvus вводит тип данных Geometry, ему также необходим эффективный способ фильтрации пространственных объектов. Milvus решает эту задачу с помощью двухступенчатого конвейера пространственной фильтрации:
Грубая фильтрация: Быстро сужает круг кандидатов, используя пространственные индексы, такие как RTREE.
Тонкая фильтрация: Применяет точную проверку геометрии к оставшимся кандидатам, обеспечивая корректность на границах.
Такая конструкция обеспечивает баланс между производительностью и точностью. Пространственный индекс агрессивно отсекает нерелевантные данные, а точные геометрические проверки обеспечивают правильные результаты для таких операторов, как containment, intersection и пороговое расстояние.
В основе этого конвейера лежит RTREE (Rectangle Tree), структура пространственного индексирования, разработанная для ускорения запросов к геометрическим данным. RTREE работает за счет иерархической организации объектов с помощью минимальных ограничивающих прямоугольников (MBR), что позволяет пропускать большие части пространства поиска при выполнении запросов.
Этап 1: Построение индекса RTREE
Построение RTREE происходит по принципу "снизу вверх", в ходе которого близлежащие пространственные объекты группируются во все более крупные ограничивающие области:
1. Создайте листовые узлы: Для каждого геометрического объекта вычисляем его минимальный ограничивающий прямоугольник (MBR)- наименьший прямоугольник, который полностью содержит объект, и сохраняем его в качестве узла листа.
2. Сгруппируйте в более крупные блоки: Объедините близлежащие узлы листьев в группы и оберните каждую группу внутри нового MBR, создав внутренние узлы.
3. Добавьте корневой узел: Создайте корневой узел, MBR которого охватывает все внутренние группы, формируя сбалансированную по высоте древовидную структуру.
Этап 2: Ускорение запросов
1. Сформируйте MBR запроса: рассчитайте MBR для геометрии, используемой в запросе.
2. Обрезать ветви: Начиная с корня, сравните MBR запроса с каждым внутренним узлом. Пропустите все ветви, MBR которых не пересекается с MBR запроса.
3. Собрать кандидатов: Спуститесь в пересекающиеся ветви и соберите узлы листьев-кандидатов.
4. Выполнить точное сопоставление: для каждого кандидата выполнить пространственный предикат, чтобы получить точные результаты.
Почему RTREE работает быстро
RTREE обеспечивает высокую производительность при пространственной фильтрации благодаря нескольким ключевым особенностям конструкции:
Каждый узел хранит MBR: каждый узел аппроксимирует площадь всех геометрий в своем поддереве. Это позволяет легко решить, нужно ли исследовать ветвь во время запроса.
Быстрая обрезка: Исследуются только те поддеревья, MBR которых пересекает область запроса. Нерелевантные области полностью игнорируются.
Масштабируется с размером данных: RTREE поддерживает пространственный поиск за время O(log N), обеспечивая быстрые запросы даже при расширении набора данных.
Реализация Boost.Geometry: Milvus строит свой индекс RTREE с использованием Boost.Geometry, широко используемой библиотеки C++, которая обеспечивает оптимизированные алгоритмы геометрии и потокобезопасную реализацию RTREE, подходящую для параллельных рабочих нагрузок.
Поддерживаемые операторы геометрии
Milvus предоставляет набор пространственных операторов, которые позволяют фильтровать и извлекать сущности на основе геометрических отношений. Эти операторы необходимы для рабочих нагрузок, которым нужно понять, как объекты соотносятся друг с другом в пространстве.
В следующей таблице перечислены геометрические операторы, доступные в Milvus в настоящее время.
| Оператор | Описание |
|---|---|
| st_intersects(A, B) | Возвращает TRUE, если геометрии A и B имеют хотя бы одну общую точку. |
| st_contains(A, B) | Возвращает TRUE, если геометрия A полностью содержит геометрию B (за исключением границы). |
| st_within(A, B) | Возвращает TRUE, если геометрия A полностью содержится в геометрии B. Это обратное значение st_contains(A, B). |
| st_covers(A, B) | Возвращает TRUE, если геометрия A покрывает геометрию B (включая границу). |
| st_touches(A, B) | Возвращает TRUE, если геометрии A и B соприкасаются на своих границах, но не пересекаются внутри. |
| st_equals(A, B) | Возвращает TRUE, если геометрии A и B пространственно идентичны. |
| st_overlaps(A, B) | Возвращает TRUE, если геометрии A и B частично перекрываются и ни одна из них не содержит другую полностью. |
| st_dwithin(A, B, d) | Возвращает TRUE, если расстояние между A и B меньше d. |
Как объединить геолокационный индекс и векторный индекс
Благодаря поддержке геометрии и индекса RTREE, Milvus может объединить геопространственную фильтрацию с поиском векторного сходства в одном рабочем процессе. Процесс выполняется в два этапа:
1. Фильтр по местоположению с помощью RTREE: сначала Milvus использует индекс RTREE, чтобы сузить поиск до объектов в заданном географическом диапазоне (например, "в пределах 2 км").
2. Ранжирование по семантике с помощью векторного поиска: Из оставшихся кандидатов векторный индекс выбирает Top-N наиболее похожих результатов на основе сходства вкраплений.
Реальные примеры использования геовекторного поиска
1. Службы доставки: Более умные рекомендации с учетом местоположения
Такие платформы, как DoorDash или Uber Eats, ежедневно обрабатывают сотни миллионов запросов. Как только пользователь открывает приложение, система должна определить на основе его местоположения, времени суток, вкусовых предпочтений, предполагаемого времени доставки, трафика в реальном времени и доступности курьеров, какие рестораны или курьеры лучше всего подходят в данный момент.
Традиционно для этого требуется запрос к геопространственной базе данных и отдельному рекомендательному механизму, а затем несколько раундов фильтрации и повторного ранжирования. С помощью Geolocation Index компания Milvus значительно упрощает этот рабочий процесс:
Единое хранилище - координаты ресторана, местоположение курьера и вкрапления предпочтений пользователя находятся в одной системе.
Совместный поиск - сначала применяйте пространственный фильтр (например, рестораны в пределах 3 км), а затем используйте векторный поиск для ранжирования по сходству, вкусовым предпочтениям или качеству.
Динамическое принятие решений - объедините распределение курьеров в реальном времени и сигналы светофора, чтобы быстро назначить ближайшего, наиболее подходящего курьера.
Такой единый подход позволяет платформе выполнять пространственные и семантические рассуждения в одном запросе. Например, когда пользователь ищет "рис карри", Milvus находит семантически релевантные рестораны и отдает предпочтение тем, которые находятся поблизости, быстро доставляют и соответствуют историческому вкусовому профилю пользователя.
2. Автономное вождение: Более интеллектуальные решения
В автономном вождении геопространственная индексация является основополагающей для восприятия, локализации и принятия решений. Транспортные средства должны постоянно ориентироваться на карты высокого разрешения, обнаруживать препятствия и планировать безопасные траектории - и все это всего за несколько миллисекунд.
В Milvus тип Geometry и индекс RTREE позволяют хранить и запрашивать богатые пространственные структуры, такие как:
Границы дорог (LineString)
Зоны регулирования дорожного движения (Polygon)
Обнаруженные препятствия (Точка).
Эти структуры могут быть эффективно проиндексированы, что позволяет геопространственным данным принимать непосредственное участие в процессе принятия решений ИИ. Например, автономный автомобиль может быстро определить, попадают ли его текущие координаты в определенную полосу движения или пересекаются ли они с запретной зоной, просто с помощью пространственного предиката RTREE.
В сочетании с векторными вкраплениями, генерируемыми системой восприятия, например вкраплениями сцен, которые отражают текущую обстановку за рулем, система Milvus может поддерживать более сложные запросы, например поиск исторических сценариев вождения, аналогичных текущему, в радиусе 50 метров. Это помогает моделям быстрее интерпретировать окружающую обстановку и принимать более эффективные решения.
Заключение
Геолокация - это больше, чем широта и долгота. В приложениях, чувствительных к местоположению, она обеспечивает важный контекст для определения того , где происходят события, как объекты связаны между собой в пространстве и как эти связи определяют поведение системы. В сочетании с семантическими сигналами от моделей машинного обучения геопространственные данные позволяют создавать более богатый класс запросов, которые сложно или неэффективно выразить, если пространственные и векторные данные обрабатываются отдельно.
Благодаря введению поля Geometry Field и индекса RTREE, Milvus объединяет поиск по векторному сходству и пространственную фильтрацию в единый механизм запросов. Это позволяет приложениям выполнять совместный поиск по векторам, геопространственным данным и времени, поддерживая такие варианты использования, как пространственно-ориентированные рекомендательные системы, мультимодальный поиск по местоположению и аналитика с ограничениями по региону или пути. Что еще более важно, она снижает архитектурную сложность за счет отказа от многоступенчатых конвейеров, перемещающих данные между специализированными системами.
По мере того как системы искусственного интеллекта будут приближаться к принятию решений в реальном мире, понимание того, какой контент является актуальным, будет все больше нуждаться в сопряжении с тем , где и когда это важно. Milvus предоставляет строительные блоки для этого класса пространственно-семантических рабочих нагрузок в выразительном и практичном для работы в масштабе виде.
Для получения дополнительной информации о поле Geometry Field и индексе RTREE ознакомьтесь с документацией ниже:
У вас есть вопросы или вы хотите получить подробную информацию о любой функции последней версии Milvus? Присоединяйтесь к нашему каналу Discord или создавайте проблемы на GitHub. Вы также можете заказать 20-минутную индивидуальную сессию, чтобы получить знания, рекомендации и ответы на свои вопросы в Milvus Office Hours.
Подробнее о возможностях Milvus 2.6
Представляем Milvus 2.6: доступный векторный поиск в миллиардных масштабах
Представляем функцию встраивания: Как Milvus 2.6 оптимизирует векторизацию и семантический поиск
Измельчение JSON в Milvus: 88,9-кратное ускорение фильтрации JSON с гибкостью
MinHash LSH в Milvus: секретное оружие для борьбы с дубликатами в обучающих данных LLM
Векторный поиск в реальном мире: как эффективно фильтровать, не убивая отзыв
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word



