RAG-система

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

(Различия между версиями)
Перейти к: навигация, поиск
(Новая: '''Генерация с дополненной выборкой''' (англ. ''Retrieval-Augmented Generation'', сокр. '''RAG''') — метод в [[Обработка естес...)
 
(6 промежуточных версий не показаны.)
Строка 1: Строка 1:
-
'''Генерация с дополненной выборкой''' (англ. ''Retrieval-Augmented Generation'', сокр. '''RAG''') — метод в [[Обработка естественного языка|обработке естественного языка]] и [[Машинное обучение|машинном обучении]], объединяющий [[Информационный поиск|информационный поиск]] и [[Языковая модель|генеративные языковые модели]] для создания текстов, основанных на внешних знаниях. В отличие от обычных [[Глубокая нейронная сеть|глубоких нейросетей]], которые полагаются исключительно на информацию, зафиксированную в их параметрах на этапе обучения, RAG-система в момент генерации ответа динамически извлекает релевантные документы из заранее подготовленной базы знаний (например, [[Википедия|Википедии]] или корпоративного хранилища) и использует их как контекст. Это позволяет уменьшить [[Галлюцинация (искусственный интеллект)|галлюцинации]] (вымышленные факты) и актуализировать ответ без переобучения всей модели.
+
{{well|Статья написана с использованием LLM '''DeepSeek-V4''' и проверена участником [[Участник:Dan-Кhaiaa Lakpazhap]] 18:29, 9 июля 2026 (MSD).
 +
Промпт приводится полностью в [[Обсуждение:RAG-система]].
 +
}}
 +
{{TOCright}}
 +
'''Retrieval-Augmented Generation''' ( англ. ''RAG'') — это архитектурный подход в [[Обработка естественного языка|обработке естественного языка]] и [[Машинное обучение|машинном обучении]], объединяющий предварительно обученные [[языковая модель|языковые модели]] с механизмом доступа к внешней, непараметрической памяти (англ. external memory) — базе знаний или коллекции документов. При генерации ответа модель сначала находит в этой памяти релевантные фрагменты информации (этап ''retrieval'', поиск), а затем на их основе синтезирует итоговый текст (этап ''generation'', генерация). Такой подход позволяет модели использовать актуальные факты, не заложенные в её [[Параметр (машинное обучение)|параметры]] во время обучения, и существенно снижает частоту [[Галлюцинация (искусственный интеллект)|галлюцинаций]]<ref name="lewis2020">{{статья |автор=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}}</ref>. Идея восходит к концепции открытой доменной вопросно-ответной системы, но в RAG она реализуется как [[Дифференцируемое программирование|дифференцируемый]] (англ. differentiable) сквозной процесс, доступный для обучения методами [[Градиентный спуск|градиентного спуска]].
-
Метод был предложен в 2020 году Патриком Льюисом и коллегами из Facebook AI Research (ныне Meta AI){{sfn|lewis2020}} и с тех пор стал одной из ключевых парадигм современного [[Глубокое обучение|глубокого обучения]], особенно в задачах, требующих фактологической точности: [[Вопросно-ответная система|вопросно-ответных системах]], [[Диалоговая система|диалоговых агентах]] и инструментах для автоматического реферирования. Архитектура RAG находится на стыке [[Статистика|статистики]] и машинного обучения: она опирается на вероятностное моделирование последовательностей, но вводит дискретный латентный механизм доступа к памяти, оптимизируемый сквозным образом (англ. ''end-to-end'').
+
Парадигма RAG заняла центральное место в современных больших языковых моделях ([[Большая языковая модель|LLM]]), позволяя им обращаться к документальным источникам без увеличения числа обучаемых параметров. Её используют такие системы, как [[Microsoft Copilot]], [[ChatGPT]] с веб-поиском, [[You.com]] и многие корпоративные ассистенты.
-
== Основная идея ==
+
== История и контекст ==
-
Представьте себе студента на экзамене, которому разрешено пользоваться библиотекой. Он может не помнить точную дату исторического события, но способен быстро найти нужный учебник, прочитать абзац и сформулировать грамотный ответ. RAG работает аналогично: генеративная [[Трансформер (модель машинного обучения)|трансформерная]] модель (студент) получает от поискового модуля несколько релевантных отрывков (учебников) и на их основе генерирует итоговый текст. Такой подход позволяет «отвязать» знания от параметров сети: факты хранятся в явном виде в индексе, и их можно обновлять независимо, просто заменив документы.
+
Предпосылки к появлению RAG возникли при решении задач, требующих опоры на внешние знания (knowledge-intensive tasks): открытый диалог, [[вопросно-ответная система|ответы на вопросы]], проверка фактов. Классические нейросетевые модели хранили все знания в своих весах, что ограничивало их объём и делало обновление информации трудоёмким. Параллельно развивались два направления: [[информационный поиск]] и генеративные языковые модели. Первые нейронные системы, объединяющие их, — REALM<ref name="guu2020">{{статья |автор=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}}</ref> и RAG<ref name="lewis2020" /> — были предложены в 2020 году почти одновременно. REALM впервые показал, что поисковый модуль можно предобучить совместно с языковой моделью, а классический RAG от Facebook AI (Meta) популяризировал архитектуру, в которой документы извлекаются дискретно, но генерация ответа использует их как латентную переменную.
-
С точки зрения машинного обучения, RAG формализует идею ''дополнения языковой модели непараметрической памятью''. Параметрическая часть (генератор) обучается преобразовывать запрос и найденный контекст в ответ, а непараметрическая (индекс документов) выступает в роли внешней базы знаний. Обучение при этом часто происходит сквозным образом: сигнал от ошибки генерации передаётся и в генератор, и в поисковый модуль, заставляя последний находить более полезные документы.
+
В последующие годы появились высокомасштабируемые варианты: RETRO<ref name="borgeaud2022">{{статья |автор=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}}</ref> (DeepMind) использовал корпус из триллионов токенов, FiD (Fusion-in-Decoder)<ref name="izacard2021">{{статья |автор=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}}</ref> предложил обрабатывать множество документов в энкодере-декодере, а Atlas<ref name="izacard2022">{{статья |автор=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}}</ref> продемонстрировал эффективное малоизвестное обучение с помощью поиска. Параллельно Self-RAG<ref name="asai2023">{{статья |автор=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}}</ref> внедрил механизм, при котором модель сама решает, когда необходимо обращаться к поиску.
 +
 
 +
== Постановка задачи и математическая основа ==
 +
Пусть дан входной запрос <tex>x</tex> (вопрос, инструкция) и требуется сгенерировать целевой ответ <tex>y</tex>. Традиционная генеративная модель параметризует распределение <tex>p_\theta(y | x)</tex> напрямую. В RAG-подходе вводится латентная переменная <tex>z</tex> — релевантный документ (или несколько документов) из внешней коллекции <tex>\mathcal{Z}</tex>, которая может быть очень большой (миллиарды записей). Полное распределение маргинализируется по всем возможным документам:
 +
 
 +
<tex>p_\text{RAG}(y | x) = \sum_{z \in \mathcal{Z}} p_\eta(z | x) \, p_\theta(y | z, x),</tex>
 +
 
 +
где:
 +
* <tex>p_\eta(z | x)</tex> — вероятностная модель поиска (retriever), выдающая распределение над коллекцией для входного запроса;
 +
* <tex>p_\theta(y | z, x)</tex> — генеративная модель (generator), принимающая на вход запрос и извлечённый документ.
 +
 
 +
Поскольку прямое суммирование по всей коллекции вычислительно невозможно, на практике ограничиваются <tex>k</tex> наиболее вероятными документами, полученными с помощью приближённого поиска (например, по максимальному внутреннему произведению, MIPS):
 +
 
 +
<tex>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).</tex>
 +
 
 +
Генератор может использовать один документ (RAG-Sequence) или для каждого сгенерированного токена выбирать свой документ (RAG-Token). Последнее формализуется как:
 +
 
 +
<tex>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).</tex>
 +
 
 +
