RAG
Материал из MachineLearning.
(Новая: {{well|Статья написана с использованием LLM '''Claude Opus 4.8''' и проверена участником ~~~~}} {{TOCright}} '''RAG''' (англ. ''retr...) |
|||
| Строка 1: | Строка 1: | ||
| - | {{well|Статья написана с использованием LLM '''Claude Opus 4.8''' и проверена участником [[Участник:Iaroslav Lyakhov|Iaroslav Lyakhov]] | + | {{well|Статья написана с использованием LLM '''Claude Opus 4.8''' и проверена участником [[Участник:Iaroslav Lyakhov|Iaroslav Lyakhov]] 21:21, 5 июля 2026 (MSD)}} |
{{TOCright}} | {{TOCright}} | ||
| - | '''RAG''' (англ. ''retrieval-augmented generation'' - генерация с дополнением извлечёнными знаниями) - архитектурный подход, при котором [[Большая языковая модель|языковая модель]] перед формированием ответа извлекает релевантные документы из внешнего хранилища и использует их как контекст. RAG соединяет '''параметрическую память''' модели (знания в | + | '''RAG''' (англ. ''retrieval-augmented generation'' - генерация с дополнением извлечёнными знаниями) - архитектурный подход, при котором [[Большая языковая модель|языковая модель]] перед формированием ответа извлекает релевантные документы из внешнего хранилища и использует их как контекст. RAG соединяет '''параметрическую память''' модели (знания, «зашитые» в её веса) с '''непараметрической''' (внешняя база, которую можно менять в любой момент). Такой подход повышает фактическую точность ответов, позволяет ссылаться на источники и заметно снижает [[Галлюцинация|галлюцинации]]. Термин введён в работе Facebook AI Research (Lewis et al., 2020). |
== Зачем нужен == | == Зачем нужен == | ||
| - | Знания LLM «заморожены» на момент обучения | + | Знания обычной LLM «заморожены» на момент обучения: их трудно обновлять, а проследить, откуда взялось конкретное утверждение, невозможно. RAG решает сразу несколько проблем: |
| - | * '''Актуальность''' | + | * '''Актуальность.''' Внешнюю базу можно обновлять без переобучения модели. |
| - | * '''Достоверность''' | + | * '''Достоверность.''' Ответ опирается на конкретные документы, которые можно процитировать и проверить. |
| - | * '''Приватность и специализация''' | + | * '''Приватность и специализация.''' К модели подключают закрытые корпоративные или узкопредметные данные, не вливая их в обучающую выборку. |
| - | * '''Экономичность''' | + | * '''Экономичность.''' Не нужно дорогостоящее дообучение под каждую новую коллекцию знаний. |
== Как устроен == | == Как устроен == | ||
| Строка 15: | Строка 15: | ||
=== Индексация (офлайн) === | === Индексация (офлайн) === | ||
| - | # Документы | + | # Документы нарезаются на фрагменты (chunking). |
# Каждый фрагмент кодируется в [[Embedding|векторное представление]] моделью-эмбеддером. | # Каждый фрагмент кодируется в [[Embedding|векторное представление]] моделью-эмбеддером. | ||
| - | # Векторы | + | # Векторы складываются в [[Векторная база данных|векторную базу данных]] (FAISS, Milvus, Qdrant и др.), где по ним можно быстро искать ближайших соседей. |
=== Извлечение и генерация (онлайн) === | === Извлечение и генерация (онлайн) === | ||
| - | # Запрос пользователя кодируется в вектор. | + | # Запрос пользователя кодируется в вектор тем же эмбеддером. |
| - | # По | + | # По близости (обычно косинусной) находятся <tex>k</tex> наиболее релевантных фрагментов - это '''семантический поиск''': ищут по смыслу, а не по точному совпадению слов. |
# Найденные фрагменты добавляются в промпт вместе с вопросом. | # Найденные фрагменты добавляются в промпт вместе с вопросом. | ||
| - | # | + | # Модель генерирует ответ, опираясь на предоставленный контекст, и при необходимости приводит ссылки на источники. |
== Ключевые компоненты == | == Ключевые компоненты == | ||
| - | * '''Ретривер''' (retriever) | + | * '''Ретривер''' (retriever) отвечает за поиск. Разреженный ретривер (например, BM25) ищет по совпадению ключевых слов; плотный (dense) - по близости эмбеддингов и находит смысловые совпадения даже при разных формулировках; на практике часто комбинируют оба (гибридный поиск). |
| - | * '''Реранкер''' (re-ranker) | + | * '''Реранкер''' (re-ranker) переупорядочивает найденных кандидатов более точной, но дорогой моделью, чтобы наверх попали действительно релевантные фрагменты. |
| - | * '''Генератор''' - собственно LLM. | + | * '''Генератор''' - собственно LLM, которая формирует итоговый ответ. |
| - | == | + | == Нарезка и качество поиска == |
| - | + | Качество ответа в RAG во многом определяется поиском: если наверх попали нерелевантные фрагменты, модель ответит по ним же неверно (принцип «мусор на входе - мусор на выходе»). Поэтому важны и способ нарезки документов (слишком мелкие куски теряют контекст, слишком крупные размывают релевантность), и качество эмбеддера, и наличие реранкера. | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | == | + | == Проблемы == |
| - | RAG и [[Дообучение|дообучение]] (fine-tuning) решают разные задачи: дообучение меняет ''поведение'' и ''стиль'' модели, RAG снабжает её ''фактами''. На практике подходы дополняют друг друга. | + | * Ответ ограничен качеством поиска: пропущенный или нерелевантный фрагмент портит результат. |
| + | * Чувствительность к способу нарезки и размеру фрагментов. | ||
| + | * Ограничение длины контекста: в промпт помещается лишь несколько фрагментов. | ||
| + | * Модель может проигнорировать переданный контекст и ответить «из памяти». | ||
| + | |||
| + | == Развитие == | ||
| + | Направление активно развивается: '''agentic RAG''' (модель сама решает, что и когда искать, и делает несколько итераций поиска), '''GraphRAG''' (поиск по [[Граф знаний|графу знаний]], а не только по отдельным фрагментам), итеративное и многошаговое извлечение для сложных вопросов. | ||
| + | |||
| + | == RAG или дообучение == | ||
| + | RAG и [[Дообучение|дообучение]] (fine-tuning) решают разные задачи: дообучение меняет ''поведение'' и ''стиль'' модели, а RAG снабжает её свежими ''фактами''. На практике подходы дополняют друг друга: модель дообучают под формат и тон ответов, а актуальные знания подают через RAG. | ||
== См. также == | == См. также == | ||
| Строка 47: | Строка 53: | ||
== Литература == | == Литература == | ||
| - | * {{статья |автор=Lewis P. и др. | | + | * {{статья |автор=Lewis P. и др. |заглавие=Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks |издание=Advances in Neural Information Processing Systems (NeurIPS) |год=2020 |ссылка=https://arxiv.org/abs/2005.11401}} |
| - | * {{статья |автор=Gao Y. и др. | | + | * {{статья |автор=Karpukhin V. и др. |заглавие=Dense Passage Retrieval for Open-Domain Question Answering |издание=Proc. of EMNLP |год=2020 |ссылка=https://arxiv.org/abs/2004.04906}} |
| + | * {{статья |автор=Gao Y. и др. |заглавие=Retrieval-Augmented Generation for Large Language Models: A Survey |издание=Препринт arXiv:2312.10997 |год=2023 |ссылка=https://arxiv.org/abs/2312.10997}} | ||
[[Категория:Машинное обучение]] | [[Категория:Машинное обучение]] | ||
[[Категория:Анализ текстов]] | [[Категория:Анализ текстов]] | ||
Текущая версия
| | Статья написана с использованием LLM Claude Opus 4.8 и проверена участником Iaroslav Lyakhov 21:21, 5 июля 2026 (MSD) |
|
RAG (англ. retrieval-augmented generation - генерация с дополнением извлечёнными знаниями) - архитектурный подход, при котором языковая модель перед формированием ответа извлекает релевантные документы из внешнего хранилища и использует их как контекст. RAG соединяет параметрическую память модели (знания, «зашитые» в её веса) с непараметрической (внешняя база, которую можно менять в любой момент). Такой подход повышает фактическую точность ответов, позволяет ссылаться на источники и заметно снижает галлюцинации. Термин введён в работе Facebook AI Research (Lewis et al., 2020).
Зачем нужен
Знания обычной LLM «заморожены» на момент обучения: их трудно обновлять, а проследить, откуда взялось конкретное утверждение, невозможно. RAG решает сразу несколько проблем:
- Актуальность. Внешнюю базу можно обновлять без переобучения модели.
- Достоверность. Ответ опирается на конкретные документы, которые можно процитировать и проверить.
- Приватность и специализация. К модели подключают закрытые корпоративные или узкопредметные данные, не вливая их в обучающую выборку.
- Экономичность. Не нужно дорогостоящее дообучение под каждую новую коллекцию знаний.
Как устроен
Типичный конвейер RAG состоит из двух фаз.
Индексация (офлайн)
- Документы нарезаются на фрагменты (chunking).
- Каждый фрагмент кодируется в векторное представление моделью-эмбеддером.
- Векторы складываются в векторную базу данных (FAISS, Milvus, Qdrant и др.), где по ним можно быстро искать ближайших соседей.
Извлечение и генерация (онлайн)
- Запрос пользователя кодируется в вектор тем же эмбеддером.
- По близости (обычно косинусной) находятся
наиболее релевантных фрагментов - это семантический поиск: ищут по смыслу, а не по точному совпадению слов.
- Найденные фрагменты добавляются в промпт вместе с вопросом.
- Модель генерирует ответ, опираясь на предоставленный контекст, и при необходимости приводит ссылки на источники.
Ключевые компоненты
- Ретривер (retriever) отвечает за поиск. Разреженный ретривер (например, BM25) ищет по совпадению ключевых слов; плотный (dense) - по близости эмбеддингов и находит смысловые совпадения даже при разных формулировках; на практике часто комбинируют оба (гибридный поиск).
- Реранкер (re-ranker) переупорядочивает найденных кандидатов более точной, но дорогой моделью, чтобы наверх попали действительно релевантные фрагменты.
- Генератор - собственно LLM, которая формирует итоговый ответ.
Нарезка и качество поиска
Качество ответа в RAG во многом определяется поиском: если наверх попали нерелевантные фрагменты, модель ответит по ним же неверно (принцип «мусор на входе - мусор на выходе»). Поэтому важны и способ нарезки документов (слишком мелкие куски теряют контекст, слишком крупные размывают релевантность), и качество эмбеддера, и наличие реранкера.
Проблемы
- Ответ ограничен качеством поиска: пропущенный или нерелевантный фрагмент портит результат.
- Чувствительность к способу нарезки и размеру фрагментов.
- Ограничение длины контекста: в промпт помещается лишь несколько фрагментов.
- Модель может проигнорировать переданный контекст и ответить «из памяти».
Развитие
Направление активно развивается: agentic RAG (модель сама решает, что и когда искать, и делает несколько итераций поиска), GraphRAG (поиск по графу знаний, а не только по отдельным фрагментам), итеративное и многошаговое извлечение для сложных вопросов.
RAG или дообучение
RAG и дообучение (fine-tuning) решают разные задачи: дообучение меняет поведение и стиль модели, а RAG снабжает её свежими фактами. На практике подходы дополняют друг друга: модель дообучают под формат и тон ответов, а актуальные знания подают через RAG.
См. также
- Большая языковая модель
- Галлюцинации языковых моделей
- Векторное представление (эмбеддинг)
- Векторная база данных
- Промпт-инжиниринг
Литература
- Lewis P. и др. Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks // Advances in Neural Information Processing Systems (NeurIPS). — 2020.
- Karpukhin V. и др. Dense Passage Retrieval for Open-Domain Question Answering // Proc. of EMNLP. — 2020.
- Gao Y. и др. Retrieval-Augmented Generation for Large Language Models: A Survey // Препринт arXiv:2312.10997. — 2023.

