Векторная база данных что это: хранить смысл, а не текст

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

Векторная база данных что это: хранить смысл, а не текст

Алекс, руководитель команды, поздним вечером сидит один в стеклянной переговорке, лоток входящих завален перепиской за полгода, и найти в ней нужную мысль поиском по словам не получается: он помнит суть разговора, а не точную фразу. Векторная база данных что это: хранилище, в котором записи лежат не только как текст, но и как векторы, числовые отпечатки смысла. Обычная база отвечает на вопрос «где встречается это слово», векторная на вопрос «где говорится о похожем». ИИ-ассистенту она нужна как долговременная память: языковая модель сама ничего не хранит между разговорами, а векторная база хранит факты о Вашем деле и отдаёт их по смыслу вопроса, даже если слова не совпадают ни в одной букве. Спросите «кто хотел смотреть уроки в записи», и база найдёт фразу «Галина уточняла, можно ли проходить курс не в прямом эфире». Обычной базе для этого понадобилось бы совпадение слов, векторной достаточно совпадения смысла. Ниже разберём без кода и формул, как такая база устроена, как она ищет и почему в итоге всё упирается в вопрос, который у Алекса пока висит без ответа: на чьём сервере она стоит.

Чем векторная база отличается от обычной

Обычная база данных хранит текст как последовательность символов и ищет точные совпадения. Спросите её «рассрочка», и она честно найдёт все записи со словом «рассрочка». Запись «клиентка просила разбить платёж на три части» она пропустит: совпадений нет. Для бухгалтерии и складского учёта это правильное поведение: номер счёта нельзя находить «примерно», там нужна точность, а не догадливость.

Рабочая переписка устроена иначе. Одну и ту же мысль Вы формулируете десятью способами и через месяц не вспомните, какими словами говорили. Вернёмся к примеру из начала статьи, он из практики онлайн-школы. В базе лежит фраза: «Галина уточняла, можно ли проходить курс не в прямом эфире». Через два месяца Вы спрашиваете ассистента: «кто хотел смотреть уроки в записи?» Общих слов в этих двух фразах нет вообще. Поиск по буквам вернёт пустоту, и это будет честная пустота: с его точки зрения искать нечего. У Алекса в переговорке та же картина: он ищет обещание, которое сам дал две недели назад, а поиск по словам этого обещания в собственном лотке входящих ничего не находит, потому что тогда он сформулировал мысль иначе.

Векторная база ищет не совпадение слов, а близость смысла. Вопрос про «уроки в записи» и фраза про «курс не в прямом эфире» лежат в ней рядом, потому что рядом их смыслы, и запись про Галину найдётся. Именно так ищет по своей памяти Хермес: её база с векторами стоит на сервере клиента в РФ, а не в чужом облаке.

Что лежит внутри: текст плюс его числовой отпечаток

Каждая запись в векторной базе хранится в двух видах сразу. Первый: сам текст, как он был сказан или написан. Второй: вектор, ряд из сотен или тысяч чисел, который описывает смысл этого текста. Вектор считает языковая модель, и у близких по смыслу фраз ряды чисел получаются близкими. Это похоже на то, как парфюмер переводит запах в координаты формулы: у двух непохожих по названию ароматов координаты могут оказаться рядом, если рядом их запах. Как именно смысл превращается в числа, мы разбираем в обзоре темы память ИИ-ассистента; для понимания базы достаточно самого факта: у каждой записи появляется числовой адрес в пространстве смыслов.

Зачем хранить оба вида? Вектор нельзя прочитать: из ряда чисел не восстановить исходную фразу. Поэтому роли разделены: вектор работает указателем, по которому запись находят, а текст остаётся источником, который ассистент читает и цитирует.

В остальном это обычная таблица на обычном диске. Рядом с текстом и вектором лежат привычные поля: дата, источник, к какому клиенту или проекту запись относится. Никакой отдельной «нейросетевой субстанции» в базе нет, и эта прозаичность нам ещё пригодится.

Как база ищет: ближайшие соседи вместо совпадений

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

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

