От слов к числам: зачем нужны векторы

Векторные базы и эмбеддинги · Урок 1 / 20

Совпадение слов — плохой заменитель совпадения смысла

Классический поиск построен на инвертированном индексе: документ разбирается на токены, для каждого токена хранится список документов, релевантность считается формулой вроде BM25 — чем реже слово в коллекции и чем чаще оно в документе, тем больше вклад. Это работает, пока запрос и документ написаны одними и теми же словами. Запрос «как вернуть покупку» и статья «оформление возврата товара» не пересекаются ни одним значимым токеном. Документ не окажется на десятом месте — он не попадёт в выдачу вообще, потому что его там физически нет.

Где именно ломается лексический поиск

  • Синонимия. «Машина», «автомобиль», «авто» — три токена и один объект. Словари синонимов чинят это, но их ведут руками, и они не переносятся между доменами.
  • Перефразировка. Пользователь спрашивает глаголами («не приходит письмо»), документ назван существительными («доставка уведомлений»). Пересечение — ноль.
  • Морфология и словоформы. Стемминг чинит окончания, но не чинит «оплата не прошла» против «списание отклонено».
  • Многословные понятия. «Отказ в проведении платежа» — четыре токена, каждый по отдельности шумный, вместе они значат одно.

Идея замены: перевести объект в числа

Эмбеддинг — функция, переводящая объект (фрагмент текста, картинку, товар, пользователя) в вектор фиксированной длины: список из 256, 384, 768 или 1536 чисел с плавающей точкой. Модель обучена так, что объекты, считавшиеся похожими в её обучающих данных, получают близкие векторы. После этого вопрос «похожи ли два текста» превращается в вопрос «чему равно одно число, посчитанное по двум массивам» — операцию, которую процессор выполняет за наносекунды и умеет делать пакетами по миллиону.

запрос  ──► эмбеддер ──► [0.021, -0.113, ... , 0.008]   768 чисел
                                  |
                                  v  сравнение с векторами документов
док A   ──► эмбеддер ──► [ ... ]      близость 0.81
док B   ──► эмбеддер ──► [ ... ]      близость 0.34

Что это меняет в архитектуре поиска

Лексический индекс отвечает на вопрос «в каких документах встречаются эти токены». Векторный индекс отвечает на принципиально другой: «какие документы ближе всего к этой точке». Второй вопрос возвращает ответ всегда. На бессмысленный запрос, на запрос не по теме коллекции, на пустую строку — вы получите топ-10 с какими-то оценками близости. Лексический поиск умеет молчать, векторный не умеет. Пустая выдача — полезный сигнал; десять нерелевантных документов с оценкой 0.62 — не сигнал, и отсекать их придётся порогом, который установите вы, а не модель.

Инсайт. Эмбеддинг кодирует не смысл вообще, а то понимание сходства, которое сложилось у модели на её обучающих данных. Если ваша задача считает похожими объекты, которые модель разводила по разным углам пространства, никакая настройка индекса это не исправит.
Частая ошибка. Считать, что векторный поиск заменяет лексический. Точные идентификаторы — артикулы, коды ошибок, номера версий, фамилии — векторная модель размывает: SKU-4471 и SKU-4472 для неё почти одно и то же, а для склада это разные вещи.
Про-совет. До того как строить индекс, соберите 30 реальных запросов и для каждого руками отметьте документ, который обязан найтись. Этот список пригодится в каждом следующем уроке и окупит потраченный час десять раз.

Шпаргалка

  • Лексический поиск ищет токены, векторный — ближайшие точки; это разные вопросы к данным.
  • Эмбеддинг — вектор фиксированной длины, обычно 256-1536 чисел.
  • Векторный поиск всегда возвращает результат, даже когда правильный ответ — «ничего нет».
  • Размеченный набор запросов заводят до индекса, а не после первой жалобы.
1. Почему запрос «как вернуть покупку» не находит статью «оформление возврата товара» в лексическом индексе?
2. Чем векторный поиск структурно отличается от лексического по поведению на плохом запросе?
3. Что означает утверждение, что эмбеддинг кодирует не смысл вообще?

🔒 Ответьте на вопрос верно, чтобы перейти к следующему уроку.

От слов к числам: зачем нужны векторы — Векторные базы и эмбеддинги — Skilvy