Как сделать свою "кастомную" GPT и начать на этом зарабатывать?

Такс, давайте-ка вместе сделаем свою, донастроенную, fine-tuned chatGPT. Это и технически интересно, и именно на такой донастройке зиждется огромное количество AI-based проектов – опыт нам всем пригодится. И да, ни строчки кода мы сами, конечно же писать не будем - за нас это будет делать chatGPT. Так сильно быстрее и местами веселее.

Как сделать свою "кастомную" GPT и начать на этом зарабатывать?

А чтобы это не стало душным мануалом, нам нужно подобрать кейс, который можно сразу превращать в деньги. Продавать сгенерированные тексты – скучно, долго и уже “приелось”, давайте лучше обучим модель на финансовых новостях и данных о движении рынка, а затем потребуем от модели предсказаний, которые будем сразу использовать в виде базы для long/short позиций на бирже.

Сперва несколько слов о том, что такое "кастомная" GPT и зачем она нужна.

Да, сама по себе GPT-3.5 удивляет своими способностями без всякой "настройки", так как её, чёрт возьми, обучали несколько месяцев на суперкомпьютере на практических всех доступных текстовых данных интернета до сентября 2021 года. Но для прикладных однотипных задач лучшую производительность показывают донастроенные (fine-tuned, customized) модели. Существуют и простые способы "настройки" модели под свою задачу, такие как few-shot learning, которые по сути требуют лишь модификации prompt'a. Но в таком случае мы будем сильно ограничены размером передаваемого текста, да и не для прикладного промптинга мы тут собрались. Хочется же чего-то посложнее?

Донастройка - fine-tuning- представляет собой передачу обучаемой модели датасета (сорри за англицизмы, так удобнее, а то пишешь "набор данных" - и сразу повеяло курсами "ML инженер за 3 месяца", а спонсора на эту интеграцию я пока не искал) с записями вида:

{"prompt": "<prompt text>", "completion": "<ideal generated text>"}

Если хочется поглубже покопаться в вопросе и понять "почему всё это вообще работает", то можно посмотреть вот эту статейку, или вот этот сборник.

OpenAI рекомендует передавать модели не менее 100 тренировочных записей, некоторые исследования показывают, что можно и меньше, но нам же не жалко - дадим и больше 💪.

Сбор данных

Начнём с выбора источников данных для обучения. Нам нужен и хорошо подойдёт датасет из текстов. Здорово бы было собрать какую-то новостную ленту, насыщенную событиями финансового рынка в очень сжатой форме. Кажется, это должно быть похоже на терминал Bloomberg – но я никогда его не видел, и если что, но поговаривают, что даже доступ к нему стоит сильно дороже 100 баксов – а это, если что, весь бюджет проекта (сорри, да, такие вот ограничения на развлечения).

Мы что, бесплатных данных не найдём в 2023 году? Да ну 😎... Думаю, всё это очень похоже на какой-то финансовый Twitter, поэтому беглым поиском ищем что-то 'financial breaking' и сразу находим вот такой пример

(для просмотра твиттера, доступа к API openAI и нормальной жизни в 2023 году вам понадобится vpn - да, ещё одна рекламная интеграция осталась без дела, надо запомнить, пока просто порекомендую хороший проект)

Зарабатывать мы, анализируя этот твиттер, разумеется, хотим очень много и, главное, быстро. Поэтому, раз уж речь зашла о финансовом рынке, то придётся использовать маржинальную торговлю и абсолютно заоблачные "дегенские" плечи. Например, если делать покупки с плечом в 30x, ты мы сможем превращать вложенные 50 долларов в 1500🤑, а заодно в 30 раз ускорять возможное обнуление всей позиции😭. Но мы ж тут только верные покупки делать собрались, с нами chatGPT, в конце концов её на всём интернете обучили, так что давайте вот сейчас не будем о грустном (не повторяйте этот эксперимент).

Можно, конечно, было бы регулярно делать небольшие покупки по совету обученной модели, потом ждать предсказанного роста или падения цены актива какое-то время, возможно, усредняться на просадках 🤔...

Как сделать свою "кастомную" GPT и начать на этом зарабатывать?

