Содержание статьи
Нейросеть, создающая картинки из текста
Нейросеть, создающая надписи
Для предсказания важен контекст, поэтому модель учится понимать, как слова в предложении связаны между собой и какие из них чаще встречаются вместе. На основе анализа и контекста модель предсказывает, какое слово или фразу логично было бы использовать дальше. За это отвечает декодер.
Если вам мало возможностей huggingface.co , советую обратиться к оригинальному коду авторства Katherine Crowson. Заходите сюда под гугл-аккаунтом, нажимайте «Подключиться» в правом верхнем углу и надейтесь, что вам не выпадет сообщение о том, что доступен только центральный процессор. Если же вам предоставили GPU, самое время заглянуть в зубы дарёному коню. Для этого поставьте курсор на первый блок кода и нажмите Ctrl+Enter, чтобы выполнить его. На экране появится информация о графическом ускорителе виртуальной машины.
Для начала небольшая справка. Нейросеть называется CLIP Guided Diffusion HQ. О чём это нам говорит? HQ — понятно, высокое качество. CLIP (Contrastive Language-Image Pre-Training) — это такой сравнительно новый метод обучения мультимодальных нейросетей. Мультимодальность в данном случае означает одновременную обработку разных типов данных — текста и изображения. Предыдущие сети, умевшие рисовать картинки, в основном относились к типу GAN (генеративно-состязательные). У этого подхода есть свои плюсы и минусы, ну да сейчас не о нём. Diffusion означает диффузионный метод формирования изображения, при котором из «затравочной» картинки поэтапно удаляется шум. Затравка может быть осмысленным изображением или случайным набором пикселей.
Чтобы шестерёнки завертелись, нажимайте Ctrl+F9 (ну или [Среда выполнения → Выполнить всё]). Потребуется время на установку необходимых пакетов и скачивание самой модели, обычно в пределах десяти минут. Изредка нужно проявлять активность в этой вкладке, иначе Google будет ругаться, что вы зря тратите его ресурсы.
Более современные модели на основе нейросетей ориентируются на большее количество параметров. В отличие от, например, n-граммных, которые смотрят на фиксированное число слов, они могут смотреть на весь текст целиком. Кроме того, они способны учитывать стиль текста, день недели и даже сезонность — это как раз контекст.
Принципы работы языковой модели зависят от её типа. До того как разработчики стали использовать нейросети, в ходу были более простые статистические алгоритмы. Языковые модели на их основе называют классическими. Простейшая модель такого рода, например, выдаёт одно и то же слово вне зависимости от того, что получает на входе. Более сложные учитывают вероятности. Например, могут подсчитать, что после «привет» люди часто пишут «как дела», а после «хлеб» — «белый». В качестве предсказания модель может предложить самое частотное слово или слово, которое встречается с определённой вероятностью. Логика работы зависит от того, какая стратегия предсказания заложена в модель.
Владимир рассказывает: «Дальнейший процесс зависит от того, какую задачу мы хотим решить: если нейросеть анализирует предложение и должна выдать предложение, то языковая модель обновляет контекст новыми сгенерированными словами и снова предсказывает слово».
Если вы хотите работать только с текстом, ничего кроме prompts вам не нужно. Если же требуется стартовая картинка, вставьте её URL в одинарных кавычках вместо None вот сюда:
init_image = None. Также рекомендую для начала skip_timesteps = 300 и init_scale = 1000.
Почему у нейросетей плохо выходят надписи
Как языковые модели видят тексты
Модель видит текст как единицы языка: слова, буквы, цифры или знаки препинания — их по-другому называют токенами. Из чего будут состоять токены, зависит от того, как программист, который работает с моделью, поделил текст. Можно анализировать выражения на уровне букв, слов или частей слова.
Мы уже много рассказывали про нейросети, в том числе для генерации изображений. Одна из больших их проблем – невозможность генерировать нормальный текст на картинке: получается либо абракадабра, либо вообще нечитаемые символы. Но бывшие сотрудники Google смогли исправить этот недостаток — они запустили сервис Ideogram, в котором любые надписи по вашему желанию генерируются с невероятной точностью.
Как объясняет разработчик машинного обучения Владимир Морозов, на входе модель получает текст. Например, если пользователь набирает слова на клавиатуре, первой их прочитает именно языковая модель. За распознавание высказывания отвечает энкодер. Чтобы понять смысл, модель делит входной текст на мелкие кусочки, такие как слова или фразы.
Как языковые модели видят тексты
Модель видит текст как единицы языка: слова, буквы, цифры или знаки препинания — их по-другому называют токенами. Из чего будут состоять токены, зависит от того, как программист, который работает с моделью, поделил текст. Можно анализировать выражения на уровне букв, слов или частей слова.
Если модель смотрит на один последний токен, это униграммная модель: она предсказывает следующее слово по последнему во фразе. Биграммные модели смотрят на два слова назад. Но технически количество слов, которые будут учитываться в предсказании, не ограничено. Поэтому модели могут быть n-граммными, где n — любое число. В сравнении с другими модели такого типа быстро работают и мало весят, особенно если значение n небольшое, а токен — буква или часть слова. Поэтому n-граммные модели активно используют в клавиатурах, чтобы персонализировать подсказки.
Свой прошлый пост я сопроводил картинкой, нарисованной при помощи нейросети. Этот факт заинтересовал многих куда больше, чем локальный юмор научных сотрудников. Несколько человек под это дело на меня даже подписалось. Теперь уже не отвертеться, так что держите рассказ о том, что это за сетка такая и как ей пользоваться.
Затем модель создаёт следующий фрагмент текста, который она считает наиболее верным в контексте. Именно эту фразу пользователь увидит у себя на клавиатуре смартфона в строке подсказок. Процесс повторяется множество раз, чтобы сгенерировать полный текст или ответ на вопрос, если нейросеть встроена не в клавиатуру, а чат-помощник.
Кстати, о чёткости. Как я уже говорил, эта сеть умеет делать картинки размером только 256 × 256. Задача сгенерировать изображение по тексту очень сложна, так что даже на одну такую картинку уходит больше вычислений, чем в своё время потребовал весь атомный проект СССР. Но вот задача увеличить разрешение с сохранением чёткости куда проще, и её вполне можно перепоручить другой нейросети. Тут я уже не буду подробно расписывать, можно почитать обзор и выбрать понравившуюся. Есть полностью бесплатные, есть с триальным периодом. Некоторые иллюстрации прямо сильно выигрывают от апскейла.
Как вводить запрос в Ideogram
Если модель смотрит на один последний токен, это униграммная модель: она предсказывает следующее слово по последнему во фразе. Биграммные модели смотрят на два слова назад. Но технически количество слов, которые будут учитываться в предсказании, не ограничено. Поэтому модели могут быть n-граммными, где n — любое число. В сравнении с другими модели такого типа быстро работают и мало весят, особенно если значение n небольшое, а токен — буква или часть слова. Поэтому n-граммные модели активно используют в клавиатурах, чтобы персонализировать подсказки.
В итоге, даже если в обучающей выборке есть достаточно изображений с правильным числом пальцев на руках или красивыми и понятными надписями, нейросеть просто не понимает, какая конкретная деталь на изображении — надпись, а какая — палец. Поэтому, когда в запросе алгоритм видит фразу, например, «табличка с текстом I love you», он может выдать что-то вроде «IIu lvooo Youuu».
За последние полтора года (примерно тогда в свет вышла первая версия MidJourney) нейросети для генерации изображений прошли огромный путь улучшений и стали создавать качественные работы. Тем не менее, все еще встречаются «изъяны» — неправильное количество пальцев на руках (или ногах), косые лица, неразборчивые надписи.
В обучающей выборке алгоритма могли быть изображения с такими надписями, но никто не говорил ему, что единственно правильный вариант написания этой фразы именно «I love you», поэтому нейросеть просто смешивает все буквы, как смешивает моделей в Баленсиага и фото Папы Римского.
«Мы разбиваем слова на популярные части, например „велотренажёр“ → „вело“, „трен“, „ажёр“», — рассказывает Владимир Морозов. Такой формат удобен тем, что токены получаются более осмысленными, чем если бы текст делился на буквы, но занимают меньше памяти в сравнении со словарями, которые состоят из слов.
Но довольно теории, ведь все понимают, ради чего мы тут собрались, — ради наркоманских картиночек, конечно же! Попробовать CLIP Guided Diffusion HQ можно много где. Естественно, все вычисления будут выполняться не на вашем компьютере, а на удалённой виртуальной машине. Код требует мощного графического ускорителя с кучей памяти. Нет, можно запускать и на CPU, но тогда результат работы увидят только ваши внуки.
В целом, правила формулирования промта (запроса) для Ideogram точно такие же, как и для Stable Diffusion и MidJourney — о них мы рассказывали в отдельной статье. Но так как тут мы имеем дело с надписями, стоит отметить еще одну важную вещь: при вводе запроса текст надписи, которую вы хотите увидеть на картинке, лучше всего вводить внутри кавычек — так нейросеть лучше поймет, какой текст должен быть на рисунке.
Скорее всего, вам достанется средней паршивости Tesla K80, на котором картинка в хорошем качестве считается полчаса–час. Но если повезёт (чаще всего это бывает ночью), можно заполучить и Tesla T4, а это уже означает ускорение почти на порядок плюс некоторые дополнительные возможности, о которых я скажу далее.