Обработка естественного языка
RAG: Retrieval-Augmented Generation
GPT-4 спрашивают о финансовой отчётности за Q3 2024 - он не знает, его знания старше. Fine-tuning под каждый квартал? Миллионы долларов. RAG: загрузить PDF отчёт в vector DB, при запросе найти релевантные страницы, GPT-4 читает их и отвечает точно. Один раз настроить - работает вечно. Это почему RAG стал стандартом корпоративных AI приложений за 18 месяцев.
- **Notion AI**: RAG по всем документам workspace. При вопросе 'что решили на прошлой встрече' - поиск по meeting notes, краткий ответ с источниками. Весь Notion workspace - знания модели.
- **GitHub Copilot Chat**: RAG по файлам репозитория, issues, PRs. 'Почему этот тест падает' -> retrieval кода + тестов + связанных issues -> GPT-4 анализирует конкретный контекст.
- **Perplexity AI**: real-time web retrieval как RAG. При каждом вопросе - поиск в интернете, retrieval релевантных страниц, генерация ответа с citations. Модель никогда не устаревает.
Предварительные знания
- Embeddings и cosine similarity для семантического поиска
- Что такое LLM и его ограничение knowledge cutoff
- Базовое понимание токенов и context window
Patrick Lewis и появление RAG
2020 год. Patrick Lewis с соавторами из Facebook AI Research (совместно с UCL) публикуют "Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks". Они заметили проблему: знания языковой модели заморожены в её весах в момент обучения, и обновить их можно только дорогим переобучением. Решение - соединить параметрическую память (seq2seq модель BART) с непараметрической (плотный векторный индекс Wikipedia, по которому ищет Dense Passage Retrieval). Модель находит релевантные пассажи и генерирует ответ с опорой на них. На open-domain QA это дало state-of-the-art. Сам термин "RAG" родился именно в этой статье. Спустя несколько лет, с приходом мощных LLM и векторных баз данных, RAG превратился из исследовательской идеи в стандартную архитектуру корпоративных AI-приложений.
Retrieval: от запроса к документам
**RAG** (Lewis et al., Facebook AI, 2020) решает ключевую проблему LLM: знания заморожены в момент pre-training. Вопрос о событии после cut-off date - LLM не знает. Документ который не был в интернете - LLM не знает. RAG: перед генерацией найти релевантные документы, добавить в контекст, генерировать с опорой на них.
**Sparse vs Dense retrieval**: BM25 (sparse) - классический keyword поиск, быстрый, не понимает семантику. Dense retrieval (embedding similarity) - понимает смысл, медленнее. **Hybrid**: BM25 + dense search с RRF (Reciprocal Rank Fusion) - лучшее из обоих. Weaviate, Qdrant, Elasticsearch поддерживают hybrid из коробки.
RAG ищет документы по semantic similarity запроса. Почему dense retrieval лучше keyword search для сложных запросов?
Chunking: разбивка документов
**Chunking** - разбивка документов на фрагменты перед индексацией. Слишком маленькие чанки: теряется контекст, embedding не несёт достаточно информации. Слишком большие: embedding усредняет разные темы, поиск менее точен. Оптимум зависит от задачи и модели.
**Proposition-based chunking**: каждый чанк разбивается на атомарные утверждения. 'Париж - столица Франции. Эйфелева башня построена в 1889.' -> два отдельных proposition. Поиск по propositions точнее поиска по параграфам. RAPTOR (2024): иерархическое суммаризирование и индексация - от leaf chunks до abstract summary.
RAG система возвращает нерелевантные документы. Анализ показывает что чанки слишком большие (3000 токенов). Почему это проблема?
Vector Databases: хранение и поиск embeddings
**Vector database** - специализированная БД для хранения high-dimensional vectors и поиска ближайших соседей (ANN - Approximate Nearest Neighbors). HNSW (Hierarchical Navigable Small World) - основной алгоритм ANN в большинстве современных vector DB.
**Metadata filtering**: vector search + фильтрация по полям документа. Запрос: 'найди документы похожие на этот AND дата > 2024-01-01 AND категория = 'контракт'. Qdrant и Weaviate поддерживают pre-filtering (фильтр до поиска) и post-filtering. Pre-filtering эффективнее при selectivity > 10%.
Компания хочет добавить vector search к существующей PostgreSQL базе. 500K документов. Какой подход?
Reranking: точный отбор из кандидатов
**Bi-encoder** (embedding model) - быстрый: кодирует запрос и документы отдельно, сравнивает cosine similarity. Но теряет fine-grained взаимодействия. **Cross-encoder** (reranker) - медленный, но точный: видит запрос и документ вместе, выдаёт relevance score. Стратегия: bi-encoder для top-100, cross-encoder для финального top-5.
**Практические результаты**: в задачах question answering добавление reranking (top-100 -> cross-encoder -> top-5) повышает EM (exact match) на 5-10% по сравнению с только bi-encoder retrieval. Cohere Rerank улучшает NDCG@10 на 15-25% на стандартных IR бенчмарках.
**Продвинутые техники RAG**: HyDE (Hypothetical Document Embeddings) - сначала сгенерировать гипотетический ответ LLM, затем искать по его embedding. Multi-query retrieval - сгенерировать несколько перефразировок запроса, объединить результаты. FLARE - динамически решать когда делать retrieval в процессе generation.
RAG гарантирует что LLM не будет галлюцинировать - если ответ в документах, модель всегда правильно его воспроизведёт
RAG снижает галлюцинации, но не устраняет. LLM может смешать информацию из документов с параметрическими знаниями, особенно при длинном контексте
Faithfulness - отдельная задача. RAGAS faithfulness метрика и hallucination detection через LLM-judge обязательны в production RAG. 'Lost in the middle' - LLM хуже использует документы в середине контекста.
Почему bi-encoder быстрый но менее точный, а cross-encoder точный но медленный?
Ключевые идеи
- **RAG паттерн**: encode query -> retrieve top-K документов -> augment prompt -> generate. Даёт LLM доступ к актуальным знаниям без fine-tuning.
- **Chunking**: fixed-size (простой), semantic (по смыслу), hierarchical (parent+child). 512-1000 токенов с 10-20% overlap - хороший starting point.
- **Vector DB**: Pinecone (managed, simple), Qdrant (open-source, fast), pgvector (если уже PostgreSQL). Hybrid search (dense + BM25) лучше только dense.
- **Reranking**: bi-encoder retrieval top-100 -> cross-encoder reranking -> top-5 для LLM. +5-10% quality на типичных QA задачах.
- **Продвинутые техники**: HyDE, multi-query, proposition chunking, RAPTOR. RAG не устраняет галлюцинации - нужна faithfulness проверка.
Связанные темы
RAG объединяет IR, NLP и LLM:
- Question Answering — RAG - современный подход к open-domain QA: retrieval заменяет knowledge base, generation заменяет answer extraction
- GenAI System Design — RAG архитектура - ключевой компонент AI-поиска и knowledge management систем
Вопросы для размышления
- RAG pipeline имеет несколько мест где может деградировать качество: chunking, embedding, retrieval, reranking, generation. Как диагностировать на каком шаге проблема?
- Пользователь задаёт вопрос на русском, документы на английском. Как организовать cross-lingual RAG? Переводить вопрос или использовать multilingual embeddings?
- RAG pipeline стоит $0.01 за запрос (embedding + retrieval + generation). При 1M запросов в день - $10K. Какие компоненты можно оптимизировать для снижения стоимости?
Связанные уроки
- nlp-06 — Эмбеддинги предложений на би-энкодере питают поиск
- nlp-15 — LLM - генеративная половина RAG
- nlp-18 — Open-domain QA - прямое применение RAG
- aie-12-rag-fundamentals — Продакшен-паттерны RAG и чанкинг в инженерии
- aie-10-vector-databases — Векторные БД обслуживают поиск ближайших соседей
- ir-04 — Поиск в RAG переиспользует классические идеи ранжированного поиска
- la-15-svd