Векторні бази даних і системи пошуку за ембеддингами
Векторні бази даних — це спеціалізовані бази, оптимізовані для збереження та виконання пошуку подібності у багатовимірних векторах. Вони є фундаментальним компонентом сучасних AI‑додатків, особливо систем RAG (Retrieval-Augmented Generation).
Що таке векторна база даних?
У той час як традиційні бази оптимізовані для точних запитів, векторні бази зосереджуються на пошуку Approximate Nearest Neighbor (ANN).
Основні концепції
Ембеддинг: числове векторне представлення даних (текст, зображення, аудіо).
"Artificial intelligence" → [0.12, -0.45, 0.89, ..., 0.34] (e.g., 1536 dimensions)
Пошук подібності: пошук векторів, найближчих до вектора‑запиту.
query_vector → Top-K most similar vectors
Метрики відстані:
- Cosine Similarity: напрямна подібність.
- Euclidean Distance (L2): геометрична відстань.
- Dot Product: скалярний добуток векторів.
Метрики подібності: детальний аналіз
Cosine Similarity
cos(A, B) = (A · B) / (||A|| × ||B||)
Діапазон значень: [-1, 1]
- 1: однаковий напрям (ідентичні).
- 0: ортогональні (непов’язані).
- -1: протилежні напрямки.
Випадки використання: текстова подібність, семантичний пошук.
Euclidean Distance (L2)
d(A, B) = √(Σ(Aᵢ - Bᵢ)²)
Діапазон значень: [0, ∞)
Випадки використання: подібність зображень, кластеризація.
Dot Product
A · B = Σ(Aᵢ × Bᵢ)
Випадки використання: еквівалентно косинусній подібності для нормалізованих ембеддингів.
Алгоритми індексації
1. Brute Force (Flat Index)
Порівняння запиту з кожним вектором у базі.
Складність: O(n × d)
- n: кількість векторів.
- d: розмірність.
Перевага: 100% точність.
Недолік: дуже повільний для великих датасетів.
2. IVF (Inverted File Index)
Зменшення простору пошуку шляхом поділу векторів на кластери.
Алгоритм:
- Створити центроїди за допомогою K-means.
- Прив’язати кожен вектор до найближчого центроїда.
- Під час пошуку переглядати лише найближчі nprobe кластери.
1Parameters: 2- nlist: Number of clusters (typically √n) 3- nprobe: Number of clusters to search 4 5Trade-off: Higher nprobe → higher accuracy, lower speed.
3. HNSW (Hierarchical Navigable Small World)
Графовий підхід і найпопулярніший метод сьогодні.
Структура:
1Layer 2: o-------o-------o (sparse) 2 | | | 3Layer 1: o-o-o---o-o-o---o-o-o (medium) 4 | | | | | | | | | 5Layer 0: o-o-o-o-o-o-o-o-o-o-o-o (dense)
Параметри:
- M: максимальна кількість з’єднань для кожної ноди.
- ef_construction: кількість кандидатів під час побудови індексу.
- ef_search: кількість кандидатів під час виконання запиту.
Переваги:
- Надзвичайно швидкий пошук: O(log n).
- Високі значення recall.
- Підтримка динамічних вставок/видалень.
4. Product Quantization (PQ)
Зменшення використання пам’яті шляхом компресії векторів.
Метод:
- Розділити вектор на M підвекторів.
- Відобразити кожен підвектор до одного з K центроїдів.
- Зберігати ID центроїдів замість компонентів вектора.
1Original: 1536 dim × 4 bytes = 6KB 2PQ (M=96, K=256): 96 × 1 byte = 96 bytes 3Compression: ~64x
5. Scalar Quantization (SQ)
Перетворення Float32 у Int8.
1Original: 1536 × 4 bytes = 6KB 2SQ8: 1536 × 1 byte = 1.5KB 3Compression: 4x 4## Порівняння популярних векторних баз даних 5 6### Pinecone 7 8**Особливості:** 9- Повністю керований хмарний сервіс. 10- Автоматичне масштабування. 11- Фільтрація за метаданими. 12- Ізоляція простору імен. 13 14**Використання:** 15```python 16import pinecone 17 18pinecone.init(api_key="xxx", environment="us-west1-gcp") 19index = pinecone.Index("my-index") 20 21# Upsert 22index.upsert(vectors=[ 23 {"id": "vec1", "values": [0.1, 0.2, ...], "metadata": {"category": "tech"}} 24]) 25 26# Query 27results = index.query(vector=[0.1, 0.2, ...], top_k=10, filter={"category": "tech"})
Weaviate
Особливості:
- Відкритий код.
- Вбудована векторизація.
- Підтримка GraphQL API.
- Можливість гібридного пошуку (векторний + ключові слова).
Qdrant
Особливості:
- Написаний на Rust для високої продуктивності.
- Розширені можливості фільтрації.
- Індексація payload.
- Підтримка розподіленого розгортання.
Milvus
Особливості:
- Прискорення за допомогою GPU.
- Пошук за кількома векторами.
- Time travel (версіювання).
- Kubernetes-native архітектура.
ChromaDB
Особливості:
- Зручний для розробників і легкий у налаштуванні.
- Режими in-memory + persistent.
- Орієнтований на Python.
- Ідеальний для прототипування.
Порівняльна таблиця
| Функція | Pinecone | Weaviate | Qdrant | Milvus |
|---|---|---|---|---|
| Хостинг | Cloud | Both | Both | Both |
| Масштабованість | Auto | Manual | Manual | Auto |
| Гібридний пошук | ✓ | ✓ | ✓ | ✓ |
| Підтримка GPU | - | - | ✓ | ✓ |
| Ціноутворення | Per vector | Free/Paid | Free/Paid | Free/Paid |
Фільтрація та метадані
Пре-фільтрація vs Пост-фільтрація
Пре-фільтрація:
- Спочатку застосовується фільтр метаданих.
- Виконується векторний пошук у відфільтрованому наборі.
- Перевага: Швидше.
- Недолік: Можлива втрата точності.
Пост-фільтрація:
- Виконати пошук Top-K × множник.
- Застосувати фільтр метаданих до цих результатів.
- Повернути фінальні Top-K.
- Перевага: Краща точність.
- Недолік: Повільніше виконання.
Гібридний пошук
Комбінація Keyword (BM25) + Vector search:
final_score = α × vector_score + (1-α) × keyword_score
Оптимізація продуктивності
Параметри індексу
Оптимальні налаштування HNSW:
1High Recall: M=32, ef=200 2High Speed: M=16, ef=50 3Balanced: M=24, ef=100
Пакетна обробка
1# Poor: Singular insert 2for vec in vectors: 3 index.upsert([vec]) 4 5# Good: Batch insert 6index.upsert(vectors, batch_size=100)
Пул з’єднань
1from pinecone import Pinecone 2 3pc = Pinecone( 4 api_key="xxx", 5 pool_threads=30 # Parallel connections 6)
Приклад архітектури рівня Enterprise
1┌─────────────────────────────────────────────────────┐ 2│ Application │ 3└──────────────────────┬──────────────────────────────┘ 4 │ 5┌──────────────────────▼──────────────────────────────┐ 6│ Vector Search Service │ 7│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 8│ │ Query │ │ Reranker │ │ Cache │ │ 9│ │ Engine │ │ Service │ │ (Redis) │ │ 10│ └─────────────┘ └─────────────┘ └─────────────┘ │ 11└──────────────────────┬──────────────────────────────┘ 12 │ 13┌──────────────────────▼──────────────────────────────┐ 14│ Vector Database Cluster │ 15│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ 16│ │ Shard 1 │ │ Shard 2 │ │ Shard 3 │ │ 17│ └─────────┘ └─────────┘ └─────────┘ │ 18└─────────────────────────────────────────────────────┘
Моніторинг і спостережуваність
Ключові метрики
- Затримка запитів (p50, p95, p99)
- Recall Rate
- QPS (Queries Per Second)
- Розмір індексу
- Використання пам’яті
Пороги оповіщення
1alerts: 2 - name: high_latency 3 condition: p99_latency > 200ms 4 severity: warning 5 6 - name: low_recall 7 condition: recall < 0.9 8 severity: critical 9## Висновок 10 11Векторні бази даних є незамінними компонентами сучасних AI‑застосунків. За умови правильного вибору бази даних, стратегії індексації та оптимізацій ви можете створити високопродуктивні системи семантичного пошуку. 12 13У Veni AI ми пропонуємо корпоративні рішення для векторного пошуку. Звертайтеся до нас із вашими вимогами.
