Обзор
С помощью нейросетевой модели глубокого обучения неструктурированные данные, такие как изображения, видео, голоса и тексты, могут быть преобразованы в векторы признаков. Помимо структурированных векторов, к этим данным часто нужно добавлять другие атрибуты. Например, для изображений лиц могут быть добавлены такие теги, как пол, необходимость носить очки и время захвата изображения; для текстов могут быть добавлены такие теги, как тип языка, классификация корпуса и время создания текста.
В прошлом люди обычно сохраняли векторы признаков в структурированной таблице атрибутов меток. Однако традиционные базы данных не могут эффективно искать массивные многомерные векторы признаков. В настоящее время необходима база данных векторов признаков для эффективного хранения и извлечения векторов признаков.
решение
Milvus — это векторный поисковик, с помощью которого можно легко добиться высокопроизводительного поиска массивных векторов. В сочетании с традиционными реляционными базами данных, такими как PostgreSQL, он используется для хранения уникального идентификатора Milvus для вектора и соответствующих атрибутов вектора. Результаты поиска вектора Milvus дополнительно запрашиваются в PostgreSQL, и можно быстро получить смешанные результаты запроса.Конкретные решения заключаются в следующем:
Хранение векторов признаков
Сплошная синяя линия на приведенном выше рисунке представляет собой хранимую процедуру вектора признаков гибридного запроса Milvus. Сначала сохраните данные исходного вектора признаков в базе данных векторов признаков Milvus, и Milvus вернет идентификатор, соответствующий каждому исходному вектору данных. Затем сохраните уникальный идентификационный идентификатор и атрибуты меток каждого вектора признаков в реляционной базе данных, такой как PostgreSQL, чтобы завершить хранение векторов признаков и атрибутов меток.
Поиск вектора признаков
Оранжевая сплошная линия на приведенном выше рисунке представляет процесс поиска вектора признаков гибридного запроса Milvus. Введите данные вектора признаков, которые необходимо запросить, в Milvus, Milvus получит идентификатор результата запроса с наибольшим сходством с вектором поиска, использует идентификатор результата для запроса в PostgreSQL и, наконец, получит смешанный результат запроса вектора поиска.
Гибридный запрос Milvus
На этом этапе вам может быть интересно, почему бы не хранить векторы признаков и соответствующие атрибуты непосредственно в реляционной базе данных? Далее мы будем использовать Milvus (версия 0.6.0) дляANN_SIFT1B100 миллионов данных в тесте, чтобы ответить за вас,Ссылка на ссылку.
1. Набор данных собственных векторов
Вектор признаков гибридного запроса Mivus, реализованный на этот раз, извлекается из 100 миллионов данных (128 измерений) в файле базового набора в ANN_SIFT1B. Вектор признаков извлекается из набора запросов при извлечении, предполагая, что набор данных ANN_SIFT1B является вектором признаков лица, и добавляя метки пола, носить ли очки и время захвата изображения к каждому вектору:
# 提取 Base Set 文件中的一亿数据,以用于导入 Milvus
vectors = load_bvecs_data(FILE_PATH,10000000)
# 为向量随机生成性别、是否戴眼镜、图片抓取时间标签
sex = random.choice(['female','male'])
get_time = fake.past_datetime(start_date="-120d", tzinfo=None)
is_glasses = random.choice(['True','False'])
2. Хранение векторов признаков
Импортируйте 100 миллионов данных в Milvus, возвращенные идентификаторы — это уникальный идентификатор представления, соответствующий вектору, сохраните идентификаторы и метку вектора в PostgreSQL, конечно, исходный вектор признаков также можно сохранить в PostgreSQL (необязательно):
# 将一亿原始数据导入 Milvus
status, ids = milvus.add_vectors(table_name=MILVUS_TABLE, records=vectors)
# 将 ids 与向量的标签存入 PostgreSQL
sql = "INSERT INTO PG_TABLE_NAME VALUES(ids, sex, get_time, is_glasses);"
cur.execute(sql)
3. Поиск вектора признаков
Передайте вектор для поиска Милвусу. настраиватьTOP_K
= 10 иDISTANCE_THRESHOLD
= 1 (можно изменить по мере необходимости),TOP_K
представляет 10 лучших результатов с наибольшим сходством между поиском и вектором запроса,DISTANCE_THRESHOLD
Представляет пороговое значение расстояния между вектором запроса и вектором результатов поиска.
ANN_SIFT1B принимает вычисление евклидова расстояния.После того, как параметры установлены, Milvus возвращает идентификаторы результата запроса, использует идентификаторы для запроса в PostgreSQL и, наконец, смешивает результаты запроса.
# 根据 query_location 从 Query set 中提取需要搜索的向量
vector = load_query_list(QUERY_PATH,query_location)
# 向 Milvus 中传入需要搜索的向量 vectors
status, results = milvus.search_vectors(table_name = MILVUS_TABLE,query_records=vector, top_k=TOP_K)
# 利用 Milvus 返回的 results.ids 到 PostgreSQL 中进行查询
sql = "select * from PG_TABLE_NAME where ids = results.ids ;"
Поиск вектора признаков Milvus занимает всего 70 мс при выполнении гибридного запроса по 100 миллионам данных и не более 7 мс для запроса идентификаторов результатов поиска Milvus в PostgreSQL.
В целом, используя базу данных векторов признаков Milvus, можно быстро реализовать гибридный запрос векторных и структурированных данных. Если для векторного запроса используется только традиционная реляционная база данных, не только сложно хранить крупномасштабные векторные данные, но и невозможно выполнить поиск вектора признаков с высокой производительностью.
Время поиска собственного вектора Милвуса | Время поисковых идентификаторов PostgreSQL |
---|---|
70 ms | 1 ms ~ 7 ms |
Суммировать
Эта демонстрация реализует гибридный запрос на основе Milvus. В случае набора данных из 100 миллионов векторов признаков время гибридного запроса не превышает 77 мс.
И на основе простых в использовании функций Milvus, через ссылкуСхема гибридных запросов MilvusПредоставленные инструменты могут легко реализовать смешанный запрос векторных и структурированных данных и лучше удовлетворить потребности бизнеса.
Milvus создает онлайн-сообщество разработчиков, если вы заинтересованы в технических дискуссиях и испытаниях Milvus, добро пожаловатьПрисоединяйтесь к нашему Slack-каналу, в групповое общение.