Pull to refresh

Патриотичный ИИ, непатриотичный автор

Level of difficultyEasy
Reading time8 min
Views3.5K


Каждый желающий уже успел понакручивать промты Шедевруму и Kandinsky 2.1, пожаловаться на жутковатые результаты (сами виноваты), или просто сомнительные, с точки зрения русского языка, ассоциации нейросети.

Но, только ещё не я. Мне ещё есть что сказать, рассказать, а точнее — сделать!

Итак, статья про три вещи:
  • Почему вывод наших нейрохудожников так отдаёт англичанкой.
  • Как исторически связаны MidJourney, Stable Diffusion и ChatGPT?
  • Как подружить AWS с русскими доменами, и чтобы всё за тебя сделала машина.

И самое главное — моя попытка изменить ситуацию делом. Поехали!

Предисловие


Начну с того, что я — огромный энтузиаст всего, что связано с LLM и GenAI. Кое-где даже вышло внедрить LLM для анализа огромных металлургических стандартов и логов, ещё до того как это стало мейнстримом.

Я постоянный пользователь ChatGPT4 при написании кода, документации, текстов и тикетов. Использую MidJourney и StableDiffusion для генерации оформления и просто для создания мемов для жены:


«Нет ничего лучше, чем покушать поной за сериалом»

Однако, меня все время терзал назойливый червячок: почему везде мне приходится использовать только английский язык? И если для программирования это уже как-то стало нормой (1С разработчики, извините, мы говорим про настоящее программирование), то как так вышло, что и с лингвистическими моделями мне приходится на нём разговаривать?

Особенно утомляло составлять описания картинок для Dall-E и MidJourney. Раньше я думал, что у меня совершенно свободное владение языком, а как дело дошло до описания тонких визуальных нюансов, так, словно, через кисель протискиваюсь.

И тут я обнаружил, что у нас, оказывается, есть решения на русском.

Насколько глубока кроличья нора


Буду краток. Все уже успели посмотреть Шедеврум, покудахтать головой, что как же так, почему повсюду американские флаги, да еще и цензура в неправильную сторону повернута.

Очевидно, что все это натренировано на англоязычных базах, либо с минимальным вхождением русского. Но почему? Неужели нельзя составить свою базу? Midjourney всего пару годиков, неужели не догоним?

Сначала надо ответить на главный вопрос — откуда взялись эти данные, сколько времени ушло на их подготовку, допущения и каких объемах информации вообще идет речь?

Вопрос получился чуть-чуть не один, но пускай. Итак, история.

Откуда ноги растут


Вы обратили внимание, что MidJourney, Stable Diffusion (Stability AI), Imagen (Google), Dall-E 2, все как-то появились примерно одновременно и работали одинаково хреново на примерно одном уровне качества и имели практически общие болячки?

Нет, дело не в том, что великие умы думают одинаково, это просто датасет у них был общий.

За ними серым кардиналом стоит такая компания как Laion, которая буквально за год до появления MidJourney & Stable Diffusion выпускает свой первый публичный датасет на 400 миллионов изображений! Сейчас их самая большая база имеет 5 миллиардов картиночек с разметкой.



И собирали они эти данные, ни много ни мало, а с 2014 по 2021 год с помощью Common Crawl, который итеративно каждый год выгружает данные из интернета в аккуратненький архивчик. А следующий архив уже был в конце 2022 года, совсем недавно.

Кстати, 2021 год, ничего не напоминает? (кхм-кхм, ChatGPT).



ChatGPT: As an AI language model with a knowledge cutoff in September 2021, I don't have access to real-time information or events that occurred after that date.


Что это значит для российской GenAI индустрии?


Во-первых, выводы можно сделать следующие:
  • Чтобы создать что-то похожего масштаба нужны данные объемом в несколько лет масштабом англоязычного интернета (нам требуются килограммы часов!).
  • Данные для обучения текущего поколения GenAI собраны из того что было под рукой. Тут, как известно, взрывчатку можно сварить и из бытовой химии, но чтобы жахнуло по-настоящему — нужно специальные особые ингредиенты.
  • И еще одно косвенное следствие — весь материал для обучения пропитан западной либеральной повесточкой, это везде хорошо прослеживается. А когда у тебя ИИ думает по лекалам врага идеологических конкурентов, это просто напросто опасно применять где-то, кроме прямого баловства.
  • Такой подход создает прямые юридические риски, поскольку уже только ленивый не подал в суд за воровство своих вялых, и до этого никому не нужных, художеств на любой из этих сервисов. Чем закончится — неизвестно, лишь бы попкорна хватило.

