Быстрый рост искусственного интеллекта (ИИ) и больших данных произвел революцию в различных секторах, что привело к новаторским достижениям в области технологий, исследований и процессов принятия решений. Алгоритмы и модели ИИ в сочетании с огромными объемами данных позволили организациям извлекать ценные идеи, делать точные прогнозы и автоматизировать сложные задачи.

Однако растущий объем, скорость и разнообразие данных создали серьезные проблемы с точки зрения хранения, поиска и анализа. Это привело к необходимости в более эффективных и масштабируемых решениях, обычно для этой задачи достаточно использования современных баз данных без SQL с архитектурой больших данных, но из-за свойств данных, обрабатываемых ИИ, остается много недостатков, что приводит к появлению векторные базы данных.

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

Проблемы с традиционными базами данных

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

Ограниченная поддержка многомерного векторного индексирования

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

Отсутствие собственных векторных операций

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

Сложность масштабирования с многомерными данными

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

Ограниченная оптимизация для векторного поиска

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

Мотивация к творчеству

Системы рекомендаций

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

Поиск изображения

Платформы поиска изображений, такие как объектив Google и фильтрация изображений, пытаются найти изображение, наиболее близкое к искомому, или лучшее изображение, которое соответствует определенным ограничениям, при этом изображение, конечно, рассматривается как двумерный вектор реальных значений. Проблема здесь в том, что изображения часто Если им присвоено строковое название или идентификатор для их распознавания, выполнение большой операции распознавания будет означать извлечение изображений из базы данных и последующую передачу их в модель ИИ, что занимает много времени. многие традиционные базы данных хранят неструктурированные данные в двоичном представлении, это ничего не говорит ни об особенностях данных, ни о их закономерностях. это в основном создание памяти только для чтения, полезной только для хранения данных без каких-либо других преимуществ. Не лучше ли хранить неструктурированные данные (изображения) в формате, над которым действительно можно выполнять операции, в формате, сохраняющем семантическое значение данных и отображающем их свойства, в формате, избавляющем нас от необходимости загружать все данные в модель, чтобы при поступлении запроса его можно было эффективно обрабатывать?

Долгосрочная память

Общая проблема ИИ, представляющая следующий сценарий. у нас есть база данных, хранящая неструктурированные данные, например, большие последовательности текста, приложение хочет классифицировать тексты в зависимости от критерия, такого как «вредный или невредный текст», мы загружаем данные, мы загружаем алгоритм ИИ и получаем результаты . что, если эта операция избыточна, мы не можем извлекать всю базу данных каждый раз, так что же нам делать, мы могли бы разделить нашу базу данных на базы данных (одна является вредоносным текстом, а другая нет) или просто добавить новое поле (текстовый класс) и он хранит класс. второе решение лучше, однако, если у нас есть миллионы строк (или документов) текста, добавление которого очень дорого, но есть худшее, что если за день мы получим много запросов, все из которых имеют разные критерии, а количество критериев бесконечно (поиск положительных твитов, поиск расистских твитов и т. д.), неудобно добавлять тысячи полей в базу данных. Основная проблема здесь заключается в том, что после того, как мы проведем наш поиск с помощью ИИ, мы не получим от него никакой долгосрочной выгоды, поскольку хранение его результатов дорого и бесполезно. что, если есть формат данных, удобный для поиска шаблонов, формат данных, который может быстро классифицировать данные в зависимости от критериев и без необходимости каждый раз сохранять результаты?

Векторный поиск

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

Вектор запроса

этот шаг вращается вокруг преобразования данного запроса в вектор запроса, который является целью, цель состоит в том, чтобы построить вектор, который обеспечивает наилучшее семантическое представление искомых функций. Для этого существуют различные методы, взятые из NLP, DeepLearning и ML, такие как TF-IDF (частота термина, обратная частоте документа), Bag-of-Words (BoW), Word Embeddings, последний из которых является наиболее распространенным методом для векторных баз данных.

Расчет расстояния

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

К Поиск

после расчета расстояний следующим подходом будет
простой выбор k ближайших соседей, представляющих результат нашего
запроса. На рис. 6 у нас есть двумерные элементы pi и вектор запроса
.{ p2, p3, p6, p9, p10} — ближайшие соседи и решение запроса.