Но всё это какая-то нудятина, поэтому предлагаю просто искать события резкого изменения цены вверх или вниз, и считать, что в той или иной мере такие события могут быть предсказаны по предшествующей им ленте новостей за определённый интервал времени.

Итак, нам нужна торговля "с плечом" и резкие скачки цены? Кажется, дело пахнет "этими вашими бетховенами", выезжает крипто-команда. И давайте-ка возьмём в качестве источника не биткойн – BTC, а эфир – ETH (спросил у chatGPT, она посоветовала). Вот тут можно качнуть поминутно / посекундно / подневно данные о торгах. Я скачал поминутные данные о торгах ETH к USDT за период с 1.04.23 по 19.06.23.

Таким образом, у нас уже вырисовывается задача:

  • собираем данные о рынке (изменение цены активов/актива во времени) за период
  • ищем целевые события в данных о рынке (резкий рост, падение цены)
  • собираем твиты за этот же период времени
  • сопоставляем с каждым найденным событием по изменению цены массив предшествующих ему во времени твитов
  • формируем датасет в формате, подходящем для openAI API
  • скармливаем датасет модели, ожидаем, что она всё поймёт и найдёт скрытые зависимости, которые сказочно обогатят нас
  • на базе собственной обученной GPT делаем решение для торговли
  • profit (но это не точно)

Пора отметить, что для того, чтоб вот так же взять и быстро затащить похожий проектик, не лишними были бы базовые знания о принципах машинного обучения, и тут могла бы бы интеграция курсов - тадаам. Но нет, не рекламу ж мне продавать, я ж себя развлекаю, камон - так что, если что не серчайте и сами как-нибудь разберитесь 😉

Кóдим подготовку данных вместе с chatGPT

Итак, мы скачали несколько .csv файлов со статистикой рынка, и хотим из них сделать несколько сотен примеров событий для обучения системы, нас интересуют:

  • резкое падение цены (для примера взял изменение >1.5% за 5 минут)
  • резкий взлёт цены
  • "ничего особенного" (по сути, это самое частое явление, и мы обязательно должны обучить классификатор не только предсказывать взлёт или падение, но и хлопать нас по плечу и говорить "не сегодня, лудоман")

И да - после выбора целевых событий нам нужно выкачать все твиты за аналогичный период и дополнить ими сформированный по найденным событиям датасет и привести его к формату, принимаемому open AI.

Можно было бы сделать из этого лонгрида уже неприлично большой документ с выдержками кода и скриншотами нашего общения с chatGPT, но кажется, лучше будет ограничиться небольшими пояснениями по существу и приложить ссылочку на весь диалог с chatGPT для тех, кому это будет интересно. Спасибо openAI за эту фичу (делитесь в комментах своими беседами, наверняка есть чем – особенно люблю вот такие prompt hacks).

Вот здесь мы общаемся и делаем вместе с GPT-4 ipython-блокнот, который готовит dataset:

  • собирает данные о рынке в dataframe
  • ищет нужные нам "события": резкий рост / падение цены, ровный рынок
  • дополняет "события" предшествующими им твитами за указанный интервал времени

В отдельном инстансе (другом чате) инструмент для "выкачивания" твитов мне посоветовал сам chatGPT - зачем искать, если он может предложить несколько рабочих вариантов. Я бегло проверил этот инструмент на небольшом периоде данных, а дальше передал запрос на автоматизацию скачивания chatGPT – вот наша беседа со всеми деталями целиком:

А вот наш dataset, блокнот для его сбора:

