Transcription
Всем привет! Сегодня в этом видео хочу поговорить про fine-tuning любых моделей, но в частности от OpenAI. Мы будем тренировать ChatGPT, GPT-3. Расскажу, когда стоит использовать fine-tuning, когда нет. Какие выгоды, преимущества, плюс и минусы. Покажу альтернативу fine-tuning'у и, в целом, как это работает на собственном примере, потому что я уже постарался и заранее сделал это. Сайт обучил, посмотрел, как это всё устроено. Давайте начнём.
Я подготовил презенташку. И самого первого, до того, как мы продвинемся на тему fine-tuning, я хочу рассказать про так называемый Zero-Shot, One-Shot, Few-Shot. Что это такое? Почему это вообще связано? Скоро вы поймёте. Zero-Shot – это такой промт. Кстати, если пока не знаете, что такое промт, как это всё устроено, то я приложу ещё отдельную ссылочку, где про это рассказываю. И, в частности, про LLM. Эта тема немножко посложнее. Если вы как новичок, то, возможно, стоит посмотреть предыдущие видео. Так вот, Zero-Shot – это когда вы даёте конкретное задание, и она отвечает на него, как ей там вздумается, условно. Вы не даёте никаких примеров. One-Shot – когда вы даёте один пример. Вот как в нашем случае: "Переведи с английского на французский", и это мы перевод делаем, показываем пример перевода на одном слове "сиотер". Как видим, ну, и перевод на французский. Few-Shot – это когда мы переводим сразу же несколько слов. И не переводим, переводим. Это просто конкретный случай. У нас могут быть абсолютно другие примеры, но главное, чтобы мы показываем модели, как должно быть. То есть, условно, этот эталон и сэмпл.
Так вот, эти Zero-Shot, в принципе, и есть основа для fine-tuning. Просто мы их можем засунуть в промт. Можем пойти, скажем, длинным путём через fine-tuning. Хочу сразу сказать, что это очень важная тема, потому что многие не умеют писать промты. Так вот, один из ключевых моментов – помните это использовать примеры, то есть так называемые One-Shot. Я сюда приложил график, где мы видим accuracy – это точность. Это количество превьюшотов, условно. То есть, как видим, 10 в степени, ну, и One-Shot – единичка. 10 в первой степени – это сотни, сотня примеров. Но самое интересное, что мы видим, насколько точно сильно повышается. То есть, буквально с 10% на 40, только благодаря одному One-Shot. Но если мы делаем примерно 10, так навскидку, 30-40, то у нас уже дальше не так сильно реагирует модель. Но тем не менее, всегда это плюс работает. Хочу сказать, что это я приложу ссылку. Она измерялась с помощью сессоров, когда там всякие задачи олимпиадные и так далее, в том числе генерировались тексты, потом показывали тексты людям, и они не знали, какой это текст сделанный человеком или модель написала. И, соответственно, это всё училось в этом исследовании. Я думаю, если вы попробуете на собственном примере, вы поймёте, насколько отлично работает.
Здесь я просто привёл что-то такое сложное. [музыка] Условно, изменения весов на предтренировочной модели, то есть ChatGPT, который у нас уже есть, либо там любая другая Llama, Mistral и так далее, с помощью датасета, который имеет специфическую dataset. Обычно собирается специфическая задача. Так вот, давайте от терминологии, дело сразу же перейдём. У нас есть нейронка, куча слоёв, нейронов. Вот как видим на этой картинке. И когда мы делаем fine-tuning, обычно мы замораживаем какие-то часть слоёв и добавляем новый. Например, у нас была сеть ImageNet, и она классифицировала всё, что угодно. Но мы хотим зафанить под специфических диких животных. Представьте, которых там даже условно не было. Они, скорее всего, были в начале, но, условно, представим, что у нас какие-то новые животные, которые только недавно были обнаружены. И мы даём фотографии и добавляем, как бы собираем такую dataset, объясняем, что это такое животное, это такое. И, соответственно, после, ну, как бы для того, чтобы это всё работало, мы добавляем несколько слоёв, вот красненьких в данном примере, которые будут наши картинки. Так вот, вот ещё одна картинка. Она показывает, что вот эти слои, у них свои веса. Условно, вот этот ChatGPT, наша, мы не трогаем. Это, ну, куча правил языка и так далее, взаимосвязи. Но вот добавляем только немножко слоёв в конце, обычно это в конце, хотя могут быть и в любом месте при fine-tuning, которые изменяют и вводят, собственно, другой результат после генерации.
Вот сейчас хочу разобрать, когда стоит это использовать. Потому что звучит всё очень круто. На самом деле, это намного дороже, чем классическое использование промтов. И в этой, в этой табличке собрал основные плюсы. Это то, что мы можем потенциально экономить размер фронта, потому что скоро узнаете. Ну, если мы зафаним, то потом нам можно короткими промтами, которые мы фантюним, использовать уже в продакшене. Нам не обязательно показывать огромное это количество примеров, закидывать их в промт, как бы, все One-Shot. У нас Few-Shot уже внутри модели встроена. Качество ответов, если хороший датасет подготовили, намного лучше отвечает или ватнее. Персонализированная дата, потому что вы можете собственные факты туда набросать, собственно, там стиль компании, ну, и так далее. Возможность натренировать на большом количестве примеров, что, соответственно, в One-Shot вы не сможете в промт сунуть, потому что просто ограничение 4000 токенов, 16 тысяч токенов. Но в любом случае, на конечные отличия от fine-tuning, где можно нагрузить файлы до 50 МБ. И [музыка] быстрее, быстрее могут, соответственно, ответ поступать вам.
Из минусов – это цена. Цена, сразу скажу, в 10 раз дороже за то же количество токенов, чем в ChatGPT классическом. Проблема миграции между сервисами, моделями, потому что в зафанили на GPT, вы не сможете эту модель потом перенести на Bard, условно. Да, вам придётся снова это всё переобучать и платить за это деньги, потому что обучение тоже платное. Ну, как следующий пункт, за обучение платите. И Time, то есть нужно базу данных подготовить, соответственно, это время. Но если вы решаете, оно того стоит. Вот то, что четыре шага, которые вам нужно пройти, чтобы сделать fine-tuning. Первый: убедитесь, что, условно, в Playground вам недостаточно или он хорошо работает, но вы хотите ещё больше качества, потому что Few-Shot иногда помогает, и не нужно думать о fine-tuning'е. Тогда потом посчитайте экономику. Соответственно, если вы, допустим, видите расход топ 10 раз больше, вы можете посчитать, какое количество токенов уходит в промте с One-Shot и который ответ получаете, и какое количество затратите за то, чтобы обучить и потом использовать по цене X10. Обычно это у всех сервисов, не только GPT, то есть такие зафанильные модели дороже использовать. Это количество вам нужно минимум 100 примеров. И обязательно потом, когда вы собираете примеры, они должны быть максимально разнообразные.
Первый совет, который вам может пригодиться, это сохраняйте. Вы там видите, что модель неправильно отвечает на Few-Shot, собираете те некорректные ответы, которые делает модель, и те промты. Они в будущем пригодятся для того, чтобы составить более корректный dataset для обучения. Ну, и проверять, в том числе, насколько это вообще моделька получилась. Про проект, скажем так, про валидный dataset, рекомендуют в том числе сам OpenAI. И делить ваш dataset. То есть, если у вас собралось там 500 примеров, сделать 300 примеров на обучение, 200 примеров не давайте ChatGPT, а просто дадите потом промту на новую зафанильную модель, когда она будет, чтобы вы проверили качество, насколько оно соответствует тому, что предполагали. И третий момент, больше технический, то, что у вас ограничение 50 МБ файл. Вы можете до 12 моделей в день. И каждый ответ должен быть не больше, чем 4000 токенов. И вот я приложил классную ссылочку на скрипт, который проверяет. Вы просто запускаете этот файл, и он говорит: всё с ним в порядке для fine-tuning, или не в порядке. Вы сможете тогда исправить.
Когда вы будете обучать модель, то столкнётесь, скорее всего, по дефолту, по default'у, количество эпох ставится 4. Хотя OpenAI сам выбирает, сколько эпох ставить. Но когда тренировал, у меня вышло 4. Количество эпох – это вообще целым. Эпоха – это когда они прогоняют весь ваш сет, который вы загоняете, один раз. То есть, все строчки, которые в нём есть, они прошли – это одна эпоха. Модель пересчиталась. Потом проходится вторая эпоха, у них уже есть новые веса от первой эпохи, и они как бы дальше пересчитываются различными формулами. И, соответственно, поэтому графику видно, что одной эпохи недостаточно, двух тоже. Трёх уже более-менее. Четыре, пять эпох – это, в принципе, самые отличные, скажем так. Можно до шести эпох. Но учитывайте, каждую эпоху вы платите за неё. Собственно, умножаете количество ваших токенов. Вот это сеть умножается в шесть раз. Поэтому больше четырёх особо нет смысла. Но тут нужно экспериментировать. После того, как модель получилось, смотреть, какой результат, количество может улучшить качество.
Вот тут я уже прикладываю скрин. Это, собственно, я запустил скрипт, который проверяет валидность. Давайте, конечно, расскажу про пример, который зафанил, довольно интересный кейс. Значит, есть у меня такой инфоцыган британский, ну, человек, который занимается бизнесом, помогает зарабатывать деньги там на Property, продажи недвижимости, аренды и так далее. И вот он активно любит присылать письма, которые, соответственно, служат для продажи его консалтинга, курсов и так далее. Я на него подписался несколько недель, и он тут мне наслал уже 20 с лишним писем. Что я сделал? Я взял текст этих писем, написал небольшой скрипт, который выдирает и конвертирует в нужный нам формат. А именно, вот он Rich Text, вот этот формат – это датасет, который вы будете использовать для обучения, для fine-tuning. Соответственно, и как видите, вот здесь я сделал промт: "Напиши маркетинговые предыдущие для нашей там подписчиков, чтобы привлечь клиентов". И вот здесь все эти e-mail, 21 штука всего лишь, очень маленький. Я ему ещё задал дополнительно вот то, что вы видите, JSON-чик. Это всё есть в мануале, не буду это описывать, потому что тут можно почитать, какой формат должен быть. Но это классический API запрос к ChatGPT. Так вот, сюда вогнал 21 пример. Я рассказал немножко про Richard Norris, кто он такой. Промт у нас, соответственно, мы обучали на этом промте написать email. И разные мы даём.
Потом, когда мы прошли обучение, я запускал это всё дело на вот этом скрипте. Я вам, он как бы готовый, но на всякий случай потом тоже думаю, выложу. Вот прошла валидация. Я загрузил файл валидации, показано среднее количество на каждый ответ токенов. Потом после загрузки файла я вижу его ID-шник. И потом этот ID-шник нужно будет указать для fine-tuning. Код выглядит, на самом деле, очень просто. Вот здесь я указываю, какой файл загружать, да, то есть. Вот здесь я указываю, что это обучение. Закомментировал, потому что я уже запускал этот, как бы, строчку кода, чтобы второй раз не фанить. Ну, ID-шник мне выдал вот сам OpenAI. И я его подставляю сюда. Говорю, что нужно обучить. И потом вот этой командой я смотрю, как он обучается. Потому что обучается он у меня. Обучился за час. Это из-за того, что очередь. То есть, другие тоже любят, и он их всех ставит в очередь. После того, как час прошёл, мы получаем такой ответ. А вот от этой команды Fine-tuning job list. И здесь видим модуль. Вот эту модуль уже можно использовать для API запросов, но в том числе и для Playground. И как видим, вот появляется модель новая с этим ID-шником. И я начинаю задавать вопросы: "Напиши мне разогревающий email про недвижимость в Киеве". И получаю в стиле этого Роберта Норриса email. Посмотрите на него. Я тут соседней вкладке открыл просто GPT-3 Turbo, то есть GPT, тот же самый запрос, настройки, всё один в один. Но тут совсем другой текст. Как видите, "Dear Subscribers Name, I hope this finds you great". Вот это классическая любимая фразочка GPT. Я думаю, может, встречались и писали email шаблоны. Здесь же, во-первых, тут Денис, Денис. Почему? Потому что в моих текстах было "Денис" везде. Поэтому он как бы подставил уже. Во-вторых, тут сразу же идёт такая, цыганская, сказал, то есть, ну, ошеломляющая, когда глаза аж открываются от этого. Где вы там всё узнаете про европейскую быстрорастущую недвижимость в Киеве. Ну, в общем, тут он предлагает уже гайд скачать. Это примерно всё то, что было вот в этих его email-ках. Она уже поняла его стиль, поняла, что мы тут делаем, и использует это fine-tuning. То есть, я считаю, получилось очень здорово, интересно. И если вам нужно, допустим, просто использовать это в компании, да, и у вас есть уже, особенно датасет, там сотни email, вы это загоняете, фаните, потом модель пишет уже с учётом ваших продуктов, вашего компа. Знаете, это на самом деле очень круто. Можно использовать. Просто если, допустим, мы говорим в промте: "Так пишет там, говори со мной как Илон Маск", известный человек. Но если вы хотите поговорить с кем-то, допустим, человеком, который неизвестный и не знает, а у вас есть датасет, вы загружаете его, у вас есть ваш персональный, как его, это Richard Norris.
Итак, собственно, я вам показал, как это устроено, как работает, как выглядит датасет, плюсы и минусы использования fine-tuning. Поэтому пробуйте, пишите в комментариях, вы уже модели или нет. Если да, какие у вас результаты. А я в следующих видео буду рассказывать про генеративных агентов, которых есть память и много рефлексии, многих других фишек. Мне эта тема тоже очень близка. Будет интересно. Подписывайтесь, ставьте лайк.