Qdrant - Vector Database

Named Vectors: Несколько эмбеддингов

У продукта есть фото и описание. У документа - заголовок и текст. Зачем хранить их раздельно? Named vectors позволяют держать всё в одной точке и искать по любой модальности - без дублирования данных.

  • **Visual search в e-commerce:** CLIP embeddings для изображений + text embeddings для описаний, поиск по фото или тексту
  • **Multilingual документы:** вектор на каждый язык, поиск на любом языке без перевода
  • **Медиа-архив:** transcript (Whisper) + audio features + video frames - три вектора, одна точка

Предварительные знания

  • Collections: Creation and Configuration

Зачем несколько векторов на точку

**Named vectors** позволяют хранить несколько векторов в одной точке. Каждый вектор представляет разную модальность или модель: текстовое описание, изображение, аудио, short title, long body - всё в одной точке данных.

**Пример: e-commerce продукт.** У продукта есть название, описание и фото. Без named vectors нужно три отдельные коллекции или три отдельные точки. С named vectors - одна точка с тремя векторами.

СценарийВекторыОписание
Multimodal поискtext + imageИщите по тексту ИЛИ по изображению в одной коллекции
Multilingual поискen + ru + deКаждый язык - своя embedding модель
Многоуровневый текстtitle + bodytitle: быстрая small-модель, body: точная large-модель
Аудио-видео архивtranscript + audio + framesРазные модели для разных модальностей

У вас есть новостные статьи. Хотите искать как по заголовку (быстро, точно), так и по полному тексту (семантически). Как лучше организовать данные?

Настройка коллекции с named vectors

**Создание коллекции с named vectors** - вместо одного объекта vectors передаём словарь, где ключи - имена векторов.

**Важно:** у каждого named vector независимый HNSW индекс. Можно настраивать hnsw_config отдельно для каждого - например, более точный индекс для text, менее точный для вспомогательного image.

**Нельзя добавить новый named vector в существующую коллекцию** без пересоздания. Спроектируйте схему заранее. Если нужно добавить вектор позже - создайте новую коллекцию и перемигрируйте данные.

Вы создали коллекцию с named vector 'text'. Теперь хотите добавить 'image' вектор. Что делать?

Upsert с несколькими векторами

**Upsert с named vectors** - передаём объект вместо массива в поле `vector`. Ключи объекта - имена векторов.

**Частичный upsert:** можно обновить только один вектор, не трогая остальные. Полезно когда изображение продукта изменилось, но текст - нет. Просто не передавайте неизменяемые векторы.

У вас 10 000 продуктов. Генерация text embedding занимает 0.1с, image embedding - 0.5с. Как минимизировать время индексации?

Поиск по named vectors и cross-modal search

**Поиск по конкретному named vector** - указываем `using` параметр. Это выбирает, в каком векторном пространстве искать.

**Cross-modal search** - ищем по одной модальности, получаем результаты с другой. Например: пользователь загружает фото, мы находим продукты и возвращаем их текстовые описания.

**CLIP для true cross-modal:** модели CLIP (ViT-B/32, ViT-L/14) проецируют текст и изображения в ОДНО общее пространство. Это позволяет искать по тексту в image-векторах и наоборот. Обычные text embeddings (OpenAI, BGE) несовместимы с image embeddings.

Пользователь загружает фото собаки и ищет похожих животных в базе. Какой named vector использовать для поиска?

Ключевые идеи

  • **Named vectors** - несколько векторов разных размерностей и метрик в одной точке
  • **Схема фиксируется при создании** - нельзя добавить vector после создания коллекции
  • **Upsert с named vectors** - передать объект `{name1: vec1, name2: vec2}` в поле vector
  • **Поиск** - указать `using: 'vector-name'` для выбора пространства
  • **Cross-modal search** - возможен только при совместимых пространствах (CLIP)
  • Помните hook? Одна точка = весь продукт - без дублирования, с поиском по любой модальности

Что дальше

Named vectors настроены. Теперь - точечная фильтрация результатов через Filter API.

  • Filter API — must/should/must_not - фильтровать по category, price, date
  • Гибридный поиск — Объединить named dense + sparse через prefetch и RRF
  • Группировка результатов — Дедупликация по документу при поиске по чанкам

Вопросы для размышления

  • Какие модальности данных в вашем проекте могут выиграть от named vectors?
  • Как выбрать, какой named vector использовать по умолчанию для вашего основного сценария поиска?
  • Какие trade-offs у хранения image vector в памяти vs на диске при большой коллекции?

Связанные уроки

  • la-02-dot-product
Named Vectors: Несколько эмбеддингов

0

1

Войти