RAG для чайников: делаем модель умнее за 15 минут

В этом видео мы разбираем, как работает Retrieval-Augmented Generation (RAG) — метод, который позволяет большим языковым моделям (LLM) использовать актуальные внешние данные для генерации ответов. Вы узнаете, почему LLM могут выдавать недостоверную информацию, как RAG помогает снизить «галлюцинации» моделей и какие инструменты используются для реализации этого метода. Также рассмотрим примеры работы RAG, его плюсы и минусы, а также разберем реальные кейсы его применения в бизнесе и разработке.

*Прямая ссылка на видео https://www.youtube.com/watch?v=_CZEDMz5lkQ

Расшифровка видео

0:02
Всем привет. Меня зовут Мурад Хажриев, и
0:05
сегодня мне бы хотелось поговорить с
0:07
вами про такую интересную тему, как
0:09
Retrieval Augated generation или RAG,
0:11
или
0:13
по-русски генерация с использованием
0:15
внешних данных, внешних источников
0:16
данных, наверное, так будет корректно
0:18
адаптировать. Но с вашего позволения я
0:20
буду использовать англицизмы, потому
0:21
что, ну, вот такова практика в
0:23
индустрии. Вот. А, соответственно, что
0:25
же такое раги? И, возможно, давайте даже
0:27
начнём с того, почему меня вообще стоит
0:28
послушать. А я достаточно много давно
0:31
занимаюсь мэйлем. На текущий момент я
0:34
консультирую стартапы, венчерные фонды
0:36
по вопросам внедрения ML и, в частности,
0:39
лемок и их процессы. Также я преподаю в
0:42
высшей школе экономики, в магистратуре,
0:44
на ФК, на факультете компьютерных наук.
0:47
Веду я курс, а, по обработке
0:50
естественного языка, то есть NLP, то
0:52
есть то примерно, о чём мы будем сегодня
0:53
говорить. Поэтому хочется верить, что у
0:55
меня есть, что вам рассказать
0:56
интересного. Если получится что-то вам
0:59
интересное рассказать, то я буду очень
1:00
рад. Собственно, что такое рак, зачем
1:03
это и зачем он нужен? А вот если так
1:06
подумать, то бывают ситуации, когда мы
1:09
обучали нашу модель на данных, допустим,
1:12
до какого-то бордатого года, и новых
1:14
свежих данных модель не видела при
1:16
обучении. И как бы вроде бы она хорошо,
1:18
э, освоила какие-то концепции языка, но
1:21
при этом она просто устарела, и нам не
1:24
хочется её дообучать. Мы можем это
1:26
сделать, добавив новые факты, но,
1:28
возможно, она забудет что-то из старого.
1:30
То есть процесс файтюнинга модели, он
1:31
всегда сопряжён с определёнными
1:33
сложностями, с риском. И не всегда у нас
1:35
есть ресурсы и возможности для того,
1:36
чтобы готовы взять модель и с ней
1:38
подобное провести, провернуть. Это,
1:40
во-первых. Во-вторых, а есть ситуации,
1:44
когда мы хотели бы, чтобы модель
1:46
опиралась на конкретные источники
1:48
данных. И это бывает важно, допустим, в
1:50
медицине, когда критически важно указать
1:52
какую-нибудь статью медицинскую, на
1:54
которую мы ссылаемся при ответе. и дать
1:55
на неё ссылку. Вот в таких случаях а нам
1:59
помогает
2:00
retaugmented generation. Иными иными
2:02
словами мы берём внешнюю базу данных,
2:05
каким-то образом её используем для того,
2:07
чтобы расширить возможности нашей модели
2:09
к анализу и к извлечению информации.
2:12
Вот. Давайте, чтобы не быть голословным,
2:13
я постараюсь продемонстрировать вам свой
2:16
экран, где мы разберём картиночку. Это
2:19
одна из первых картинок, которые я нашёл
2:20
просто в поисковике.
2:22
И начнём из того, что вспомним, что же
2:25
примерно из себя представляет
2:27
современная большая языковая модель. А
2:29
понятное дело, что это достаточно
2:31
устаревшая картиночка. Например, сейчас
2:34
никто не использует позиционный энкодинг
2:36
вот таким образом. Но давайте это
2:39
опустим. В целом она наша задачам
2:40
отвечает.
2:42
Значит, если мы внимательно посмотрим,
2:45
то вот здесь вот видно, что современные
2:48
модели генеративные, они практически как
2:51
бы внутри пайплайна не используют так
2:53
называемый. Это вот вот эта вот часть. А
2:57
с большим количеством допущений я это
2:59
говорю, но в целом большая исковая
3:01
модель — это просто текст, который мы в
3:03
неё отдаём. Например, а какой-то вопрос,
3:06
который мы отдаём нашу модель.
3:07
Называется он промт. Давайте это тоже
3:08
уберу.
3:10
Вот мы даём промпт, нашу
3:12
модель, и дальше этот промпт сначала
3:15
делится на токены, так называемые. Этим
3:18
токеном ставится в соответствие бединг.
3:20
Каждому токену ставится в соответствие —
3:22
это какой-то вектор, который
3:24
представляет семантику, смысл данного
3:26
токена. Дальше происходит всякая
3:27
интересная матричная жизнь. Сложно или
3:29
нет, в зависимости от того, прогуливали
3:32
ли вы, а, значит, уроки по лининой
3:34
алгебре в университете или были ли они
3:36
вообще у вас. Но так или иначе, в конце
3:38
вот всего этого декодера модель пытается
3:41
при условии входного промкта получить
3:44
некоторое распределение поверх всех
3:46
токенов, которые присутствуют в
3:48
известном ей словаре. Давайте вот так
3:51
нарисуем. Вот. И, допустим, получается
3:54
вот некоторое распределение
3:56
вероятностей, из которого мы будем
3:58
смплировать новый токен. Допустим, вот,
4:01
ээ, токен Т2 выиграл. Вот мы говорим,
4:04
что ура, победитель на данном шаге.
4:07
Вот мы его добавляем к нашему промту и
4:09
дальше продолжаем итеративно всю эту
4:12
операцию повторять до тех пор, пока не
4:16
получим символ, допустим, остановки
4:19
генерации, и мы заканчиваем таким
4:21
образом а всю нашу генерацию. Вот.
4:24
Значит, здесь возникает резонный вопрос:
4:27
а как же вообще модель помнит, что было
4:30
на этапе обучения? Вот чёткого ответа я
4:32
вам не дам. Есть несколько гипотез от
4:34
очень красивых, лингвистически
4:36
обоснованных, которые сейчас я вам
4:37
расскажу. И есть гипотезы в стиле просто
4:40
кучу параметров накинули, что-то там они
4:41
делали, и получилось хорошо. Значит,
4:43
если мы будем пытаться всё всё это
4:45
более-менее красиво объяснять, то мы
4:47
непременно приходим к выводу, что вот
4:49
есть так называемый FFN Fit forward
4:51
network — это просто пара линейных
4:53
слоёв, а в которых модель учится во
4:57
время обучения концентрировать а ту
5:01
информацию, точнее концепции, которые
5:03
позволяют ей лучшим образом обрабатывать
5:06
входные последовательности.
5:08
Вот вот этот FFN — это как раз тот
5:11
участок, который позволяет нам
5:13
интерпретировать какую-нибудь там
5:14
нейронку как архиватор знания. Вот. И,
5:17
соответственно, в какой-то момент, когда
5:19
мы будем генерировать, окажется, что вот
5:21
в условно в нашем Фене не окажется
5:23
достаточно информации для того, чтобы
5:25
грамотно на вопрос ответить. И в таком
5:27
случае либо модель скажет, что она что
5:28
она не знает, очевидно, что как бы
5:30
является желаемым в нашем случае
5:33
результатом, либо она просто нам начнёт
5:34
что-то галлюционировать, что ещё хуже
5:37
возможно.
5:38
Вот, соответственно, было бы здорово,
5:40
если бы у нас была какая-то внешняя база
5:43
данных. Давайте я попробую её
5:44
более-менее красиво, симпатично
5:46
нарисовать. Вот, допустим, у нас есть
5:48
какая-то база
5:50
данных, в которой у нас хранятся
5:54
факты, допустим, факты из жизни, те
5:56
факты, которых модели как раз не
5:57
хватает.
5:59
У этих фактов есть какой-то ключ,
6:00
какой-то хэш, например, какой-то ключ,
6:02
который мы используем для того, чтобы по
6:04
этой базе
6:06
данных проводить поиск. И у нас есть как
6:09
бы значение в этой базе данных.
6:11
Допустим, вот у нас есть
6:13
факт
6:15
один, факт
6:17
два и так далее. Вот. И, значит, встаёт
6:22
на нас вопрос, вот как нам понять, что
6:25
вот, допустим, факт один, который
6:28
потенциально нам подходит и хорошо бы
6:29
его как-то использовать при генерации,
6:31
что он подходит, а, значит, по смыслу к
6:34
текущему запросу? Значит, давайте
6:36
вспомним, что у нас помимо
6:37
декодера у нас есть ещё и энкоodдер. Ну,
6:41
в принципе, можно не только его
6:42
использовать, но зачастую часто
6:43
используется энкоodдер, а, который как
6:45
раз-таки кодирует некоторый текст.
6:48
Значит, мы берём этот энкоodдер, отдаём
6:51
в него промт.
6:54
Этот промт выходит у нас на выходе
6:56
набором
6:57
контекстно зависимых качественных
7:00
эмбейв, которые раньше, если вы знаете,
7:03
как работает архитектура трансформера,
7:05
мы бы подмешивали через encoder decoder
7:07
attention, мы бы подмешивали в наш
7:09
декодер. Но мы можем просто взять этот,
7:12
эти эти эмбединги, допустим, каким-то
7:14
образом их усреднить, взять из них
7:16
макпулинг, как ваша душе угодно. В
7:18
принципе, это не суть важно. А вот мы
7:20
полученный, значит, энкодинг энкоodдер
7:22
будем использовать как, а, напомню, как
7:25
бы, точнее, мы как генератор бебейв.
7:28
Абединги — это просто вектора, которые
7:30
сематически, э, качественно представляют
7:33
в линейном пространстве информацию,
7:35
закодированную в нашем промкте.
7:36
Собственно, во время обучения мы так
7:38
били модель по бисам, что она научилась,
7:41
а, генерировать качественные и
7:43
контекстнозависимые эмбетинги. И мы этим
7:45
пользуемся. Мы возьмём, допустим, разные
7:47
факты, которые у нас есть из жизни.
7:48
Допустим, это статьи из из Википедии или
7:51
что более близко к правде, это мы
7:53
возьмём, допустим, новые какие-то
7:54
статьи, новости, мы их побьём на куски
7:58
по, допустим, по 500 символов, неважно,
8:00
по 500 токенов, как вам тут угодно, как
8:02
вам. В общем, всё, всё, всё зависит от
8:04
вашей задачи, которую вы решаете. Вот
8:06
вы, значит, бьёте эту статью, допустим,
8:08
на куски, на так называемые чанки,
8:10
главное, с пересечением, чтобы они между
8:12
друг другом не теряли информацию при
8:14
переходе. Вот. И вы вот из этих чанков
8:17
формируете вот так называемые факты, так
8:18
я их назову для нашего примера. И кроме
8:21
этого вы вы можете, например, эти факты
8:23
а закодировать при помощи того же самого
8:25
энкодера в виде
8:27
векторов, тех самых эмбетингов. Они
8:29
будут нашими ключами по для поиска по
8:31
нашей базе
8:32
данных. А вот, соответственно, после
8:35
того, как это сделано, у вас есть
8:36
промпт, который у вас прошёл через ваш
8:40
энкоoder. Вот вы можете вот этот самый
8:42
промпт, вы можете его взять
8:44
закодированный. представлены в виде
8:47
эмбединга. И вы можете этот эмбединг
8:49
просто сравнить по какой-то метрике
8:50
близости с теми элементами, которые
8:54
находятся в вашей базе данных. И мы
8:56
предполагаем, что у промпта, который
8:59
похож на те факты, которые находятся в
9:01
нашей базе данных, больше, будет это э
9:03
это метрика близости больше. Это может
9:04
быть коснусное расстояние тамдовое
9:06
расстояние, как вам хочется. В принципе,
9:08
это не суть важно. А важно то, что как
9:10
только эти факт, этот факт мы, допустим,
9:12
нашли, мы имеем возможность этот факт
9:14
взять и добавить его к нашему исходному
9:16
промпту прямо, допустим, в наш
9:19
апт в наш запрос. Давайте это уберу.
9:23
Вот. То есть каким-то образом мы
9:24
говорим, что наш промпт теперь это,
9:26
допустим, просто текст, допустим, из из
9:29
первого факта плюс старый
9:33
промпт. А в каком-то смысле мы никакой
9:35
магии не сделали. То есть мы просто
9:37
через поиск ближайших соседей, ну, тут
9:39
более хитрая будет, допустим,
9:40
какая-нибудь на фаиз векторная база
9:42
данных, но смысл один и тот же. У вас
9:43
есть, а, какой-то поиск ближайших
9:45
соседей, при помощи которого вы нашли те
9:48
факты, которые наиболее релевантны к
9:49
текущему запросу, и вы просто их
9:51
добавили в свой исходный промт. И дальше
9:54
вот вся та же самая магия декодера,
9:55
которую вы до этого проводили, будет
9:56
работать. Просто промт у вас уже будет
9:58
обладать как больше информации для
10:01
анализа модели. Вы можете сюда добавить
10:03
какой-то, э, значит, внешний системный
10:05
промпт, где вы объясните модели, как ей
10:07
правильно интерпретировать, эти факты,
10:08
которые вы достали. Вы можете их
10:09
несколько достать, например, но смысл
10:11
один и тот же. Это значит первый способ
10:13
использовать эти факты. Второй способ.
10:15
Если вы знаете, как работает, а, как
10:17
работает ender декодер модель, то вы
10:19
можете эти факты подмешать вдер в тот,
10:23
можно, может быть, даже в тот же самый
10:25
коoder. Вы вы получите на выходе из
10:28
энкоodдера абединги, который вы будете
10:30
через encoder decoder attention, так как
10:32
было завечено оригинальной статье
10:34
статьёй attention из Allit. Вы будете
10:36
просто подмешивать, а, ваш декодер,
10:38
который будет в этот раз уже учитывать
10:41
контекст не только того промта, который
10:43
к вам пришёл на вход, как это обычно
10:44
делается, а ещё и контекст из,
10:47
а, получается эмбедера, энкодера,
10:50
который, а, опирается на, допустим,
10:54
какие-то факты, которые вы достали из
10:57
вашей базы данных. Это значит вот два
11:00
способа, как можно эти данные эти, а,
11:02
значит, эту эту информацию подмешивать.
11:04
Выбор достаточно, на самом деле,
11:06
неочевиден, потому что кажется, что, э,
11:09
способ вот подмешивать в вкоodдер может
11:13
дать нам лучше прирост по качеству, но
11:14
не не всегда это правда. А бывают
11:16
ситуации, когда, например, это просто
11:18
неправда, а бывают ситуации, когда, а,
11:20
нам нужно достаточно серьёзно, а-э,
11:23
дотюнивать вот эту вот общую модель для
11:25
того, чтобы, то есть, менять её
11:26
параметры, для того, чтобы у нас все
11:29
элементы нашего пайплайна друг под друга
11:30
сошлись. И не всегда у нас такая
11:32
возможность имеется. Например, если вы
11:35
пользуетесь сторонним IP, допустим, чата
11:37
GPT, чат GPT вам предоставляет в рамках
11:39
IP как декодер, который отвечает на
11:41
вопросы, так и, в принципе, вы можете
11:43
получать, а, так называемые эмбейдинги,
11:45
просто вектора, которые вы будете
11:47
использовать как для энкодинга,
11:50
получается, ваших промптов, так и для
11:52
энкодинга сторонней информации, которая
11:53
где-то у вас хранится в базе данных. То
11:55
есть, в принципе, CHGPT вам такое
11:56
позволяет за за тем исключением, что вы
11:58
тут как бы ничего не можете фантюнить,
11:59
ничего не можете дообучать. Это может
12:01
быть иногда проблемой, но в принципе,
12:03
если у вас нет каких-то критических
12:04
существенных данных и вы о’кей с тем,
12:07
чтобы вы, что вы как бы теряете какую-то
12:09
часть эффективности, то это, в принципе,
12:11
тоже хороший вариант. Ну, самый, как я,
12:13
как я сказал, простой вариант — это
12:14
просто добавить к промпту а вот эти там
12:17
так, так называемые те факты, которые вы
12:19
достали. И в принципе это неплохо
12:20
работает уже. Уже неплохо работает. Вот
12:23
отдельно отдельно стоит отметить, что
12:26
вот вот эти факты, так называемые, вы
12:27
можете формировать не только нарезая
12:29
текст начаки. Вы можете использовать и
12:31
графы, если у вас есть какая-то графовая
12:33
база данных. Например, у вас тут есть
12:35
отец, а хотел хочется пошутить, но
12:37
ладно. У вас есть отец, у вас есть,
12:39
допустим, Маша и у вас есть мяч. Ну,
12:42
очевидно, у вас может быть эта база
12:44
данных сильно больше. Ну, допустим, мы
12:45
нашли какую-то её локаль. Допустим, это
12:47
какая-то компонента связанности, а или
12:49
это
12:51
какой-то разными алгоритмами какая-то
12:54
найденная часть графа, которую мы хотели
12:56
бы рассмотреть. Значит, и у вас отец,
12:57
Маша и Мяч как-то по-разному между собой
12:59
связаны. Например, отец относится с
13:00
Машей. Эйс будет направленный граф.
13:03
Отец, например, он, а, не знаю, родитель
13:07
Маши. И при этом Маша типа владеет
13:11
мечом.
13:13
Соответственно, если вы вот эту штуку
13:15
нашли, то вам ничто не мешает
13:16
представить это просто в виде текста.
13:18
Просто вот у вас текст в виде
13:21
отец,
13:23
родитель,
13:25
Маша и там
13:28
Маша, мяч, да? То есть вот это просто
13:30
вот это вот этот текст просто как факт.
13:32
Вы можете его взять, например, если вы
13:34
знаете точно, что в этой окрестности
13:35
вашего графа вам нужно искать, например,
13:38
то вы можете эту штуку под подмешать. Вы
13:40
можете этот текст каким-то образом
13:42
дистиллировать в
13:45
summary так,
13:47
sumarри. То есть вы можете каким-то
13:49
образом его самаризовать и потом
13:51
положить вот этот текст, например, в
13:53
качестве фактов, а вот это сари потом
13:56
пропустить через encoder, получить ещё
13:58
один edдинг, например, бединг и
14:01
использовать его в качестве ключа для
14:03
поиска. То есть как вашей душе угодно. В
14:05
принципе, вот вариантов достаточно
14:06
много. Мне бы хотелось, чтобы вы не
14:08
зацикливались на на конкретных
14:09
инструментах. всегда а всегда держали в
14:11
голове общую картинку. То есть в целом
14:13
подбирайте а решение под ту бизнес
14:16
бизнес-задачу, которую вы решаете. А
14:17
если вы используете Open AI, то у вас в
14:20
принципе это может быть ваше решение, но
14:21
в тогда у вас руки ограничены вашей
14:24
возможности в том, что вы можете, в
14:26
принципе, делать. А вот если вам нужен
14:28
быстрый, допустим, ответ, то, наверное,
14:30
использование графовых баз данных может
14:32
быть проблемой. Если вам нужен очень
14:33
точный ответ, используйте графовые базы
14:35
данных. Это может себя тоже оправдать,
14:37
если ваши пользователи готовы немножко
14:39
подождать
14:40
ответа. Вот. А что пока, чтобы показать
14:42
пример, как это всё работает. Я вот
14:44
накидал тут ужасный код. Пожалуйста, не
14:46
используйте его как пример ни в коем
14:48
случае для best practice. Но в качестве
14:51
иллюстрации он, в принципе, показывает,
14:52
что происходит. Вот есть такой
14:53
инструмент, так называемый longchaй. Он
14:55
позволяет вам, а, достаточно с
14:59
небольшими, а, костами для входа
15:02
попробовать то, как работают так
15:04
называемые раги, вот эти Retrieval
15:05
Method Generation и прочие современные
15:07
инструменты, э, связанные слем. Но у
15:10
него есть проблема такая, что у него он
15:11
плохо скалируется, у него есть свои
15:13
проблемы на горизонте использования. Но
15:15
если вы знаете об этих проблемах,
15:16
наверное, вам не стоит меня слушать. Вы
15:19
и без меня разбираетесь в том, что
15:20
происходит. Вот. Но попробовать его для
15:22
начала уж точно стоит. Он достаточно
15:24
лёгкого к освоении и иллюстративен, что
15:26
самое главное, мы используем. Это просто
15:29
движок для инференса. У нас есть фаиз —
15:31
это такой хитрый движок, на котором я не
15:35
буду долго останавливаться, но это
15:36
способ реализовать векторную базу
15:38
данных, а с методом ближайших соседей с
15:41
поиском по этим векторам просто не за
15:43
линейное время, а более хитрым способом,
15:45
чтобы сократить нам время. А значит,
15:49
будем мы использовать мистраль. всего 7
15:51
млрд кроху. Она будет заточена при
15:53
помощи инструкции. То есть её научили
15:56
более-менее корректно отвечать на то,
15:58
что ожидает видеть пользователь. Мы её
16:00
квантизовали. И тут важно сказать, что
16:02
эта модель окончила своё обучение
16:03
примерно в двадцать первом году,
16:05
двадцать втором, это так. Ну и и у нас
16:07
вот, в общем, есть набор вопросов,
16:08
которые нас интересуют. Все эти вопросы,
16:10
как как вы вы видите, связаны с
16:12
двадцат-двать третьим годом. А там что
16:14
произошло с эмом Альманом, кто C Open
16:16
AI, когда был вот этот iPhone? Я, честно
16:18
говоря, не яблокофонный фанат, но тем не
16:22
менее такой вопрос, соответственно, и
16:24
там кто президент США там с двадцать
16:26
четвётого года? Как мы как мы понимаем,
16:29
как как мы ожидаем, что модель не имеет
16:31
возможности грамотно ответить? И вот её
16:32
изначальные ответы. Что вот ничего
16:36
непонятно, очень интересно, какую-то
16:37
ерунду она нам генерирует про двадцать
16:39
второй год, хотя это вроде бы неправда,
16:40
насколько я знаю. А значит, про Тесла
16:42
она тоже какую-то ерунду говорит. То
16:44
есть ничего непонятно. Про Трамп. Она,
16:47
видите, она прямо так честно отвечает,
16:48
что в принципе хорошо, да, что а она
16:50
кончила, значит, в двадцать первом году
16:51
знать, что происходит. И а вот Джо
16:54
Байден, она, значит, отвечает. В общем,
16:56
ничего она не знает толком. Значит,
16:58
теперь предположим, что у нас есть
17:00
внешний источник данных, который мы
17:02
хотим учитывать. Например, это может
17:03
быть, а, новостной портал, это может
17:05
быть какое-то хранилище документов или
17:08
ещё что-ни что-нибудь, какой-то
17:09
графовый, а, набор данных.
17:12
Ну, в нашем примере это просто какой-то
17:14
набор, скажем, новостей кратких, которые
17:17
мы хотим сохранить в текстовом файле и
17:19
дальше учитывать в нашей модели. Значит,
17:21
из этого текстового файла мы соберём
17:23
базу данных путём нарезания вот этих
17:25
фактов на кусочки. По-моему, по 100
17:27
символов я вставил, да? Вот по 100
17:28
символов. И у нас есть overlap в виде
17:30
двадцати символов для того, чтобы когда
17:32
у нас чанк будет выбран, чтобы вот
17:33
информация на краях, которая может быть
17:35
релевантна и для одного, и для другого
17:37
чанка, чтобы она не утерялась.
17:39
Вот, соответственно, вот при помощи
17:41
такого при помощи такого способа вот мы
17:43
строим наш Face индекс, то есть мы
17:45
строим нашу векторную базу данных и
17:47
дальше просто достаём релевантные к
17:49
нашему запросу получается факты. Вот
17:52
здесь показан пример того, что наша что
17:55
наша
17:57
получается, что наш промпт, который мы
17:59
перевели сначала вдинг, а потом при его
18:02
с его помощью искали по нашей векторной
18:04
базе данных, получается релевантные
18:06
ответы, которые тоже были
18:08
предварительно, э, значит
18:11
про эмбдированны, так можно сказать. В
18:13
общем, вот это тот ответ, который мы
18:15
получили по
18:16
итогу. Ну и, соответственно, здесь мы
18:18
смотрим уже, что получилось по итогу.
18:19
Вот, видите, модель уже чётко. Я
18:21
однозначно отвечаю, что да, вот CTM а
18:24
является всего Open AI, при этом она, а,
18:27
даёт нам контекст, который может быть
18:29
отчасти неправилен, потому что модель
18:31
крохотная, но вот так она это видит, как
18:33
бы она она говорит, что такой вот
18:34
контекст, и мы типа мол сейчас не знаем,
18:36
потому что мы находимся в в ситуации
18:37
неопределённости и при этом СМ альтман,
18:39
она говорит, что был уверен, но был был
18:41
уволен, но был возвращён в Open AI,
18:44
поэтому она исходит из этого и говорит,
18:45
что сейчас СМ альтман как бы с точки
18:49
зрения того, что она знает, является
18:50
сила. Вот пройона уже правильно
18:52
отвечает, про Дональда Трампа отвечает
18:54
правильно, ну и так далее.
18:55
Соответственно, он знает знает всю
18:56
историю Сэма Альтмана. Ну и было бы
18:58
странно, учитывая, что мы сами ей это
19:00
подпихнули. В общем, мораль всей истории
19:02
такова, что даже вот на текущем
19:04
демонстративном, очень простом примере
19:06
мы видим, насколько сильно наша модель
19:07
смогла помнеть. А главное, она просто
19:09
смогла узнать информацию, которую она
19:11
против в противном случае никогда бы не
19:12
смогла, а узнать без дообучения, которое
19:15
тоже зачастую либо очень дорого, либо
19:17
чревато забыванием, катастрофическим
19:19
информацией, моделью, если делать его
19:21
неаккуратно. Вот поэтому я надеюсь, что
19:23
мне удалось вас убедить, что раги — это
19:26
клёво, молодёжно, что это стоит того,
19:29
чтобы немножко забулиться в тему и
19:31
использовать в ваших дальнейших
19:32
проектах. Вот. Надеюсь, вам было
19:34
полезно. Спасибо большое за внимание. А
19:36
пока-пока.

Поделиться: