Генерація з доповненням через пошук (англ. Retrieval-Augmented Generation, RAG) — це техніка, що поєднує пошук інформації з її генерацією для створення більш точних і контекстуально релевантних відповідей.
Генерація з доповненою вибіркою інформації надає генеративним моделям штучного інтелекту можливості пошуку інформації.[1] Вона змінює взаємодію з великою мовною моделлю (LLM) так, щоб модель відповідала на запити користувачів, спираючись на визначений набір документів, використовуючи цю інформацію для доповнення даних, отриманих із її власного великого статичного набору навчальних даних. Це дозволяє LLM використовувати інформацію, яка є специфічною для певної галузі, або актуальнішу інформацію.[2] Застосування включають надання чат-ботам доступу до внутрішніх даних компанії або надання фактів лише з авторитетних джерел.[3]
RAG є гібридним підходом у галузі машинного навчання, який підвищує якість генерації тексту шляхом попереднього пошуку релевантної інформації. На відміну від традиційних моделей машинного навчання, які покладаються виключно на вбудовані знання, RAG динамічно витягує інформацію з зовнішніх джерел перед генерацією відповіді
Процес RAG складається з чотирьох основних етапів. Спершу всі дані повинні бути підготовлені та проіндексовані для використання великою мовною моделлю (LLM). Далі кожен запит включає етапи пошуку, доповнення та генерації.
Зазвичай дані, до яких потрібно звертатися, перетворюються на вбудовування (англ. embeddings) для великої мовної моделі (LLM) — числові представлення у вигляді великих векторів. RAG можна застосовувати до неструктурованих (зазвичай текстових), напівструктурованих або структурованих даних (наприклад, графів знань). Ці вбудовування зберігаються у векторній базі даних, що дозволяє здійснювати пошук документів.
Для заданого запиту користувача спочатку викликається механізм пошуку документів, щоб вибрати найбільш релевантні документи, які будуть використані для доповнення запиту. Цей процес порівняння може виконуватися різними методами, залежно від типу індексації, що використовується.
Модель передає цю релевантну отриману інформацію у велику мовну модель (LLM) через інженерію запитів на основі початкового запиту користувача. Новіші реалізації (станом на 2023 рік) також можуть включати спеціальні модулі доповнення, які здатні розширювати запити на кілька доменів, використовувати пам'ять і самовдосконалення для навчання на основі попередніх пошуків.
Нарешті, велика мовна модель (LLM) може згенерувати відповідь, спираючись як на запит, так і на отримані документи. Деякі моделі включають додаткові кроки для покращення результату, такі як повторне ранжування отриманої інформації, вибір контексту та тонке налаштування.
Удосконалення базового процесу, наведеного вище, можна застосовувати на різних етапах потоку RAG.
Ці методи зосереджені на кодуванні тексту у вигляді густих або розріджених векторів. Розріджені вектори, які використовуються для кодування ідентичності слова, зазвичай мають довжину словника та майже повністю складаються з нулів. Густі вектори, які використовуються для кодування значення, значно менші та містять набагато менше нулів. Можна зробити кілька покращень у способі розрахунку подібностей у векторних сховищах (базах даних).
Ці методи спрямовані на покращення якості звернень із векторної бази даних:
Переробивши мовну модель з урахуванням механізму пошуку (англ. retriever), можна створити мережу, яка у 25 разів менша за розміром, але має порівняльний рівень заплутаності (англ. perplexity) з набагато більшими моделями. Оскільки ця модель (Retro) навчається з нуля, її реалізація вимагає високих витрат на навчання, яких уникала початкова схема RAG. Гіпотеза полягає в тому, що, надаючи знання про домен під час навчання, Retro потребує менше уваги до домену і може зосередити свої обмежені ресурси ваг лише на мовній семантиці. Тут показано перероблену мовну модель.
Було повідомлено, що Retro не є відтворюваним, тому були внесені зміни для забезпечення відтворюваності. Більш відтворювана версія називається Retro++ і включає RAG у контексті.
Розбиття на фрагменти включає різні стратегії поділу даних на вектори, щоб механізм пошуку міг знаходити в них деталі.
Три типи стратегій розбиття на фрагменти:
Якщо зовнішнє джерело даних є великим, пошук може бути повільним. Використання RAG не повністю усуває загальні виклики, з якими стикаються великі мовні моделі (LLM), зокрема галюцинації.