Мои выводы и советы по "совместной разработке" с chatGPT:

  • Ожидаемо, беседа на английском повышает ваши шансы на действительно продуктивное общение в несколько раз (воу, ещё одна рекламная интеграция курсов пропала).
  • Проверенный базовый pattern промптинга для помощи в разработке, который будет быстро двигать вас к цели: "я решаю <подробное описание проблемы>, использую <такой инструмент> по <причине>, помоги мне с кодом / предложи альтернативы" – можно применять модификаторы, вида "ты – создатель языка python, программист со стажем 100 лет и зарплатой 300кк/нсек", но это особо не изменит результат.
  • Если вы столкнулись с любой проблемой, которую не смогли решить за 5-10 секунд, без сомнений формулируйте её в виде запроса "я делал <это> и столкнулся <с ошибкой>, как исправить?". Это не обязательно должна быть ошибка в коде, а например, "не понимаю как действовать дальше / какой вариант решения выбрать". Реальный кейс – мне не хотелось вручную через терминал скачивать файлы с твитами, я поделился этой "болью", и chatGPT сначала предложил мне bash script для циклической скачки твитов и с паузами для того, чтобы не улететь в бан (сам я писал бы такой скрипт в десятки раз дольше, это ж, блин, "скрипт в терминале" 😧, да чего стоят одни только "маски" форматирования дат), а затем сделал аналогичный python-метод по моей просьбе (я хотел всё зафиналить в одной среде).
  • Отключите внутренний голос, который будет пытаться подать на вход ИИ "предобработанную" информацию, не тратьте время на самостоятельное движение и гугление, чтобы затем обратиться к ИИ только со "сложными кейсами", начинайте погружать систему в контекст сразу с начала решения.
  • Ваша экспертиза и знания в каких-то областях с одной стороны супер-полезны и будут помогать вам отсекать "галлюцинации" ИИ и направлять разговор в продуктивное русло: "так, стой касатик, кажется, нам в другую сторону, перепиши код с учётом <этого>" – частый случай. С другой стороны – предыдущий опыт будет подталкивать вас к самостоятельному продвижению в параллели, а этого, как я уже говорил, лучше избегать и стараться формировать для ИИ полный контекст продвижения по проекту.

Обучаем GPT-3.5

Всё готово, обучаем 🚀, что будем делать (код есть в блокноте):

  • получим свой ключ API, новым пользователям на "тест" ключи дают бесплатно с лимитом трат в 18 баксов, посмотреть можно здесь (в коде вы можете увидеть мой ключ, но он конечно же, не работает – причём openAI подстрахует вас и забанит ваш ключ, если он попадёт в любой реп на github)
  • подкорректируем dataset – каждый prompt обучающей выборки должен заканчиваться фиксированным разделителем (в нашем случае "->"), этот разделитель не должен больше нигде встречаться
  • ещё подкорректируем dataset – каждый completion обучающей выборки должен начинаться с пробела (связано с алгоритмом токенизации, который "хватает" слова по предшествующим им пробелам) и заканчиваться стоп-словом (🤭), в нашем случае "###", но можно и "flügergeheimer", почему нет?
  • экспортируем dataset в .csv, и мы почти у цели
  • залетаем в терминал, устанавливаем openAI CLI, шлифуем и проверяем dataset, запускаем обучение :
pip install --upgrade openai ... openai tools fine_tunes.prepare_data -f training.jsonl -q ... openai api fine_tunes.create -t training_prepared.jsonl -m davinci --suffix "vc_gang"

Важные детальки:

  • маркер -q при вызове "prepare_data" лишит вас необходимости отвечать на уточняющие вопросы от CLI, хотя ответить на них несложно, и на самом деле может быть полезно, смотрите сами
  • обратите внимание на hard / soft лимиты на траты, которые вы установили в личном кабинете openAI - в нашем случае обучение модели стоило 35 баксов, и пока порог, установленный на 10 баксов, не был поднят (сам в шоке), обучение отваливалось без каких-либо сообщений об ошибках. Кстати, все подобные косяки при обучении можно увидеть, воспользовавшись парой дополнительных команд:
# Вывести список всех запланированных задач на обучение, # отсюда можно будет скопировать ID конкретной задачи: openai api fine_tunes.list ... # Запросить статус выполнение по конкретной задаче: openai api fine_tunes.get -i <vash_ID_zdes'>

После завершения обучения – а оно, кстати, может простоять в очереди приличное время, и потом само по себе занять десятки минут (я ждал полчаса) – мы получаем ID обученной модели, в которую теперь можно пулять запросы и практически мгновенно получать прогноз.

Как сделать свою "кастомную" GPT и начать на этом зарабатывать?

Наслаждаемся результатами

Под наши требования по торговле с "дегенскими" плечами подходят несколько площадок app.gmx.io/trade , app.perp.com и многие другие продукты (выбирайте сами, тут тоже не случилось платной интеграции).