маленькое жизненное наблюдение
сначала побалуются, а потом в прод тащат.


И как глаголит известная мудрость, не нужно искать победу там, где однажды ее уже нашел. Если пытаться идти по протоптанной дорожке, то для начала, попросту не хватит данных, а во вторых — это недальновидно. Так что зачем пытаться скопировать чужой успех, если можно обоспреуспеть по-своему?

И тут я решился на авантюру.

Социальный эксперимент


Насмотревшись в детстве на успех МММ, для себя я усвоил, что объединившись, мы можем свершать невозможное! Так почему бы и не попробовать собрать народную базу изображений с нашей, отечетсвенной душой и разметкой?

Два очевидных плюса для такой затеи:
  • Во-первых, решаются вышеобозначенные проблемы с дефицитом данных и наклонностями ИИ.
  • А во-вторых, данные могут быть размечены не как дано, а как захотим. Мы ведь не скачиваем что было из интернета, а творим сами. Для себя я решил, что внести эмоциональную маркировку в изображения неплохо разбавит суховатый хруст машинной живописи.
  • А в-третьих, одно изображение может быть размечено по разному разными людьми, что добавит многополярности датасету.

Итак, будем создавать сервис для загрузки и разметки изображений, чтобы минимум работы, красиво и устойчиво к нагрузкам.

Я по натуре ленивый авантюрист, который еще и подвыгореть успел за года тоскливого айтишного быта, поэтому буду заставлять либеральный ИИ конструировать себе замену. Цель — наклепать за выходные полноценный backend + frontend + infrastructure.

Стек выбрал следующий:
  • Backend: AWS (lambda, gateways, s3, sam), Python, lets-encrypt, github actions
  • Frontend: Bootstrap, Vanilla JS
  • Brain: ChatGPT, Midjourney + Dall-E 2, и я еще немножко поработал.

Почему AWS? По двум причинам: были волнения за легальность хранения материалов в контуре РФ + с прошлого развалившегося бизнеса осталось пару десятков тысяч вечнозеленых кредитов на амазоне валидных до конца года, которые было бы просто жаль не пустить в дело. И буду с вами честен, второе сыграло решающую роль.

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

Дизайн


Про визуальную часть буду краток — поскольку сам совершенно не Бакст и не Кандинский (да и статья не об этом), я, перепробовал много разных инструментов, остановился на Dall-E для логотипов (недавно еще узнал про Recraft , который заточен для иконок, но в деле еще не проверял).

Самые простейшие ассоциативные запросы рода:
An AI donkey face in gitlab logo abstract style, clear shapes, soft red colors, golden proportions, white background

Выдают достаточно неплохие результаты. Это, типа, осел:

image

Не спрашивайте почему осел и ia-images. Потому что AI ->наоборот IA -> Иа -> Ослик (из зала послышалось протяжное 'крииинж'). Ну, я, пожалуй, продолжу.

А для дизайна вдохновлялся набросками из MidJourney, но все картинки получались массивные, при вставке выглядят мелко и плохо, просто приведу адаптированный вариант результата:



Разработка


Теперь к самому важному — технической части. В качестве дисклеймера обозначу, что это больше обзор, чем подробный гайдлайн. Моя цель — подсветить инструменты, которые стали гораздо доступнее с приходом языковых ассистентов и как можно быстро построить первый (или уже далеко не первый) прототип в облаке. Несмотря на обилие всяких помощников по написанию кода, этим дело не ограничивается.

Так вот, выкладывать сайт, естественно, решил на российском домене, а хранить на амазоне по причинам обозначенным выше. Тут я воспользовался reg.ru для регистрации .ru домена и aws для всего остального. И, что ожидаемо в подобной, как говорил один мой знакомый — комбине, тут же получил санкциями по лицу.

Всем известно, что у любого нормального сайта обязательно должен быть замочек в строке браузера (по крайней мере, мне так мне всегда бабушка говаривала), а для замочка требуется TLS сертификат, который русофобный Amazon больше не выдает совсем для ряда доменов ассоциирующихся с РФ! Что, конечно, объяснимо, но для того чтобы это узнать пришлось обращаться в поддержку за расшифровкой мистической ошибки: «The certificate requires additional confirmation» без каких либо дополнительных пояснений. Обошлось мне это тайное знание в 25 долларов.

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

