## Что такое семантический поиск Семантический поиск находит документы по ==смысловой близости== к запросу, а не по совпадению ключевых слов. Текст преобразуется в числовой вектор ([[Embeddings|embedding]]), и поиск сводится к нахождению ближайших векторов в многомерном пространстве. ```mermaid flowchart LR Q[Запрос] --> E1[Encoder] E1 --> V1[Вектор запроса] D[Документы] --> E2[Encoder] E2 --> V2[Векторы документов] V1 --> S[Similarity Search] V2 --> S S --> R[Результаты] ``` --- ## Способы семантического поиска ### 1. [[Dense Retrieval]] (Embedding-based Search) Текст → плотный вектор → поиск ближайших. Работает с синонимами и перефразировками, но плохо ищет редкие термины. ### 2. [[Sparse Retrieval]] (BM25, SPLADE) Разреженные векторы на основе частоты слов. BM25 — классический лексический поиск, SPLADE — нейросетевое расширение с семантикой. ### 3. [[Hybrid Search]] ==Лучший выбор для production==. Комбинация dense + sparse покрывает слабости обоих методов. ### 4. [[Re-ranking]] Двухэтапный поиск: быстрый retrieval → точный cross-encoder. Значительно повышает качество top-K результатов. ### 5. [[Knowledge Graph Search]] Сущности и связи в графе. Лучше для сложных вопросов о связях между объектами. ### 6. [[ColBERT]] (Late Interaction) Сравнение на уровне токенов. Баланс между качеством cross-encoder и скоростью bi-encoder. ### 7. [[Generative Retrieval]] > [!WARNING] Экспериментальный > LLM напрямую генерирует ID документа. Пока не готово для production. --- ## Сравнение подходов ^comparison Какой способ выбрать — зависит от задачи: | Метод | Семантика | Точные термины | Скорость | Качество | |-------|-----------|----------------|----------|----------| | [[Dense Retrieval]] | +++ | - | ++ | ++ | | [[Sparse Retrieval\|BM25]] | - | +++ | +++ | + | | [[Hybrid Search]] | +++ | ++ | + | +++ | | + [[Re-ranking]] | +++ | ++ | - | ++++ | | [[ColBERT]] | +++ | + | ++ | +++ | | [[Knowledge Graph Search]] | ++ | + | + | ++ | --- ## Рекомендации по выбору ^recommendations > [!TIP] Для RAG-системы > См. [[RAG#Компоненты RAG|рекомендации в RAG]] > [!TIP] Для поиска по документации > 1. [[Sparse Retrieval|BM25]] если термины технические и уникальные > 2. [[Dense Retrieval]] если пользователи формулируют вопросы по-разному > 3. [[Hybrid Search]] — универсальный выбор --- ## Векторные базы данных ^vector-databases Где хранить векторы для поиска: | База | Тип | Гибридный поиск | Особенности | |------|-----|-----------------|-------------| | **Qdrant** | Self-hosted / Cloud | + | Rust, быстрый, богатая фильтрация | | **Pinecone** | Managed | + | Serverless, простой старт | | **Weaviate** | Self-hosted / Cloud | + | GraphQL API, модули ML | | **Milvus** | Self-hosted | + | Масштабируемый, GPU | | **ChromaDB** | Embedded | - | Для прототипов, Python-native | | **pgvector** | PostgreSQL extension | - | Если уже есть Postgres | | **FAISS** | Library | - | Facebook, только in-memory | --- ## Связанные страницы - [[RAG]] — Retrieval-Augmented Generation - [[Embeddings]] — Векторные представления - [[LLM]] — Языковые модели