Потому что вся идея RAG заключается в том, чтобы сначала разбить текст на разные куски, а затем сохранить их в векторной базе данных. При фактическом использовании будет рассчитано сходство между вопросом пользователя и текстовым блоком, и будут вызваны первые k фрагментов и вопросы, которые будут объединены для генерации слов-подсказок и ввода в большую модель. и наконец ответ будет получен.
Точки оптимизации:
Оптимизация RAG делится на два направления: оптимизация основных функций RAG и оптимизация архитектуры RAG. О них мы поговорим отдельно.
Чтобы оптимизировать основные функции RAG, нам нужно начать с процесса RAG [1], и на каждом этапе мы можем выполнить соответствующую оптимизацию сцены.
В рабочем процессе RAG можно оптимизировать следующие модули: сегментацию блоков документов, модель внедрения текста, оптимизацию оперативного проектирования и итерацию большой модели. Ниже приводится отдельное описание каждого модуля.
Кроме того, также может быть обработана коллекция блоков документов, вызванных запросом, например, фильтрация метаданных [7] и переупорядочение для уменьшения количества блоков документов [2].
В классической архитектуре RAG для улучшения контекста используются только векторные базы данных. Этот метод имеет некоторые недостатки, такие как невозможность получения сопутствующих знаний на большие расстояния [3] и низкая плотность информации.
Решаема ли эта проблема? Ответ: да. Лучшее решение — добавить KG (стратегию улучшения контекста [Knowledge Graph]) параллельно с векторной библиотекой. Схема ее технической архитектуры примерно следующая [4]:
На рисунке 3 расширение запроса KG реализовано с помощью модуля NL2Cypher. Согласно моей практике, мы можем использовать более простую [технологию выборки графов] для улучшения контекста KG. Конкретный процесс: извлечение объектов в соответствии с запросом, а затем использование объектов в качестве начальных узлов для выборки графа (при необходимости узлы в KG и объекты в запросе могут быть сначала векторизованы, а начальные узлы устанавливаются через [сходство векторов] ]), а затем полученные фрагменты изображений преобразуются в текстовые фрагменты для достижения контекстно-улучшенных эффектов.
На официальном сайте LangChain представлен пример DevOps улучшения приложений RAG с помощью Graph. Заинтересованные читатели могут изучить его подробно [5].
В классической архитектуре RAG (включая KG для улучшения контекста) вызванный контекст без разбора объединяется с запросом, а затем осуществляется доступ к большой модели для вывода ответа. Но иногда вызванный контекст может быть неактуален или противоречить запросу. В этом случае контекст следует отбросить, особенно когда окно контекста большой модели маленькое (сейчас чаще встречаются окна 4k).
Есть ли решение? Ответ снова положительный, лучшее решение — технология Self-RAG. Из-за ограничений места здесь представлен процесс рассуждения. Процесс обучения требует помощи GPT4 для вспомогательной разметки, поэтому я не буду вдаваться в подробности. Подробное описание процесса можно найти в моем кратком изложении Self-RAG [6].
Как показано на рисунке 4, правая часть — это рабочий процесс Self-RAG. Сначала определите, требуется ли извлечение на основе запроса. При необходимости извлекаются несколько отрывков, а затем посредством серии процессов генерируются несколько кандидатов [следующего сегмента]. Наконец, эти сегменты-кандидаты сортируются для создания последнего следующего сегмента.
Процесс вывода Self-RAG относительно прост в обучении, и его алгоритмическое содержание следующее:
Входные данные для процесса рассуждения: подсказка
и заранее сгенерированные
, выходом является сегмент следующего временного шага
. Обратите внимание, что задачей генерации здесь является детализация сегментов, а не детализация токенов, в основном из соображений производительности вычислений.
Во-первых, [Языковая модель] M прогнозирует значение токена получения. Если нет, стандартная парадигма языковой модели определяется выражением
генерировать
,когда
Сборка завершена или прибыла
, затем спрогнозируйте значение токена IsUSE. Если параметр «Получить токен» имеет значение «Да», через Retriever извлекается несколько контекстов, представленных D. Для каждого контекста d сначала спрогнозируйте значение токена IsREL, чтобы выразить, связаны ли контекст и приглашение одновременно, сгенерируйте сегмент следующего временного шага;
. Затем предскажите пары контекста d
Степень поддержки, а затем результат, соответствующий каждому d
Сортируйте и выбирайте лучшие. подожди последнего
В конце генерации прогнозируется значение IsUSE.
Этот раздел включает в себя три режима работы [7], а именно:
1) Полуструктурированный РЭГ (текст + таблица)
Этот режим обрабатывает как текстовые, так и табличные данные. Его основной процесс резюмируется следующим образом [8]:
2) Мультимодальный РАГ (текст+таблица+картинка)
Для мультимодальной РАГ существуют три технических маршрута [10], как показано на рисунке ниже:
Как показано на рисунке 7, существует три технических маршрута для мультимодальной RAG. Ниже мы дадим краткое объяснение:
3) Частный мультимодальный РЭГ (текст+таблица+картинка)
Если безопасность данных является важным фактором, то конвейер RAG необходимо развернуть локально. Например, LLaVA-7b можно использовать для создания сводок изображений, Chroma используется в качестве векторной базы данных, GPT4All от Nomic используется в качестве модели встраивания с открытым исходным кодом, многовекторного поисковика, а LLaMA2-13b-чат в Ollama.ai используется для генерации ответов [11].
Я думал над двумя вопросами: один из них: необходимо ли вызывать контекст через векторную библиотеку каждый раз, когда делается запрос. Во-вторых, используемое нами контекстное окно вывода LLM не будет слишком большим (например, Baichuan2-7B/13B имеет только 4096, модель большого окна Baichuan2-192k, GPT-4 Turbo 128k и Zero-One-Whole Yi с 200k). размер окна получить нелегко), каждый запрос вызывает большой список контекстов, чтобы проверить, подойдет ли он. После расследования выделяются два направления, достойные углубленного изучения:
Типичное приложение RAG будет без разбора обращаться к векторной библиотеке для получения контекста, независимо от того, действительно ли это необходимо. Это может привести к появлению контекста, не относящегося к теме, что приведет к низкому качеству текстового контента. Причина этого заключается в том, что LLM вывода не выполняет адаптивное обучение контексту, чтобы генерируемые результаты соответствовали контекстной семантике. Как показано в левом примере рисунка 1, контекст поиска может привести к возникновению противоречивых точек зрения.
Self-RAG в правой части рисунка 1 может эффективно решить проблему недифференцированного контекста поиска в RAG. Его общий принцип таков:
Приведенное выше описание алгоритма включает в себя ряд специальных токенов, конкретное значение которых следующее:
Как показано на рисунке 2, в Self-RAG есть четыре типа жетонов отражения, которые условно разделены на две категории: «Извлечение» и «Критика». Среди них Critique разделен на три подкатегории: IsREL, IsSUP и IsUSE. Жирный шрифт указывает ожидаемую ценность токена определенного типа.
В первом разделе кратко обобщается принцип работы Self-RAG с точки зрения сценариев применения. В этом разделе подробно анализируется процесс рассуждения Self-RAG. Приведем непосредственно алгоритм вывода следующим образом:
Входные данные для процесса рассуждения: подсказка
x и заранее сгенерированные
, выходом является сегмент следующего временного шага
. Обратите внимание, что задачей генерации здесь является детализация сегментов, а не детализация токенов, в основном из соображений производительности вычислений.
Во-первых, значение токена получения прогнозируется языковой моделью M. Если нет, стандартная парадигма языковой модели определяется выражением
генерировать
,когда
завершить или прибыть
, затем спрогнозируйте значение токена IsUSE. Если параметр «Получить токен» имеет значение «Да», через Retriever извлекается несколько контекстов, представленных D. Для каждого контекста d сначала спрогнозируйте значение токена IsREL, чтобы выразить, связаны ли контекст и приглашение одновременно, сгенерируйте сегмент следующего временного шага;
. Затем предскажите пары контекста d
Степень поддержки, а затем результат, соответствующий каждому d
Сортируйте и выбирайте лучшие. подожди последнего
yгенерировать Заканчиватькогда, предскажи еще раз IsUSE ценить.
Вывод самооценки через токен отражения,Может сделать процесс рассуждения Da Model более управляемым.,от И настройте его поведение так, чтобы оно соответствовало требованиям нескольких сценариев.
Self-RAG предсказывать retrieve token чтобы динамически решать, следует ли получать контекст. В статье середина указывается, что порог может быть задан, когдаRetieve=Да Когда нормализованная вероятность превышает порог, срабатывает действие получения контекста.
в каждом segment step т, если его нужно будет получить, он будет получен K контекст. В статье предлагается метод, основанный на segment Стратегия поиска луча (beam поиск), это луч_размер=Б. Так каждый временной шаг т, мы можем получить top-B segment кандидата и получить лучшее в конце segment последовательность. на временном шаге t когда каждый контекст d Соответствующий segment Формула расчета баллов выглядит следующим образом:
картина 4 в G представлять critique token группа, например ИЗРАИЛЬ. на временном шаге t Когда, Г. оценка за
, самый желанный знак отражения
относительно
разные ценности critique token type G вероятностное значение. картина 4 в
Его можно настроить во время вывода, чтобы настроить поведение процесса тестирования. Например, для пусть
В значительной степени поддержанный контекстом, это может быть дано IsSUP больший вес, придавая другим token Меньший вес, это мягкая линия управления. Путем установки на этапе декодирования критика, мы также можем добавить жесткий контроль, как для. Например, когда большая Модельгенерировать неожиданную token когда (IsSUP=Нет поддержка), вы можете отказаться от Соответствующий segment кандидат.
Self-RAG Процесс обучения состоит из двух моделей: Критик и Генератор. Первый основан на вводе x и вывод y, условноть знак отражения р. Затем мы можем использовать Critic Модель создает новый набор данных (используя автономный метод для записи маркеров отражения в исходный набор данных) и на основе входных данных. x,Приходитьпредсказыватьвыход y и знак отражения r。
При использовании ручного метода для каждого segment Маркировка reflection жетон, это потребует много работы. Поскольку определение, ввод и вывод каждого отражающего знака различны, в этой статье используется GPT-4 для Каждая отражающая метка устанавливает разные данные команды и завершает работу по Маркировке. к Retrieve дляпример , мы можем построить определенный тип данных инструкций, а затем следовать few-shot Образец Я, исходный ввод x и вывод y, мы предскажем подходящую отметку для размышления.
。на Основа Эта идея может для каждого размышления отметить особо 4k~20k полоски размеченных данных, и в целом они Critic model данные обучения.
Получив данные обучения, мы можем построить цель обучения на основе стандартной модели условного языка следующим образом:
В статье отмечается, что модель Critic может быть инициализирована с помощью любой языковой модели, поэтому для инициализации используется та же модель, что и Generator.
Учитывая исходные данные x и вывод да, мы можем использовать ретривер и Critic model Выполните увеличение данных. для каждого segment
доступный Critic model Оцените, необходим ли контекст поиска для улучшения качества текста. Если требуется процесс извлечения, установите Retrive=Да, одновременно запустите ретривер, чтобы получить K контекст. Для каждого контекста Критик model судить об этом x Актуально ли это и предсказать IsREL token ценить. если это связано, то используйте Critic model Далее оцените, поддерживает ли контекст Модельгенерировать контент и предсказывать. IsSUP Далее ценить. IsREL и IsSUP ставить в контекст или считать segment позже. когда завершено y Критик в конце книги model Общая доступность предсказывать token IsUSE. Таким образом, разметка отражения интегрируется в исходный вывод. + Исходные входные данные формируют обучение Generator model расширенные данные. Этот процесс можно описать ниже:
Имея обучающие данные, мы можем построить стандартную следующую отметку, предопределяющую целевую функцию, следующим образом:
Здесь необходимо отметить: Генератор Не только предсказывать вывод, но и предсказать разметку отражения. На этапе обучения нам необходимо получить контекст (картина 6 Китайское использование и прилагаемый контент) и действуйте следующим образом loss рассчитать. Также добавьте маркеры отражения в исходный глоссарий. Критика, Извлечение, для расширения словарного запаса.