Было еще забавно узнать от их саппорта, что заблокирован так же домен СССР — .su. Я, как миллениал, всегда считал, что в союзе не было не только интима, но еще и интернета, а оно вон как, оказывается.



Интересно, кто пользуется этим доменом
Если верить 'The Guardian', то .su домен наиболее облюбовали различного рода хакеры. Вот так, даже спустя три десятка лет, призрак союза кошмарит бедных либералов в интернете.


Решил я этот вопрос через LetsEncrypt, пробросив запрашиваемые файлы через S3. Задача достаточно рутинная, расписывать скучно, просто пришлось создать несколько бакетов под разные домены и положить туда файл с нужным наполнением.

Инфраструктура и ChatGPT


А вот из того, что может быть ценным, хочу рассказать про подход по организации амазоновских сервисов через sam конфиг (Serverless Application Model), который до этого только в некоторых проектах видел, а все остальные предпочитали настраивать через UI нужную солянку.

Несмотря на определенное удобство infrastructure-as-code, для прототипов это больше тратит времени, чем приносит пользы. Так вот, языковые ассистенты все меняют. Это оказалось крайне быстро и очень удобно — запрашивать нужную компановку у ChatGPT вместо того, чтобы настраивать это самому веб консоль. Потребовалось только сертификат руками загрузить, а вот следующий пример для лямбды уже был сгенерирорван автоматом:



Этот конфиг так же создает все промежуточные компоненты между Route53 и самим gateway, не только сами 'ворота'.

Но что еще лучше, если вдруг не заладилось, то можно весь свой стек удалить одной строкой и не переживать о том, что случайно забудешь какой-нибудь сервис, который будет жрать деньги без спроса:
sam delete --stack-name MY-STACK

Полный sam config можно посмотреть на гитхабе.

Через SAM можно настроить практически все. Вот здесь в документации можно посмотреть полный список поддерживаемых компонентов. Но лямбы, s3, ec2 и промежуточные комопненты для CloudFormation точно есть.

Из общих рекомендаций по работе с чатиком могу посоветовать следующее:
Всегда лучше явно обозначать поля и фреймоворки, которые надо использовать. Иногда даже стоит скинуть документацию в качестве сопровождения. Чем меньше у него разлета для фантазии, тем реже будете встречать галлюцинации в коде.

В случае для питона запрос может быть таким:



И следом же за этим попросить его написать sam config для полученного метода.

Результат


Выложив небольшой пост на пикабу для получения отклика, получилась следующая статистика:
  • В среднем, каждый десятый увидевший пост, загружает картинку. Из 12 тысяч просмотров, что достаточно немного, было отправлено на модерацию больше 1000 изображений.

  • С разметкой дела обстоят примерно в два раза ленивее: всего было размечено чуть больше 500 картинок, некоторые по нескольку раз. Пример такой разметки:

  • И самое интересное: всего 5% загруженных изображений оказались порнографическими. Я думал, дело будет гораздо хуже. Как ни просите, будет без примеров. Вот вам лучше капибара из датасета, они ничем не хуже:



Посмотрим, во что дальше это превратится. Планирую пока медленно и методично продолжать взращивать датасет, накрутить некоторые фичи, которые мне здорово подсказали. Тут фидбек приветствуется в любой форме.

Все вышесказанное стоит воспринимать в развлекательно-образовательном ключе, надеюсь, кого-нибудь натолкнет на интересную мысль!

Срезюмирую:
  • Языковые модели страстно впитывают ценности на которых они обучены. Моя точка зрения, что в перспективе критически важно иметь языковую базу с близким нам мышлением.
  • IaC (описание инфраструктуры кодом) конфигурация очень удобна, если работать с языковым помощником, позволяет легко запускать прототипы, даже не особо разбираясь во всем этом.
  • И, лишний раз, подтвердилось, что данные и вычислительные ресурсы правят рынком GenAI, у кого лучше и больше, у того и сервисы качественнее и интереснее. Я считаю, у российского сегмента здесь огромный потенциал.

Спасибо дочитавшим до конца!
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 20: ↑13 and ↓7+8
Comments18

Articles