Знания LLM ограничены данными, которые она видела в процессе обучения. Поэтому ответы на вопросы по актуальным новостям могут быть неполными или неточными. Чтобы решить эту проблему без частого и дорогого дообучения на новых данных, придумали RAG — технику, добавляющую в контекст LLM внешнюю информацию.
*https://www.youtube.com/watch?v=puNE0ELTtc8
**https://300.ya.ru/v_4TIgZwSQ
таймкоды
00:00:00 Введение в LLM
- Большие языковые модели LLM становятся всё более доступными.
- Примеры использования: составление писем, планов, ответы на вопросы, программирование.
- Работа с моделью QN2.5 на 3 миллиарда параметров на видеокарте RTX 4090.
00:00:28 Технические характеристики и тестирование модели
- Видеокарта RTX 4090 с 24 ГБ видеопамяти, половина занята моделью.
- Запуск модели с помощью фреймворка Vail.
- Тестирование модели на вопросы: «Hello, how are you?», «Расстояние между Солнцем и Землёй?», «Захватит ли ИИ наш мир?».
00:01:02 Ограничения моделей и решение проблемы
- Модели ограничены знаниями, полученными в процессе обучения.
- Пример с текущим чемпионом Формулы-1: модель отвечает неверно из-за устаревшей информации.
- Решение: добавление релевантной информации в контекст модели.
00:02:15 Автоматизация поиска релевантной информации
- Возможность автоматизации поиска релевантных документов.
- Сравнение с поисковыми системами Google, Яндекс, Bing.
- Необходимость разработки собственной поисковой системы для личных документов и внутренней документации.
00:02:53 План решения и прототип системы
- Схема ретригментации: вопрос и релевантные документы подаются в языковую модель.
- Прототип системы для ответов на вопросы по научным статьям.
- Использование статьи DeepMind 1 для тестирования.
00:04:10 Обработка документа и чанкирование
- Парсинг PDF-документа в набор символов.
- Чанкирование текста для оптимизации поиска.
- Перекрытие чанков для более плавного перехода смысла.
00:05:14 Алгоритм поиска по словам
- Токенизация текста и подсчёт близости между словами.
- Пример поиска наилучшего чанка для вопросов.
- Ограничения алгоритма и переход к векторному поиску.
00:06:57 Векторный поиск
- Викторизация текстов с помощью модели BERT.
- Подсчёт косинусной близости между текстами.
- Запуск векторного поиска для вопроса о наградах в модели DeepMind 1.0.
00:09:06 Объединение с моделью реранкера
- Модель реранкера оценивает соответствие вопроса и ответа.
- Пример работы модели на парах вопросов и ответов.
- Объединение алгоритма поиска с моделью реранкера для улучшения результатов.
00:09:25 Поиск и ранжирование чанков
- Находим самые близкие чанки к вопросу.
- Собираем десять чанков в пары с вопросом и подаём в модель реранкера.
- Модель реранкера выдаёт низкие оценки, так как она общая и плохо работает с научными текстами.
- После дополнительной сортировки чанков модель реранкера меняет порядок чанков, перемещая двадцать восьмой чанк на другое место.
00:10:13 Ограничения модели реранкера
- Модель реранкера должна работать на вопросе и ответе одновременно, не допуская предпосчёта.
- В реальном сценарии будет не 100 чанков, а 100 тысяч.
- Векторный поиск сначала находит кандидатов, затем их ранжирует модель реранкера, и наконец они подаются в языковую модель.
00:10:37 Структура пайплайна
- Задаём вопрос модели и ищем релевантные участки текста с помощью векторного поиска.
- Находим десять кандидатов и сортируем их с помощью модели реранкера.
- Самый релевантный чанк подаём в языковую модель, которая генерирует финальный ответ.
00:11:08 Проблемы и обучение компонентов
- Плохой алгоритм поиска требует обучения модели викторизации.
- Реранкер может работать плохо и также требует обучения.
- ЛЛМ может игнорировать контекст или добавлять неправильную информацию.
- Для надёжной работы системы необходимо тренировать все три компонента.
00:11:08 Приглашение на курсы
- Приглашение на курс по ЛЛМ для изучения деталей пайплайна и работы с моделями.
- Приглашение на курс ЛЛ Про для опытных разработчиков, желающих улучшить поиск и запустить систему под нагрузкой.
Расшифровка видео
Поиск по видео
Задаем вопросы LLM
0:00
Всем привет. Меня зовут Илья Димов, и
0:02
сегодня мы поговорим про lm. Большие
0:03
языковые модели уже плотно вошли в нашу
0:05
жизнь. Многие из вас уже наверняка
0:07
попробовали чар GPT или его аналоги для
0:09
решения повседневных проблем, для
0:11
составления скучных писем, планов,
0:13
ответов на вопросы или даже для
0:15
программирования. LM становится всё
0:17
доступнее. Появляются маленькие и умные
0:19
модели, которые можно запускать даже на
0:21
пользовательском железе. Например,
0:23
сегодня мы работаем с видеокартой 4090 и
0:25
моделью 25 на 3 млрд параметров. Давайте
0:28
посмотрим на технические характеристики
0:30
нашего сервера. Вот наша видеокарта RTX
0:32
У неё 24 ГБ видеопамяти, из
0:36
которых половина занята нашей моделью.
0:38
Модель мы запускаем с помощью фреймворка
0:40
VLM вот такой вот командой. Давайте
0:43
попробуем задать какие-нибудь вопросы
0:44
нашей модели. Для этого у нас есть
0:45
функция ask local, которая входит в
0:48
endpint, который подняла эта команда.
0:50
Первый вопрос: Hello, how are you?
0:52
Модель говорит, что она искусственный
0:53
интеллект, и чувств у неё нет, она
0:54
благодарит нас за вопрос. Спросим что-то
0:56
поинтереснее. Например, расстояние между
0:59
Солнцем и Землёй. Получаем правильный
1:01
ответ 150 млн км. И давайте спросим,
1:03
захватит ли всё-таки AI наш мир. Модель
1:05
думает и выдаёт длинный ответ, но
1:07
всё-таки считает, что мы с вами в
1:09
безопасности. Ну и отлично. На наши
1:11
вопросы модель отвечает правильно и
1:13
быстро. И для более сложных вопросов нам
1:15
может понадобиться большая модель,
1:17
которая обычно на лучших данных, у
1:18
которой больше параметров. Однако у
1:20
любой модели есть один важный
1:22
недостаток. Она ограничена теми
1:24
знаниями, которые она видела в процессе
1:26
обучения. Если её обучающий корпус
1:28
собран за 2023 год, мы не сможем с ней
1:31
обсудить модные тренды 2025. Давайте
1:33
спросим у нашей модели, кто текущий
1:35
чемпион Формулы 1. Модель отвечает, что
1:38
последний апдейт у неё был в октябре
1:39
2023 и по её сведениям текущий чемпион
1:42
Льюис Хэмильтон, что, конечно, не совсем
1:45
правда, ведь мы с вами живём в 2025 и
1:47
текущий чемпион Формулы-1 Оскар
1:50
Пиастрия. Что же мы можем сделать, чтобы
1:52
модель давала нам релевантные ответы?
1:53
Неужели нам придётся переучивать её
1:55
каждый год? каждый месяц, каждую неделю
1:57
или даже каждый день с выходом новых
1:59
новостей и событий. На самом деле всё
Как-то автоматизировать процесс поиска релевантной информации?
2:01
гораздо проще. Мы просто можем добавить
2:03
релевантную информацию в контекст
2:05
модели. Давайте добавим информацию о
2:06
том, что сегодня 23 апреля 2025 и
2:09
текущий чемпион Формулы-1 — это Оскарпи
2:12
Астри в контекст модели. И посмотрим,
2:14
что она скажет. Модель успешно говорит,
2:16
что текущий чемпион Оскар Пиастрия.
2:18
Теперь модель выдаёт правильный ответ.
2:19
Можем ли мы как-то автоматизировать
2:21
поиск релевантной информации по вопросу?
2:23
Конечно, можем. И более того, вы знакомы
2:25
с такими системами. Каждый из вас не раз
2:27
пользовался поисковиками: Гуглом,
2:29
Яндексом, Бингом, Yahoo и так далее.
2:31
Обычно это очень сложные системы,
2:33
которые содержит в себе множество
2:34
компонент, которые отвечает за свежесть,
2:36
релевантность и безопасность поисковой
2:37
выдачи. Конечно, разработать аналогичную
2:39
систему, которая смогла бы конкурировать
2:41
по качеству с IT-гигантами, будет
2:42
непросто. Но нужно понимать, что мы не
2:44
всегда можем воспользоваться чужой
2:46
поисковой системой. Поисковики не могут
2:48
проиндексировать наши личные документы
2:50
или внутреннюю документацию нашей
2:51
компании, скрытую от посторонних глаз.
2:53
Сегодня мы соберём поисковую систему
2:55
сами и объединим её с lm. Давайте
2:57
рассмотрим приблизительный план нашего
2:59
решения. Вначале мы задаём вопрос,
3:01
который ищется в базе данных. В этой
3:03
базе данных находятся релевантные
3:05
документы с информацией по нашему
3:07
вопросу. Они вместе с нашим вопросом
3:09
подаются в языковую модель, которая
Retrieval augmented generation или RAG
3:11
генерирует нам ответ, основываясь на
3:13
этих документах. Такая схема называется
3:15
retrieval augmented generation или rag.
3:17
Давайте попробуем собрать прототип
3:19
системы, который будет отвечать нам на
3:21
вопросы по научным статьям. В качестве
3:23
научной статьи мы возьмём статью deeps
3:25
R1, которая вышла в январе 2025. Наша
3:28
модель вышла в сентябре 2024, поэтому
3:31
она не сможет использовать свои
3:32
внутренние знания для ответа на вопросы
3:34
по этой статье. Я заранее заготовил
3:36
несколько вопросов по этой статье.
3:37
Первый, что такое груп Reality Policy
3:40
Optimization? Второе, какие награды
3:42
используются в модели DeepS R10? Всё это
3:45
вопросы, на которые есть ответы в нашей
3:46
статье. Давайте посмотрим, что же скажет
3:49
модель, в которой мы никаким образом не
3:51
подаём внешнюю информацию. На первый
3:53
вопрос, что такое игру relative policy
3:54
Optimization? Модель честно признаётся,
3:56
что такую концепцию она не знает или она
3:58
нешироко известна и пытается дать свои
4:00
трактовки, а это совсем не то, что нам
4:02
нужно. На вопрос, какие награды
4:04
используются в модели Deep Seeker 1.0?
4:06
Модель тоже говорит, что ей это
4:07
неизвестно, однако предлагает какие-то
4:09
свои варианты. Давайте теперь перейдём к
4:11
обработке нашего документа. Мы
4:13
используем бибтеку FITS, чтобы вредить
4:15
нашу пдфку в набор символов. У нас
4:18
получается текст длиной 56.000 символов.
4:21
И вот мы видим, что тут заголовок
4:22
статьи, есть ссылка на почту авторов и
4:25
начинается абстракт, то есть краткое
4:27
описание статьи. Подобный подход
4:29
парсинга довольно грязный. Мы получаем
4:30
не только основной текст статьи, но и
4:32
таблицы оглавления и сноски. Фильтрация
4:34
подобных мусорных участков — это важная
4:36
задача в поиске. Но сегодня мы опустим
4:38
этот шаг. Теперь нам необходимо побить
4:40
весь текст на чанке. Участки текста. Мы
4:42
не можем просто подать весь текст в
4:44
контекст нашей модели. Это будет слишком
4:46
дорого и слишком долго работать. Мы
4:48
будем делать это с шагом длины 500 и
4:51
длиной чанки 800. То есть у нас будет
4:53
перекрытие в чанках. Перекрытие — это
4:55
очень важная часть алгоритмов
4:56
чанкирования. С его помощью смысл
4:58
перетекает с одного чанка в следующий
5:00
более плавно, и мы получаем больше
5:01
чанков для поиска. Ченкирование можно
5:03
устраивать по предложениям, можно
5:05
устраивать его по абзацам. Мы же
5:07
устраиваем его самым наивным способом,
5:09
по символам. Давайте рассмотрим, как у
5:11
нас связаны соседние чанки на примере
5:13
седьмого и восьмого. Вот у нас есть
5:14
некоторый текст, который находится в
5:16
конце седьмого чанка и находится в
5:19
начале восьмого чанка. Давайте напишем
Алгоритмы информационного поиска
5:21
самый простой алгоритм поиска. Для этого
5:23
мы будем искать пресечение текстов по
5:24
словам. У нас есть функция teкий,
5:26
которая приводит текст к нижнему
5:28
регистру и бьёт его по пробелам. Наш
5:30
первый вопрос такинизируется таким вот
5:32
образом. Теперь давайте напишем функцию,
5:34
которая считает близость между текстами.
5:36
Она просто считает, сколько у них общих
5:38
слов. Например, вопрос: «How far is the
5:41
sun?» Имеет с текстом «The sun is very
5:42
far», близость четыре, потому что
5:44
пересекаются слова Sun, the, is и far. А
5:48
текст «How Far is the sun» с текстом The
5:50
Moon is Close имеет близость два, потому
5:52
что пересекаются всего два слова: The и
5:54
is. Конечно, подобный алгоритм можно
5:56
бесконечно тюнить в ристиками, можно
5:58
использовать лиматизацию слов и можно
6:00
выкидывать служебные слова, такие как
6:02
предлоги и артикли. Но давайте
6:04
посмотрим, как наш алгоритм работает в
6:06
боевом сценарии. напишем функцию поиска
6:08
наилучшего чанка и посмотрим, какие
Используем векторную модель
6:10
чанки лучше всего подходят к нашим
6:12
вопросам. К нашему первому вопросу вот
6:14
из GR relative policy Optimization
6:16
находится довольно полезный чанк, в
6:18
котором эта техника упоминается и даже
6:20
написаны её формулы. Однако к нашему
6:22
второму вопросу, какие награды
6:24
используются в модели Deeps 1.0, к
6:27
сожалению, находится не очень полезный
6:28
участок текста. Мы не будем пытаться
6:30
затюнить наш алгоритм, а перейдём к
6:32
векторному поиску. Идея векторного
6:34
поиска заключается в том, что у нас есть
6:35
некоторая модель векторизации, которая
6:38
переводит текст в вектор в каком-то
6:40
пространстве. Это называется
6:41
семантическим пространством или
6:43
пространством смыслов. Его особенность
6:45
заключается в том, что тексты, близкие
6:46
по смыслу находятся друг другу близко в
6:48
векторном пространстве. Например, тексты
6:50
Roses are Red и Violets are Blue
6:52
находятся близко, а текст Sugar и Sweet
6:55
находится далеко от них в нашем
6:56
пространстве. Давайте используем модель
6:58
BGE large для английского языка для
Модель-эмбеддер
7:01
получения эмбедингов, то есть векторов
7:03
наших текстов. Напишем функцию для
7:04
векторизации, которая считает выходные
7:07
вектора наших текстов. Для этого мы
7:09
такинизируем наши тексты, подаём их в
7:11
модель и берём финальные выходы в модели
7:13
и векторизуем наш текст. После этого мы
7:15
будем использовать скалярное
7:16
произведение для подчёта косинусной
7:18
близости между текстами. Давайте получим
7:20
вектора наших текстов. Вот это тензор
7:22
размерности 2×1024, потому что у нас два
7:25
вопроса. И наша размерность, размерность
7:27
нашего векторного пространства 1024.
7:29
Давайте теперь подчитаем близость
7:31
вопросов друг к другу. Мы видим, что
7:32
вопросы близки сами к себе. Это наши
7:35
диагональные элементы. Но друг к другу
7:37
наши два вопроса не очень близки. Теперь
7:39
давайте закодируем все наши чанки с
7:41
помощью нашей модели. Для этого мы
7:42
напишем простой цикл, который проходит
7:45
по всем чанкам, собирает их в бач и
7:47
получает их вектора. Мы получили тензор
7:49
размерности
7:51
114×1024, потому что у нас 114 чанков и
7:54
каждый из них отобразился вектор
7:55
размерности 1224. Давайте теперь
7:58
запустим векторный поиск для вопроса
7:59
номер один, который у нас отработал не
8:01
так хорошо. Это вопрос, какие награды
8:03
используются в модели Deepsek R10. Мы
8:05
берём наш вопрос, викторизуем его и
8:08
считаем его близость к нашим чанкам и
8:10
выводим из них 10 самых близких. Вот
8:12
наши 114 скоров, метрик близости. И вот
8:15
самые близкие чанки. 28 563 и так далее.
8:19
Самый близкий чанк у нас двадцать
8:20
восьмой. Теперь давайте посмотрим на
8:22
этот чанк. Наш вопрос: какие награды
8:24
используют модель deeps 1.0? И как
8:26
раз-таки наш чан содержит модель
8:28
deepsquра 1.0 и перечисление её наград.
8:31
Это награда за точность и награда за
8:33
формат. Соберём весь наш код в один
8:34
пайплайн. Мы получаем текстовые
8:36
имбединги для нашего вопроса. Считаем
8:39
близости с чанком. Берём самый близкий
8:41
чанк по смыслу и подаём его в нашу
8:43
модель. И действительно, наша модель
8:45
использует данные из этого чанка и
8:47
перечисляет награду за точность и
Добавляем реранкер
8:50
награду за формат. Наш пайплайн
8:52
отработал успешно. Теперь давайте
8:54
добавим моделькера. Это особая модель,
8:56
которая может по вопросу и ответу
8:58
сказать, насколько они друг другу
9:00
подходят. Для этого мы используем модель
9:02
BGE и Runker Base. И давайте посмотрим,
9:04
как она работает на следующих парах.
9:06
Первая пара — это вопрос: what is panda?
9:08
Что такое панда? И ответ хай. И вторая
9:11
пара — это вопрос: что такое панда? и
9:14
некоторая сноска из Википедии. В первой
9:16
паре наша модель, неудивительно, даёт
9:17
довольно низкий скор -8, а второй
9:20
довольно высокий-шесть. Теперь давайте
9:22
попробуем объединить наш алгоритм поиска
9:24
с моделью реранкера. Мы, как обычно,
9:26
находим самые близкие чанки к нашему
9:28
вопросу. Позван заветный двадцать
9:29
восьмой чанк. После чего мы собираем все
9:32
эти 10 чанков в пары с нашим вопросом и
9:35
подаём их в нашу модель реранкера,
9:37
который выдаёт им какие-то скоры. скорее
9:39
все довольно низкие, и это объясняется
9:41
тем, что наша модель реранкера общая и
9:43
очень небольшая, и она плохо работает с
9:45
научными текстами. Однако мы можем
9:47
дополнительно отсортировать наши отчанки
9:49
с помощью модели реранкера и подать их в
9:51
модель. Итоговый порядок получается
9:53
такой:
9:54
23 8 56. И наш заветный двадцать восьмой
9:57
чанхал аж на другое место. То есть наша
Почему бы нам не использовать реранкер сразу на все чанки?
10:00
моделе ранкера посчитала, что все эти
10:02
чанки полезнее, чем чан. Возникает
10:05
вопрос, почему бы сразу не использовать
10:07
модель ранкер на все 110 чанков? Дело в
10:09
том, что в реальном сценарии у нас будет
10:11
не 100 чанков, а 100.000 чанков. И если
10:14
модель векторизации позволяет
10:16
предпосчитать вектора для всех наших
10:18
чанков, то модель должна работать на
10:20
вопросе, на ответено, и она не допускает
10:23
предпосчёта. Поэтому нам придётся
10:24
использовать эту модель 100.000 раз на
10:26
каждый запрос. Как правило, в рак
10:28
пайплайнах сначала находит какое-то
10:29
число кандидатов с помощью векторного
10:31
поиска, а потом дополнительно ранжируют
10:33
их с помощью модели реранкера и в конце
10:35
концов подают в языковую модель. Давайте
10:37
ещё раз посмотрим на пайплайн, который
10:39
мы собрали. Вначале мы задаём вопрос
10:41
нашей модели, и мы ищем с помощью
10:43
электронного поиска релевантные участки
10:44
текста из нашей статьи. После того, как
10:46
мы нашли несколько кандидатов, в нашем
10:48
случае 10, мы дополнительно сортируем их
10:50
с помощью модели реранкера. Самый
10:51
релевантный чанк текст мы подаём в нашу
10:53
LLM, которая по нашему вопросу и этому
10:56
чанку генерирует нам финальный ответ.
10:58
Так и работает наша раксистема. Вот мы и
Проблемы RAG
11:00
собрали наш игрушечный рак пайплайн по
11:02
ответам на вопросы из статей. Однако в
11:04
реальной жизни подобный пайплайн может
11:05
работать сильно хуже, чем вы ожидаете. И
11:07
на это есть ряд причин. Первое — это
11:09
плохой алгоритм поиска. И для этого вам
11:11
нужно учить вашу модель викторизации.
11:13
Второе, у вас может плохо работать
11:15
ранкер, и его тоже нужно учить. Третье,
11:17
у вас плохо может работать lm. Она может
11:20
как игнорировать информацию из
11:21
контекста, так и добавлять какую-нибудь
11:23
информацию от себя, которая не
11:24
обязательно будет правильной. Чтобы вся
11:26
система вышла надёжной и правдивой, вам
11:28
необходимо тренировать все три
11:29
компонента раксистемы. Если вы хотите
11:32
подробнее разобраться со всеми деталями
11:33
этого пайплайна, узнать, как работает
11:35
LLM, научиться использовать доступные
11:37
модели, дообучать их и решать популярные
11:39
задачи, приходите к нам на курс по LLM.
11:42
Если же у вас уже есть опыт построения
11:44
приложений на основе LLM и вы хотите
11:46
подробнее узнать, как дообучать все
11:48
компоненты раксистемы, как сделать
11:50
хороший поиск и запустить всю эту
11:52
систему под настоящей нагрузкой,
11:53
приходите на курс lm Pro. На этом у нас
11:55
сегодня всё. Большое спасибо, что
11:57
посмотрели ролик. Всего хорошего. Yeah.