Самый распространённый алгоритм такого поиска называется HNSW. Юрий Малков и Дмитрий Яшунин предложили строить из векторов многослойную структуру наподобие карты: верхние слои разреженные, как карта страны с одними магистралями, нижние подробные, как план квартала. Поиск спускается сверху вниз, на каждом шаге приближаясь к цели, и по оценке авторов сложность поиска растёт логарифмически: база может вырасти вдесятеро, а путь до нужной записи удлинится лишь на несколько шагов. Для Вас это означает простую вещь: ассистент находит факт среди сотен тысяч записей за доли секунды, и с ростом архива это свойство не теряется.

pgvector: векторная база внутри обычного Postgres

По слову «векторная» легко представить что-то экзотическое, доступное только большим лабораториям. Реальность скромнее. Один из самых распространённых инструментов, pgvector, это расширение PostgreSQL, обычной открытой базы данных, на которой десятилетиями работают банки и интернет-магазины. Расширение добавляет в знакомую базу новый тип колонки, вектор, и умение искать по близости смысла: точным перебором или приближённо, через тот самый HNSW.

Из этой обыденности следуют практические свойства. Векторная память наследует всё, что умеет Postgres: резервные копии, восстановление на момент времени, строгие гарантии сохранности транзакций. Векторы лежат в той же базе, что и остальные данные, рядом с текстами и датами. Документация pgvector называет и предел размерности: до 16 000 чисел в одном векторе. Код проекта открыт и опубликован на GitHub: его можно проверить и развернуть на любом своём сервере.

Для непрограммиста отсюда важен один вывод: векторная база это не закрытая магия провайдера, а проверяемая программа на конкретном сервере. Файлы такой базы можно скопировать, перенести на другой сервер и забрать с собой.

Зачем всё это ИИ-ассистенту

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

Обычная база для этой роли не годится: она нашла бы прошлогоднюю договорённость, только если Вы дословно повторите тогдашнюю формулировку. Векторная снимает это требование, и разговор с памятью становится естественным: спрашивайте как удобно, а не как было записано.

Остаётся вопрос, который стоит задать раньше всех технических: где эта база стоит? Векторная база с памятью о Ваших клиентах, ценах и решениях это файлы на конкретном диске. Если диск принадлежит провайдеру, при уходе Вы оставите накопленное ему. Если сервер Ваш, база уезжает вместе с Вами. У Хермес память устроена по второму принципу: сервер с базой принадлежит клиенту и стоит в РФ.

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

частые вопросы
Чем векторная база данных отличается от обычной?

Обычная база хранит текст и ищет точные совпадения слов: запрос «рассрочка» найдёт только записи со словом «рассрочка». Векторная база хранит рядом с текстом его числовой отпечаток смысла и ищет близкие смыслы: запрос «кто просил разбить платёж» найдёт запись о рассрочке, хотя слова не совпадают ни разу. Для бухгалтерии и учёта точность обычной базы незаменима, а для памяти о живых разговорах нужен именно поиск по смыслу.

Зачем ИИ ассистенту нужна векторная база данных?

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

Что такое pgvector простыми словами?

pgvector это открытое расширение для PostgreSQL, обычной проверенной базы данных. Оно добавляет тип «вектор» и поиск по близости смысла, точный и приближённый. Векторная память на pgvector наследует свойства Postgres: резервные копии, восстановление на момент времени, надёжность транзакций. Код проекта опубликован на GitHub, базу можно развернуть на собственном сервере и забрать целиком: именно так устроена память Хермес.

источники (2)
  1. pgvector: open-source vector similarity search for Postgres · GitHub, pgvector
  2. Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphs · arXiv, Malkov, Yashunin · 2016
Подключить  Честная цена 

Ещё в этой теме

Память ИИ-ассистента: как она устроена и почему обычный ИИ забывает

Ассистент, который помнит Ваше дело

Хермес работает в Telegram и браузере, а её память живёт на Вашем сервере в РФ. Один тариф, 14 дней на то, чтобы передумать.