Технология LLM и RAG
1. Введение
Эта статья представляет собой краткое введение в технологии LLM и RAG.
Текст содержит упрощения, которые позволяют лучше понять материал широкому кругу читателей. Однако, если вы заинтересованы в глубоком изучении этих технологий, данная статья может оказаться недостаточной.
Некоторые моменты могут быть изложены не совсем точно, хотя в целом они хорошо передают основную идею.
2. Суть технологии RAG
RAG — это аббревиатура от английского Retrieval Augmented Generation. Эта технология дополняет приложения на основе больших языковых моделей (LLM, Large Language Model).
Цель RAG — предоставить возможность работать с базами знаний и информацией, которой нет в самой языковой модели. Большая языковая модель представляет собой нейронную сеть, обученную на больших объемах данных, которые обычно доступны в интернете. Благодаря этому, такие модели могут общаться почти как люди и отвечать на вопросы.
Однако, для работы с внутренними данными компании, которые не являются публичными, RAG позволяет моделям получать доступ к внешним источникам информации, дополняя свои ответы актуальными данными.
3. Ограничения LLM
На текущем этапе развития LLM невозможно напрямую обучить модель корпоративной информации. Современные приложения работают следующим образом: разработчики создают языковые модели, затем обучают их, настраивая миллионы или даже миллиарды параметров с помощью обучающих данных. Этот процесс включает задавание вопросов модели, получение ответов и последующую корректировку параметров на основе качества ответов.
Конечно, всё это осуществляется с помощью программ и алгоритмов, а не вручную. В нынешних условиях этот процесс может занимать несколько месяцев и требует огромных энергетических ресурсов, сопоставимых с энергопотреблением небольшого города. Для выполнения тонкой настройки используются тысячи машин, работающих параллельно.
4. Характеристики моделей LLM
После завершения обучения модель можно скачать и запустить на своей машине. Сама модель обычно занимает 1-2 ГБ данных. После этого нейронная сеть больше не изменяется и не обучается новому. Чтобы модель усвоила что-то новое, необходимо выпустить её обновлённую версию.
5. Применение технологии RAG
Тем не менее, мы хотим использовать возможности LLM внутри компании. Наша цель — чтобы эта нейронная сеть могла давать ответы, учитывая внутреннюю информацию компании, когда мы задаем вопросы.
Представьте, что в компанию приходит новый сотрудник, который ничего о ней не знает. Прежде чем задавать ему вопросы о компании, мы сначала обучаем его, предоставляя необходимую информацию. Этот сотрудник усваивает её, и она становится частью его знаний.
6. Принцип работы RAG
Представьте, что человек сосредотачивается на работе, забывая обо всём остальном, когда идёт домой, и хранит специфическую для компании информацию отдельно. Аналогично работает модель LLM и технология RAG.
Мы сохраняем информацию, которой нет в нейронной сети LLM, в отдельной базе данных. Причина проста: эту информацию нельзя интегрировать напрямую в нейронную сеть или её модель, поскольку она является частной и конфиденциальной. Мы не всегда знаем, как эти данные структурированы, и они не обязательно могут быть изменены в текущем виде программы.
Можно сказать, что у нас нет "исходного кода" этих данных — не в смысле программного кода, а оригинальной формы этих данных.
7. Характеристики модели LLM
После нескольких этапов обработки модель становится относительно небольшим набором данных объёмом около 1 ГБ. Хотя этот размер может показаться небольшим по сравнению с другими данными, для LLM это считается компактным. Однако на этом этапе модель, скорее всего, уже не подлежит изменениям.
8. Использование векторных баз данных
Если мы хотим сохранить собственную информацию в отдельной базе данных, обычно используем векторные базы данных. Векторная база данных — это специализированное приложение, которое способно определять расстояние между двумя фрагментами текста. Оно оценивает, насколько эти тексты связаны по смыслу и сколько у них общих ключевых слов.
9. Подготовка базы знаний
Мы разбиваем базу знаний, доступную в компании, на небольшие фрагменты текста. Обычно эти фрагменты составляют около тысячи символов и формируют отдельные записи. Между ними предусмотрено небольшое перекрытие: каждый следующий фрагмент начинается немного раньше окончания предыдущего. Это помогает сохранить контекст и непрерывность в тексте.
10. Алгоритм встраивания
Мы помещаем каждый из этих текстовых фрагментов в базу данных и используем алгоритм встраивания, чтобы присвоить им векторы. Вектор — это последовательность чисел, аналогичная GPS-координатам.
По сути, этот вектор представляет собой пространственную координату текста, но это пространство многомерное, а не трёхмерное.
11. Работа RAG для вопросов
Когда пользователь задает вопрос приложению, разработанному с использованием технологии RAG, этот вопрос также преобразуется в вектор.
Система встраивания определяет положение этого вопроса в многомерном пространстве.
Затем мы обращаемся к векторной базе данных, в которой хранятся векторы всех наших текстовых фрагментов, чтобы выяснить, какие из них находятся ближе всего к заданному вопросу в этом пространстве.
12. Расчет расстояния между векторами
Этот процесс включает вычисление расстояния и индексирование. Если представить, это похоже на расчёт расстояния по теореме Пифагора в ортогональном векторном пространстве. Хотя это может звучать сложно, нам не обязательно разбираться в деталях или знать, как это работает на уровне формул.
13. Характеристики алгоритма встраивания
Основная идея заключается в том, что алгоритм встраивания обычно также основан на нейронной сети. Существуют более простые алгоритмы встраивания, но они менее эффективны на практике. Более сложные алгоритмы встраивания, основанные на нейронных сетях, выполняют эту задачу с учётом особенностей языка.
14. Выбор релевантных кусков текста
Векторная база данных определяет, какие фрагменты текста из нашей базы знаний наиболее близки к вопросу и, следовательно, являются релевантными для ответа.
15. Сборка промпта
После этого мы формируем промпт для LLM, добавляя перед основным вопросом те фрагменты текста, которые были извлечены из нашей базы знаний. Весь текст сразу включить невозможно, так как это было бы слишком много, но мы можем добавить несколько фрагментов — пять, шесть, семь или даже десять.
В промпте указываем, что это контекст, в рамках которого мы хотим получить ответ, а затем задаём сам вопрос.
16. Резюме процесса RAG
Затем мы передаем сформированный промпт алгоритму LLM, который его обрабатывает и генерирует ответ.
Вот и всё. Процесс RAG настолько прост. Вам нужна векторная база данных, и нужно разделить текст на фрагменты. Для тех, кто знаком с программированием, это не представляет большой сложности.
Текст следует сохранить в обычной базе данных, чтобы его можно было извлечь для создания промпта. Векторы сохраняются в векторной базе данных, чтобы определить, какие фрагменты текста релевантны для конкретного вопроса. Также нужно уметь задавать вопросы LLM из программы и использовать стандартные интерфейсы для этого. В заключение, необходимо отправить полученный ответ обратно клиенту или пользователю, чтобы он мог его прочитать.
17. Заключение
С помощью этой технологии мы создали приложение, с которым можно взаимодействовать так же, как с ChatGPT. Однако оно обладает дополнительным преимуществом: помимо знаний о мире, полученных на момент завершения обучения, оно также включает информацию из нашей специальной базы знаний.
Comments
Please leave your comments using Disqus, or just press one of the happy faces. If for any reason you do not want to leave a comment here, you can still create a Github ticket.