Так как приведенные выше биржи децентрализованные (не нужно регаться, проходить KYC и взаимодействовать с кастомным API), то ставки тоже можно было б достаточно легко автоматизировать, но это уже не про AI, не так интересно - можно и без этого обойтись. Достаточно:

  • проанализировать как часто и в какое время возникают скачки цен
  • поставить будильник на эти дни и время
  • подготовить скрипт, который в один клик качнёт твиты, отформатирует их и закинет в модель с вопросом "чё делать?"
  • сделать ставку по совету модели

Понятное дело, что ничего из этого мы не будем делать сами, chatGPT для всего сделает код по запросу (на самом деле всё уже есть по ссылкам выше, а скрипт исполнения уже есть в гит)

Итак, на момент написания статьи было сделано уже 5 покупок (и несколько десятков раз получен ответ "обожди, касатик"), одна из покупок была скромно успешной (+30 USD), но итоговый баланс в минусе на пару баксов – ожидаемо, резких скачков не происходило, а небольшая потеря всегда была на торговой комиссии. Тут хорошо было бы сказать, что я буду продолжать делать покупки по будильнику, но самое интересное уже позади 🙃, а трейдинг оставим трейдерам (и всем рекомендую сделать так же).

Ну да, ну да, пошёл я нахер, заработать не получилось, но по крайней мере, было интересно, опыт fine-tuning'а остался. Надеюсь так 🤡

Наверняка на этом месте пытливый читатель может задаться вопросом:

а не chat-ли-мать-его-GPT всю эту ахинею и написал?

дядя Толя, 55 лет, Нягань

И да, сомневающийся читатель будет прав. А может, и не будет, решайте сами. Очевидно, что такой материал сейчас вполне под силу GPT-4 😌.

Здесь не будет традиционной ссылки на мой @канал_с_мудростями, но голова полна идей, как можно раскочегарить chatGPT на бабки - лайкните, пожалуйста, эту статью, если вам это интересно. Этот пост я написал развлекая сам себя, но вдруг нас соберётся целая банда на монетизацию ИИ - тогда будем продолжать 😉

В свободное от этих статей время (лан-лан, первая статья...) я занимаюсь продуктами в сфере AI и web3, и если вы хотите пригласить меня в какой-то проект в качестве CPO, CTO или хастлера на брейнштормах буду рад пообщаться, пишите на vladthecpo@gmail.com.

Обнял, но не приподнимал – в следующий раз.
На связи!

5454
11
12 комментариев

Спасибо! Да, уже думаю над каналом в телеге... но чтоб его автономный агент вёл от моего имени)

4

Зачем соглашаться на меньшее, если можно получить лучшее?

3

Спасибо за статью. Написано довольно хорошо. Правда не хватает следующего:
- Поменьше намеков на рекламные интеграции) а то прерывают поток легкого чтения
- Ссылку на тг канал или акк все таки желательно. Почта уж слишком официозно. Тем более не соотносится со стилем статьи
- Ссылку бы на твой тех бэкграунд

2

Статья очень полезная, но было бы здорово добавить обучение для людей, по типу меня (который попросту пытается создать своего чатбота в течении месяца), где рассказывалось бы, как правильно изменить весь dataset под себя.
Спасибо!

openai проапгрейдился, теперь 1.1.1 и команды другие.

# Эта вот работает
openai tools fine_tunes.prepare_data -f training.jsonl -q

# А вот эта уже нет
openai api fine_tunes.create -t training_prepared.jsonl -m davinci --suffix "vc_gang"

пишет:
usage: openai api [-h]
{chat.completions.create,images.generate,images.edit,images.create_variation,audio.transcriptions.create,audio.translations.create,files.create,files.retrieve,files.delete,files.list,models.list,models.retrieve,models.delete,completions.create}
...
openai api: error: invalid choice: 'fine_tunes.create' (choose from 'chat.completions.create', 'images.generate', 'images.edit', 'images.create_variation', 'audio.transcriptions.create', 'audio.translations.create', 'files.create', 'files.retrieve', 'files.delete', 'files.list', 'models.list', 'models.retrieve', 'models.delete', 'completions.create')

Судя по документации, файнтюнить можно из своих пайтоновских скриптов, а вот команд, как это из CLI делать - я так и не нашел... Может, кто знает?

Не матерись в культурном обществе, ты же его слой🤣🤣🤣