Qdrant - Vector Database

FastEmbed: эмбеддинги без GPU

Хотите добавить semantic search в serverless функцию или IoT устройство? С PyTorch это невозможно - 2 GB зависимостей. FastEmbed даёт те же эмбеддинги за 50 MB.

  • Serverless RAG: AWS Lambda + FastEmbed + Qdrant Cloud без PyTorch
  • Edge inference: генерация эмбеддингов на Raspberry Pi для offline поиска
  • Hybrid search без внешних сервисов: BM42 sparse + BGE dense в одном процессе

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

  • Sparse Vectors: BM42 and SPLADE

FastEmbed: ONNX Runtime без PyTorch

**FastEmbed** - Python библиотека от команды Qdrant для генерации эмбеддингов. Главное отличие от transformers/sentence-transformers: работает на **ONNX Runtime** без PyTorch. Это означает: нет зависимостей весом в несколько гигабайт, работает на CPU, подходит для serverless и edge окружений.

Поддерживаемые dense модели (топ-5 для поиска):

МодельРазмерЯзыкDim
BAAI/bge-small-en-v1.5130 MBEN384
BAAI/bge-base-en-v1.5430 MBEN768
nomic-ai/nomic-embed-text-v1.5275 MBEN768
intfloat/multilingual-e5-large560 MBMulti1024
sentence-transformers/paraphrase-multilingual280 MBMulti768

FastEmbed кэширует модели в `~/.cache/fastembed/`. При холодном старте первая загрузка занимает несколько секунд. В production предварительно прогревайте модель или используйте Docker с предзагруженными весами.

Почему FastEmbed подходит для serverless окружений, а sentence-transformers - нет?

Sparse эмбеддинги: BM42, BM25, SPLADE

`SparseTextEmbedding` - отдельный класс FastEmbed для генерации sparse векторов прямо из текста. Поддерживает три алгоритма: **SPLADE** (нейронные sparse), **BM25** (классический TF-IDF), **BM42** (гибрид: attention weights из нейросети + BM25 статистика).

АлгоритмКачество поискаСкоростьДетерминизмРазмер модели
SPLADEВысокоеМедленноНет (нейронная)500+ MB
BM42ХорошееБыстроЧастично100 MB
BM25БазовоеОчень быстроДа< 1 MB (no model)

**BM42** - изобретение команды Qdrant. Идея: использовать attention weights маленькой нейросети (all-MiniLM) для взвешивания токенов вместо чистого TF-IDF. Результат: точность близкая к SPLADE при скорости близкой к BM25. Рекомендуется как default sparse модель.

Чем BM42 отличается от классического BM25?

Production pipeline: FastEmbed + Qdrant

Полный production pipeline: документы → dense + sparse эмбеддинги → hybrid upsert в Qdrant → hybrid search. FastEmbed интегрируется напрямую в `QdrantClient` (Python) через параметр `embedding_model`.

Оптимальный batch size для FastEmbed: **32-128 документов**. Меньше - overhead на вызов модели, больше - риск OOM. Для BGE-small на стандартном сервере: 64 документа за ~200ms на CPU. Для production: benchmark на реальных данных.

Почему в production FastEmbed рекомендуется обрабатывать документы батчами, а не по одному?

Итоги

  • FastEmbed работает на ONNX Runtime — нет зависимости от PyTorch (50 MB vs 2 GB)
  • SparseTextEmbedding поддерживает BM25, BM42 (рекомендуется) и SPLADE
  • BM42 = attention weights нейросети + BM25 статистика: лучшее качество при разумной скорости
  • Оптимальный batch size: 32-128 документов для эффективной CPU векторизации
  • Python: QdrantClient поддерживает embedding_model параметр для прозрачной интеграции

Что дальше

FastEmbed генерирует векторы - теперь нужно эффективно их искать.

  • BM25 и Full-Text Search — Native BM25 в Qdrant - альтернатива без внешнего embedder
  • Universal Query и Prefetch — Как использовать generated vectors в multi-stage поиске
  • Sparse Vectors — Основы: как работают sparse vectors в Qdrant

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

  • В каких случаях BM25 предпочтительнее BM42? Когда детерминизм важнее качества?
  • Как бы вы организовали прогрев FastEmbed модели в serverless функции для минимизации cold start?
  • Если ваши документы на русском языке, какую модель из поддерживаемых FastEmbed вы бы выбрали и почему?

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

  • la-02-dot-product
FastEmbed: эмбеддинги без GPU

0

1

Войти