В современных реализациях чаще применяют детерминированный подход: несколько релевантных фрагментов просто конкатенируются с запросом, образуя расширенный контекст, а генератор <tex>p_\theta</tex> обучается как стандартная [[Языковая модель#Авторегрессионные модели|авторегрессионная модель]] на таких расширенных последовательностях.
== Архитектура ==
== Архитектура ==
-
Классическая RAG-система состоит из трёх главных компонентов: модуля поиска (англ. ''retriever''), генератора (англ. ''generator'') и механизма объединения информации.
+
Типичная RAG-система состоит из трёх ключевых компонентов.
=== Модуль поиска (Retriever) ===
=== Модуль поиска (Retriever) ===
-
Задача retriever’а — по входному тексту <tex>x</tex> (например, вопросу пользователя) вернуть <tex>K</tex> наиболее релевантных документов из заранее проиндексированного корпуса <tex>\mathcal{Z}</tex>. Чаще всего используется ''плотный поиск'' (англ. ''dense retrieval''), основанный на архитектуре двух [[Кодировщик-декодировщик|энкодеров]] (англ. ''bi-encoder''):
+
Чаще всего используется двухкодировщик (dual encoder), отдельно преобразующий запрос <tex>x</tex> и каждый документ <tex>z</tex> в векторы фиксированной размерности <tex>d</tex>: <tex>\mathbf{q} = E_Q(x)</tex>, <tex>\mathbf{d} = E_D(z)</tex>. Релевантность оценивается как скалярное произведение (или косинусное сходство):
-
* '''Документный энкодер''' <tex>d(z)</tex> превращает каждый документ <tex>z \in \mathcal{Z}</tex> в вектор фиксированной размерности.
+
<tex>\text{sim}(x, z) = \mathbf{q}^\top \mathbf{d}.</tex>
-
* '''Запросный энкодер''' <tex>q(x)</tex> вычисляет эмбеддинг входного запроса.
+
Модели поиска могут быть обучены на основе [[BERT (языковая модель)|BERT]]-подобных энкодеров, например, DPR (Dense Passage Retrieval)<ref>{{статья |автор=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}}</ref>. Для ускорения поиска по многомиллионным коллекциям применяются библиотеки приближённого поиска ближайших соседей, такие как [[FAISS]] или ScaNN. Альтернативой плотному поиску служит разреженный (например, [[BM25]]), иногда используемый гибридно<ref>{{статья |автор=Ma, Y., Sun, Y., Yu, X., Zhang, Y., & Cohan, A. |заглавие=SPLADE v2: Sparse Lexical and Expansion Model for Information Retrieval |издание=Proceedings of the 44th International ACM SIGIR Conference on Research and Development in Information Retrieval |год=2021}}</ref>.
-
Релевантность оценивается [[Косинусное сходство|косинусным сходством]]:
+
=== База знаний (внешняя память, англ. external memory) ===
-
<tex>p_\eta(z|x) \propto \exp\left( d(z)^\top q(x) \right).</tex>
+
Документы могут быть произвольными текстовыми сегментами (абзацы, статьи, таблицы), предварительно векторизованными и проиндексированными. Источниками служат [[Википедия]], веб-страницы, корпоративные документы, графы знаний. Индексация может обновляться независимо от обучения генератора, что обеспечивает фактическую актуальность системы.
-
Индекс всех документов обычно хранится в виде матрицы, для которой с помощью [[FAISS]] или аналогичных библиотек выполняется поиск приближённых ближайших соседей. Эффективность плотного поиска была продемонстрирована в модели Dense Passage Retrieval (DPR){{sfn|karpukhin2020}}, которая стала стандартным компонентом многих RAG-реализаций.
+
-
 
+
-
В более простых системах могут использоваться разреженные классические методы вроде [[BM25]], однако они не обучаются сквозным образом и обычно уступают плотным аналогам при совместной оптимизации.
+
=== Генератор (Generator) ===
=== Генератор (Generator) ===
-
Генератор — это, как правило, предварительно обученная [[Seq2seq|sequence-to-sequence]] (seq2seq) модель ([[BART]], [[T5]] или авторегрессионный [[GPT]]), которая получает на вход объединённые строку запроса <tex>x</tex> и тексты извлечённых документов <tex>z_1, \dots, z_K</tex>. Её задача — выдать целевую последовательность <tex>y</tex>. В отличие от обычной языковой модели, генератор в RAG учится явно учитывать найденный контекст, что сближает его с архитектурами, читающими текст (англ. ''reading comprehension'').
+
Генеративная часть <tex>p_\theta</tex> — это обычно предварительно обученная модель архитектуры encoder-decoder ([[T5 (языковая модель)|T5]], BART) или decoder-only ([[GPT (языковая модель)|GPT]], LLaMA). Документы либо подаются в энкодер вместе с запросом (FiD-стиль), где каждый документ обрабатывается отдельно, а результаты объединяются в декодере, либо конкатенируются с запросом в единый промпт для декодера. Второй вариант проще в реализации и доминирует в коммерческих приложениях, но объём контекстного окна (англ. context window) ограничивает количество документов.
-
=== Объединение информации ===
+
== Обучение ==
-
Способ, которым генератор использует документы, определяет две базовые разновидности RAG, предложенные в пионерской работе{{sfn|lewis2020}}:
+
Возможны несколько стратегий обучения компонентов RAG.
-
* '''RAG-Sequence''' — использует ''один и тот же'' документ <tex>z</tex> для порождения всей целевой последовательности <tex>y</tex>. Вероятность ответа вычисляется как взвешенная сумма по всем отобранным документам:
+
-
<tex>p_{\text{RAG-Seq}}(y|x) = \sum_{z \in \text{Top-K}(p_\eta(\cdot|x))} p_\eta(z|x) \, p_\theta(y | x, z),</tex>
+
-
где <tex>p_\theta(y|x,z) = \prod_{t} p_\theta(y_t | x, z, y_{<t}).</tex>
+
-
* '''RAG-Token''' — допускает, что разные токены ответа могут опираться на ''разные'' документы. Для каждого генерируемого токена выполняется маргинализация по всем отобранным документам:
+
-
<tex>p_{\text{RAG-Tok}}(y|x) = \prod_{t=1}^{T} \sum_{z \in \text{Top-K}(p_\eta(\cdot|x))} p_\eta(z|x) \, p_\theta(y_t | x, z, y_{<t}).</tex>
+
-
RAG-Token даёт генератору бо́льшую гибкость, но требует больше вычислений. На практике <tex>K</tex> обычно выбирают небольшим (5–10 документов).
+
* '''Совместное сквозное обучение (end-to-end)''': веса и ретривера, и генератора обновляются одновременно. Так как выборка из дискретного набора документов недифференцируема, используют методы оценки градиентов, такие как REINFORCE или подход на основе латентных переменных, где градиент распространяется через маргинальное правдоподобие <tex>\log p(y|x)</tex> и параметры <tex>\eta</tex> обновляются путём взвешивания правдоподобий документов из top-k. RAG и REALM показали эффективность такого обучения<ref name="lewis2020" /><ref name="guu2020" />.
-
== Математическая формализация и обучение ==
+
* '''Замораживание ретривера (frozen retriever)''': используется готовый, предварительно обученный поисковый модуль (например, на основе DPR или даже [[BM25]]), а генератор дообучается на задачах с извлечёнными документами. Это снижает вычислительные затраты и упрощает масштабирование. Так обучался Atlas<ref name="izacard2022" />, где ретривер периодически «освежается» асинхронно.
-
Пусть имеется обучающая выборка пар «запрос – целевой ответ» <tex>\{(x_i, y_i)\}</tex>. RAG максимизирует логарифмическое правдоподобие правильных ответов:
+
-
<tex>\mathcal{L} = -\frac{1}{N}\sum_{i=1}^{N} \log p(y_i | x_i).</tex>
+
-
Ключевой технический вызов — вычисление градиента по параметрам <tex>\eta</tex> поискового модуля. Поскольку суммирование ведётся по документам из топ-<tex>K</tex>, а сам индекс <tex>\mathcal{Z}</tex> может содержать миллионы элементов, сквозное [[Обратное распространение ошибки|обратное распространение]] на все документы вычислительно невозможно. В классической RAG применяется схема с ''асинхронным обновлением индекса'': векторы документов пересчитываются лишь периодически, тогда как запросный энкодер <tex>q(x)</tex> обновляется на каждом шаге градиентным спуском, а градиент через дискретную операцию выбора top-<tex>K</tex> «просачивается» благодаря тому, что <tex>p_\eta(z|x)</tex> входит в итоговую сумму в явном виде как вес. Фактически, модель учится повышать вероятности тех документов, которые приводят к успешной генерации правильного ответа, что реализует форму [[Обучение с подкреплением|обучения с подкреплением]] или контрастивного обучения (англ. ''contrastive learning'') без явного REINFORCE.
+
* '''Многоэтапное обучение''': сначала независимо тренируется поисковый модуль на парах запрос-документ, затем обучается генератор на расширенных контекстах, и, наконец, возможно тонкое совместное дотюнивание.
-
Позднее в моделях REALM{{sfn|guu2020}} и Atlas{{sfn|izacard2022atlas}} использовался полностью сквозной контрастивный loss для retriever’а, где положительными примерами служат документы, содержащие правильный ответ, а отрицательными все остальные. Генератор при этом обучается стандартным методом учителя (англ. ''teacher forcing'') на основе правильно найденных документов.
+
Важный элемент поддержание качества ретривера при росте индекса: применяется асинхронное переиндексирование документов по мере обновления энкодера<ref name="guu2020" />.
-
== Варианты и развитие метода ==
+
== Современные варианты и расширения ==
-
С момента появления оригинального RAG предложено множество усовершенствований, превративших его в обширное семейство методов.
+
* '''RETRO''' (Retrieval-Enhanced TRansfOrmer)<ref name="borgeaud2022" />: интегрирует поиск в архитектуру [[Трансформер (архитектура)|трансформера]]-декодера через блоки chunked cross-attention. Для каждого фрагмента генерируемого текста выбираются близкие соседи из внешней памяти (~2 трлн токенов), и их ключи и значения подаются в дополнительный кросс-внимательный слой.
-
 
+
* '''FiD''' (Fusion-in-Decoder)<ref name="izacard2021" />: обрабатывает каждый документ независимо в энкодере, а затем декодер имеет кросс-внимание ко всем скрытым состояниям сразу, эффективно объединяя информацию из десятков документов.
-
* '''REALM''' (Guu et al., 2020{{sfn|guu2020}}) — предшественник RAG, в котором поиск знаний был встроен в процесс предобучения языковой модели. REALM показал, что сквозное обучение retriever’а улучшает качество ответов на вопросы.
+
* '''Self-RAG'''<ref name="asai2023" />: обучает языковую модель рефлексивно выбирать, нужно ли обращаться к поиску, критически оценивать релевантность найденного и качество собственного ответа, используя специальные токены размышления (reflection tokens).
-
* '''FiD (Fusion-in-Decoder)''' (Izacard & Grave, 2021{{sfn|izacard2021fid}}) — генератор обрабатывает все извлечённые документы независимо кодировщиком, а перекрёстное внимание к ним осуществляется только в декодере. Это позволяет масштабировать количество документов до сотни без взрывного роста вычислительной сложности.
+
* '''REPLUG'''<ref>{{статья |автор=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}}</ref>: предлагает использовать RAG с закрытыми (black-box) LLM, обновляя лишь отдельный лёгкий ретривер, что снижает зависимость от доступа к параметрам генератора.
-
* '''RETRO''' (Borgeaud et al., 2022{{sfn|borgeaud2022}}) — демонстрирует, что механизм поиска можно интегрировать в архитектуру авторегрессионного трансформера через блоки фрагментированного перекрёстного внимания (англ. ''chunked cross-attention'') к ближайшим соседям, извлечённым из гигантского хранилища токенов. RETRO, обладая в 25 раз меньшим числом параметров, сравнялся по качеству с моделью GPT-3.
+
* '''Мультимодальный RAG'''<ref>{{статья |автор=Chen, W., Hu, H., Chen, X., Wang, Z., & Chang, S. F. |заглавие=MuRAG: Multimodal Retrieval-Augmented Generator for Open Question Answering over Images and Text |издание=Proceedings of the 2022 Conference on Empirical Methods in Natural Language Processing |год=2022}}</ref>: расширяет подход на изображения, видео и смешанные документы.
-
* '''Atlas''' (Izacard et al., 2022{{sfn|izacard2022atlas}}) — специализирован на обучении по нескольким примерам (англ. ''few-shot learning''). Совместно обучает ретривер и генератор с контрастивной функцией потерь, достигая высокой точности в задачах закрытого тестирования.
+
-
* '''Self-RAG''' (Asai et al., 2023{{sfn|asai2023}}) — модель обучается самостоятельно определять, ''нужен ли'' поиск для текущего шага генерации, и критически оценивать полезность найденных фрагментов. Это уменьшает число лишних запросов к индексу и повышает точность.
+
-
* '''Corrective RAG''' (Yan et al., 2024{{sfn|yan2024}}) — перед генерацией ответа проверяет релевантность извлечённых документов и, при необходимости, уточняет поисковый запрос, используя знания самой языковой модели.
+
-
* '''REPLUG''' (Shi et al., 2023{{sfn|shi2023}}) — позволяет применять RAG с ''чёрными ящиками'' (англ. ''black-box LLM''), когда доступ к параметрам генератора закрыт. Ретривер обучается отдельно, а генератор вызывается как внешний API.
+
-
* '''Graph RAG''' и многошаговые (англ. ''multi-hop'') варианты — включают в процесс поиска [[Граф знаний|графы знаний]] и итеративное переспрашивание, позволяя системе «рассуждать» с привлечением нескольких фактов.
+
-
 
+
-
Обширный обзор современного состояния области можно найти в работе Gao et al. (2023){{sfn|gao2023survey}}.
+
== Применения ==
== Применения ==
-
RAG-системы нашли применение практически во всех сферах, где требуется фактологически точная генерация текста:
+
RAG-системы стали основой для множества реальных продуктов и исследовательских прототипов:
-
* '''Открытые вопросно-ответные системы''' — ответы на фактологические вопросы в режиме реального времени без тонкой настройки на конкретный домен.
+
* '''Вопросно-ответные системы''': открытые и доменно-специфичные (медицинские, юридические) ассистенты, где критична опора на актуальные источники.
-
* '''Диалоговые агенты и чат-боты''' — поддержка длинных диалогов с доступом к динамически обновляемым документам (техническая документация, базы знаний).
+
* '''Диалоговые агенты и чат-боты''': интеграция с корпоративной документацией (Microsoft 365 Copilot), веб-поиском (ChatGPT Browse, Perplexity AI).
-
* '''Поисковое дополнение''' — генерация развёрнутых ответов прямо на странице результатов поиска (как в Bing Chat).
+
* '''Генерация с обоснованием (grounded generation)''': системы, которые не только дают ответ, но и предоставляют цитаты на исходные документы, что важно для научных, финансовых и новостных приложений.
-
* '''Корпоративный искусственный интеллект''' — анализ внутренних документов компании с соблюдением конфиденциальности: документы хранятся в защищённом индексе, а генеративная модель может быть развёрнута локально.
+
* '''Обновляемые знания''': RAG позволяет развернуть модель, не переобучая её, обновляя только векторный индекс, критично для быстро меняющихся новостей, цен, нормативных актов.
-
* '''Научная и медицинская литература''' — помощь в реферировании, поиске связей между публикациями и составлении обзоров.
+
-
== Преимущества и ограничения ==
+
== Ограничения и вызовы ==
-
'''Преимущества:'''
+
Несмотря на эффективность, RAG-подход сталкивается с рядом проблем.
-
* '''Фактологическая точность.''' Описанные факты можно явно проследить до исходного документа, что снижает вероятность галлюцинаций.
+
* '''Качество поиска''': ошибки на этапе извлечения напрямую ухудшают ответ. При шумном или нерелевантном документе модель может «поверить» ложной информации.
-
* '''Обновляемость.''' База знаний обновляется без переобучения модели (достаточно перестроить индекс).
+
* '''Задержка (latency)''': поиск по крупномасштабной коллекции добавляет десятки или сотни миллисекунд, что критично для интерактивных приложений. Используются кэширование и приближённые алгоритмы.
-
* '''Интерпретируемость.''' Можно показать пользователю, на какой источник опирался ответ.
+
* '''Контекстное окно''': генератор ограничен максимальной длиной входа; обработка многих документов требует либо фильтрации, либо архитектур типа FiD.
-
* '''Эффективность параметров.''' Относительно небольшая генеративная модель, оснащённая ретривером, способна конкурировать с гигантскими языковыми моделями (показано в RETRO{{sfn|borgeaud2022}}).
+
* '''Конфликт знаний''': внутренние знания модели (из предобучения) могут противоречить извлечённой информации, что приводит к непоследовательным ответам. Self-RAG и обучение с подкреплением помогают частично решить эту проблему<ref name="asai2023" />.
 +
* '''Обслуживание индекса''': непрерывное обновление, удаление дубликатов, обеспечение свежести данных требуют отдельных инженерных решений.
-
'''Ограничения:'''
+
== Направления развития ==
-
* '''Качество поиска.''' Если релевантный документ не попал в топ-<tex>K</tex>, ответ может оказаться неверным или устаревшим.
+
Текущие исследования концентрируются на:
-
* '''Зашумлённость контекста.''' Слишком большое количество извлечённых документов может сбить генератор с толку и ухудшить качество.
+
* повышении эффективности за счёт поиска на лету и инкрементного индексирования;
-
* '''Зависимость от индекса.''' Построение и обновление плотного индекса для миллиардов документов требует значительных вычислительных ресурсов и инженерной инфраструктуры.
+
* активном поиске (agentic RAG), где модель сама формулирует поисковые запросы и решает, когда остановиться;
-
* '''Склонность к «копированию».''' Генератор может дословно заимствовать фрагменты из найденных текстов, что нежелательно в задачах реферирования.
+
* обучаемых стратегиях агрегации множества найденных фрагментов (например, с использованием графов знаний<ref>{{статья |автор=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}}</ref>);
-
 
+
* уменьшении галлюцинаций через кросс-проверку (cross-checking) найденных источников;
-
Активные исследования направлены на преодоление именно этих ограничений — через адаптивный поиск, фильтрацию документов и улучшенные стратегии слияния информации.
+
* гибридных моделях, комбинирующих плотный и разреженный поиск, а также символьные базы знаний (symbolic knowledge bases).
== См. также ==
== См. также ==
-
* [[Глубокая нейронная сеть]]
 
* [[Языковая модель]]
* [[Языковая модель]]
-
* [[Трансформер (модель машинного обучения)]]
+
* [[Трансформер (архитектура)]]
* [[Информационный поиск]]
* [[Информационный поиск]]
-
* [[Обучение с учителем]]
+
* [[Вопросно-ответная система]]
-
* [[Галлюцинация (искусственный интеллект)]]
+
* [[Большая языковая модель]]
 +
* [[FAISS]]
 +
* [[BERT (языковая модель)]]
 +
* [[GPT (языковая модель)]]
== Примечания ==
== Примечания ==
-
<references />
+
{{примечания}}
== Литература ==
== Литература ==
-
<span id="lewis2020"></span> '''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 33 (NeurIPS 2020). — 2020. — P. 9459–9474.
+
* {{статья |автор=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}}
-
<span id="karpukhin2020"></span> '''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. — P. 6769–6781.
+
* {{статья |автор=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}}
-
<span id="guu2020"></span> '''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 (ICML). — 2020.
+
* {{статья |автор=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}}
-
<span id="izacard2021fid"></span> '''Izacard G., Grave E.''' 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 (EACL). — 2021. — P. 874–880.
+
* {{статья |автор=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}}
-
<span id="izacard2022atlas"></span> '''Izacard G., Lewis P., Lomeli M., Hosseini L., Petroni F., Schick T., … , Grave E.''' Atlas: Few-shot Learning with Retrieval Augmented Models // arXiv preprint arXiv:2208.03299. — 2022.
+
* {{статья |автор=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}}
-
<span id="borgeaud2022"></span> '''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 (ICML). — 2022.
+
-
 
+
-
<span id="asai2023"></span> '''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.
+
-
 
+
-
<span id="shi2023"></span> '''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.
+
-
 
+
-
<span id="yan2024"></span> '''Yan S.-Q., Gu S., Liu Z., Zhang Y., Yang Y., Hu X.''' Corrective Retrieval Augmented Generation // arXiv preprint arXiv:2401.15884. — 2024.
+
-
 
+
-
<span id="gao2023survey"></span> '''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.
+

Текущая версия

Статья написана с использованием LLM DeepSeek-V4 и проверена участником Участник:Dan-Кhaiaa Lakpazhap 18:29, 9 июля 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.
Личные инструменты