RAG-система

Материал из MachineLearning.

Перейти к: навигация, поиск

{{well|Статья написана с использованием LLM DeepSeek-V4 и проверена участником Участник:Dan-Кhaiaa Lakpazhap 18:29, 30 июня 2026 (MSD). Промпт приводится полностью в [[Обсуждение:RAG-система]. }}

Содержание

Retrieval-Augmented Generation ( англ. RAG) — это архитектурный подход в обработке естественного языка и машинном обучении, объединяющий предварительно обученные языковые модели с механизмом доступа к внешней, непараметрической памяти (англ. external memory) — базе знаний или коллекции документов. При генерации ответа модель сначала находит в этой памяти релевантные фрагменты информации (этап retrieval, поиск), а затем на их основе синтезирует итоговый текст (этап generation, генерация). Такой подход позволяет модели использовать актуальные факты, не заложенные в её параметры во время обучения, и существенно снижает частоту галлюцинаций[1]. Идея восходит к концепции открытой доменной вопросно-ответной системы, но в RAG она реализуется как дифференцируемый (англ. differentiable) сквозной процесс, доступный для обучения методами градиентного спуска.

Парадигма RAG заняла центральное место в современных больших языковых моделях (LLM), позволяя им обращаться к документальным источникам без увеличения числа обучаемых параметров. Её используют такие системы, как Microsoft Copilot, ChatGPT с веб-поиском, You.com и многие корпоративные ассистенты.

История и контекст

Предпосылки к появлению RAG возникли при решении задач, требующих опоры на внешние знания (knowledge-intensive tasks): открытый диалог, ответы на вопросы, проверка фактов. Классические нейросетевые модели хранили все знания в своих весах, что ограничивало их объём и делало обновление информации трудоёмким. Параллельно развивались два направления: информационный поиск и генеративные языковые модели. Первые нейронные системы, объединяющие их, — REALM[1] и RAG[1] — были предложены в 2020 году почти одновременно. REALM впервые показал, что поисковый модуль можно предобучить совместно с языковой моделью, а классический RAG от Facebook AI (Meta) популяризировал архитектуру, в которой документы извлекаются дискретно, но генерация ответа использует их как латентную переменную.

В последующие годы появились высокомасштабируемые варианты: RETRO[1] (DeepMind) использовал корпус из триллионов токенов, FiD (Fusion-in-Decoder)[1] предложил обрабатывать множество документов в энкодере-декодере, а Atlas[1] продемонстрировал эффективное малоизвестное обучение с помощью поиска. Параллельно Self-RAG[1] внедрил механизм, при котором модель сама решает, когда необходимо обращаться к поиску.

Постановка задачи и математическая основа

Пусть дан входной запрос x (вопрос, инструкция) и требуется сгенерировать целевой ответ y. Традиционная генеративная модель параметризует распределение p_\theta(y | x) напрямую. В RAG-подходе вводится латентная переменная z — релевантный документ (или несколько документов) из внешней коллекции \mathcal{Z}, которая может быть очень большой (миллиарды записей). Полное распределение маргинализируется по всем возможным документам:

p_\text{RAG}(y | x) = \sum_{z \in \mathcal{Z}} p_\eta(z | x) \, p_\theta(y | z, x),

где:

  • p_\eta(z | x) — вероятностная модель поиска (retriever), выдающая распределение над коллекцией для входного запроса;
  • p_\theta(y | z, x) — генеративная модель (generator), принимающая на вход запрос и извлечённый документ.

Поскольку прямое суммирование по всей коллекции вычислительно невозможно, на практике ограничиваются k наиболее вероятными документами, полученными с помощью приближённого поиска (например, по максимальному внутреннему произведению, MIPS):

p_\text{RAG}(y | x) \approx \sum_{z \in \text{top-}k(p_\eta(\cdot | x))} p_\eta(z | x) \, p_\theta(y | z, x).

Генератор может использовать один документ (RAG-Sequence) или для каждого сгенерированного токена выбирать свой документ (RAG-Token). Последнее формализуется как:

p_\text{RAG-Token}(y | x) = \prod_{t} \sum_{z \in \text{top-}k} p_\eta(z | x) \, p_\theta(y_t | y_{<t}, z, x).

В современных реализациях чаще применяют детерминированный подход: несколько релевантных фрагментов просто конкатенируются с запросом, образуя расширенный контекст, а генератор p_\theta обучается как стандартная авторегрессионная модель на таких расширенных последовательностях.

Архитектура

Типичная RAG-система состоит из трёх ключевых компонентов.

Модуль поиска (Retriever)

Чаще всего используется двухкодировщик (dual encoder), отдельно преобразующий запрос x и каждый документ z в векторы фиксированной размерности d: \mathbf{q} = E_Q(x), \mathbf{d} = E_D(z). Релевантность оценивается как скалярное произведение (или косинусное сходство): \text{sim}(x, z) = \mathbf{q}^\top \mathbf{d}. Модели поиска могут быть обучены на основе BERT-подобных энкодеров, например, DPR (Dense Passage Retrieval)[1]. Для ускорения поиска по многомиллионным коллекциям применяются библиотеки приближённого поиска ближайших соседей, такие как FAISS или ScaNN. Альтернативой плотному поиску служит разреженный (например, BM25), иногда используемый гибридно[1].

База знаний (внешняя память, англ. external memory)

Документы могут быть произвольными текстовыми сегментами (абзацы, статьи, таблицы), предварительно векторизованными и проиндексированными. Источниками служат Википедия, веб-страницы, корпоративные документы, графы знаний. Индексация может обновляться независимо от обучения генератора, что обеспечивает фактическую актуальность системы.

Генератор (Generator)

Генеративная часть p_\theta — это обычно предварительно обученная модель архитектуры encoder-decoder (T5, BART) или decoder-only (GPT, LLaMA). Документы либо подаются в энкодер вместе с запросом (FiD-стиль), где каждый документ обрабатывается отдельно, а результаты объединяются в декодере, либо конкатенируются с запросом в единый промпт для декодера. Второй вариант проще в реализации и доминирует в коммерческих приложениях, но объём контекстного окна (англ. context window) ограничивает количество документов.

Обучение

Возможны несколько стратегий обучения компонентов RAG.

  • Совместное сквозное обучение (end-to-end): веса и ретривера, и генератора обновляются одновременно. Так как выборка из дискретного набора документов недифференцируема, используют методы оценки градиентов, такие как REINFORCE или подход на основе латентных переменных, где градиент распространяется через маргинальное правдоподобие \log p(y|x) и параметры \eta обновляются путём взвешивания правдоподобий документов из top-k. RAG и REALM показали эффективность такого обучения[1][1].
  • Замораживание ретривера (frozen retriever): используется готовый, предварительно обученный поисковый модуль (например, на основе DPR или даже BM25), а генератор дообучается на задачах с извлечёнными документами. Это снижает вычислительные затраты и упрощает масштабирование. Так обучался Atlas[1], где ретривер периодически «освежается» асинхронно.
  • Многоэтапное обучение: сначала независимо тренируется поисковый модуль на парах запрос-документ, затем обучается генератор на расширенных контекстах, и, наконец, возможно тонкое совместное дотюнивание.

Важный элемент — поддержание качества ретривера при росте индекса: применяется асинхронное переиндексирование документов по мере обновления энкодера[1].

Современные варианты и расширения

  • RETRO (Retrieval-Enhanced TRansfOrmer)[1]: интегрирует поиск в архитектуру трансформера-декодера через блоки chunked cross-attention. Для каждого фрагмента генерируемого текста выбираются близкие соседи из внешней памяти (~2 трлн токенов), и их ключи и значения подаются в дополнительный кросс-внимательный слой.
  • FiD (Fusion-in-Decoder)[1]: обрабатывает каждый документ независимо в энкодере, а затем декодер имеет кросс-внимание ко всем скрытым состояниям сразу, эффективно объединяя информацию из десятков документов.
  • Self-RAG[1]: обучает языковую модель рефлексивно выбирать, нужно ли обращаться к поиску, критически оценивать релевантность найденного и качество собственного ответа, используя специальные токены размышления (reflection tokens).
  • REPLUG[1]: предлагает использовать RAG с закрытыми (black-box) LLM, обновляя лишь отдельный лёгкий ретривер, что снижает зависимость от доступа к параметрам генератора.
  • Мультимодальный RAG[1]: расширяет подход на изображения, видео и смешанные документы.

Применения

RAG-системы стали основой для множества реальных продуктов и исследовательских прототипов:

  • Вопросно-ответные системы: открытые и доменно-специфичные (медицинские, юридические) ассистенты, где критична опора на актуальные источники.
  • Диалоговые агенты и чат-боты: интеграция с корпоративной документацией (Microsoft 365 Copilot), веб-поиском (ChatGPT Browse, Perplexity AI).
  • Генерация с обоснованием (grounded generation): системы, которые не только дают ответ, но и предоставляют цитаты на исходные документы, что важно для научных, финансовых и новостных приложений.
  • Обновляемые знания: RAG позволяет развернуть модель, не переобучая её, обновляя только векторный индекс, — критично для быстро меняющихся новостей, цен, нормативных актов.

Ограничения и вызовы

Несмотря на эффективность, RAG-подход сталкивается с рядом проблем.

  • Качество поиска: ошибки на этапе извлечения напрямую ухудшают ответ. При шумном или нерелевантном документе модель может «поверить» ложной информации.
  • Задержка (latency): поиск по крупномасштабной коллекции добавляет десятки или сотни миллисекунд, что критично для интерактивных приложений. Используются кэширование и приближённые алгоритмы.
  • Контекстное окно: генератор ограничен максимальной длиной входа; обработка многих документов требует либо фильтрации, либо архитектур типа FiD.
  • Конфликт знаний: внутренние знания модели (из предобучения) могут противоречить извлечённой информации, что приводит к непоследовательным ответам. Self-RAG и обучение с подкреплением помогают частично решить эту проблему[1].
  • Обслуживание индекса: непрерывное обновление, удаление дубликатов, обеспечение свежести данных требуют отдельных инженерных решений.

Направления развития

Текущие исследования концентрируются на:

  • повышении эффективности за счёт поиска на лету и инкрементного индексирования;
  • активном поиске (agentic RAG), где модель сама формулирует поисковые запросы и решает, когда остановиться;
  • обучаемых стратегиях агрегации множества найденных фрагментов (например, с использованием графов знаний[1]);
  • уменьшении галлюцинаций через кросс-проверку (cross-checking) найденных источников;
  • гибридных моделях, комбинирующих плотный и разреженный поиск, а также символьные базы знаний (symbolic knowledge bases).

См. также

Примечания

Литература

  • Lewis, P., Perez, E., Piktus, A., Petroni, F., Karpukhin, V., Goyal, N., ... & Kiela, D. Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks // Advances in Neural Information Processing Systems. — 2020. — Т. 33. — С. 9459–9474.
  • Guu, K., Lee, K., Tung, Z., Pasupat, P., & Chang, M. W. REALM: Retrieval-Augmented Language Model Pre-Training // Proceedings of the 37th International Conference on Machine Learning. — 2020.
  • Izacard, G., Grave, E., Joulin, A., & Usunier, N. Leveraging Passage Retrieval with Generative Models for Open Domain Question Answering // Proceedings of the 16th Conference of the European Chapter of the Association for Computational Linguistics. — 2021. — С. 874–880.
  • Borgeaud, S., Mensch, A., Hoffmann, J., Cai, T., Rutherford, E., Millican, K., ... & Sifre, L. Improving language models by retrieving from trillions of tokens // Proceedings of the 39th International Conference on Machine Learning. — 2022.
  • Izacard, G., Lewis, P., Lomeli, M., Hosseini, H., Petroni, F., Schick, T., ... & Grave, E. Atlas: Few-shot Learning with Retrieval Augmented Language Models // arXiv preprint arXiv:2208.03299. — 2022.
  • Asai, A., Wu, Z., Wang, Y., Sil, A., & Hajishirzi, H. Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection // arXiv preprint arXiv:2310.11511. — 2023.
  • Karpukhin, V., Oğuz, B., Min, S., Lewis, P., Wu, L., Edunov, S., ... & Yih, W. T. Dense Passage Retrieval for Open-Domain Question Answering // Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing (EMNLP). — 2020. — С. 6769–6781.
  • Shi, W., Min, S., Yasunaga, M., Seo, M., James, R., Lewis, M., ... & Yih, W. T. REPLUG: Retrieval-Augmented Black-Box Language Models // arXiv preprint arXiv:2301.12652. — 2023.
  • Gao, Y., Xiong, Y., Gao, X., Jia, K., Pan, J., Bi, Y., ... & Wang, H. Retrieval-Augmented Generation for Large Language Models: A Survey // arXiv preprint arXiv:2312.10997. — 2023.
  • Edge, D., Trinh, H., Cheng, N., Bradley, J., Chao, A., Mody, A., ... & Larson, J. From Local to Global: A Graph RAG Approach to Query-Focused Summarization // arXiv preprint arXiv:2404.16130. — 2024.