Найти тему

Как написать промт для нейросети, чтобы она вас правильно поняла. Часть вторая: акценты

Оглавление
Кавалерийские кролики от TurboText
Кавалерийские кролики от TurboText

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

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

divine scene,closeup,(((sticker art))),(((naturally interacting with the environment:1.5))),(((seamless:1.5))),((strong environmental divine light)),((soft shadows)),(((soft dark black color palette:3))),(merge realms of the sunrise and tapestry of dualities),enigmatic beings with ethereal silhouettes,(digital dreamscape:1.5).

Что означают все эти скобочки и цифры, для чего они нужны и нужны ли вообще?

Скобки

На многих платформах, где используются генеративные модели на базе Stable Diffusion, работает простой способ дать понять нейросети, что на какую-то деталь из вашего описания нужно обратить внимание и уж точно не игнорировать: достаточно заключить нужное слово в круглые скобки. Чем больше пар скобок вы поставите, тем большее значение нейросеть будет придавать слову в них. Разумеется, границы здравого смысла тоже есть: обычно одной-двух пар, в редких случаях — трёх, бывает достаточно. Поставьте больше — и картинка может исказиться нежелательным образом.

Это хорошо видно на примере с нейросетью KREA. Запрос: "цветок в форме звезды"; число зерна (Seed) зафиксировано для четырёх разных генераций a, b, с и d, в каждой из них сделано по шесть попыток. Слово "звезда" постепенно обрастает круглыми скобками, и посмотрите на изменения:

Аналогично работает и "отвлечение внимания" нейросети. Если вы не хотите, чтобы на какую-то деталь делался слишком большой акцент, но удалять её из общей сцены тоже нежелательно, возьмите ключевое слово в [квадратные] скобки. Чем [[[больше пар скобок]]], тем меньше внимания нейросеть уделит выделенному слову.

Веса

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

(слово:n.n), где n.n — десятичная дробь.

Вес определяет, насколько важную роль играет это слово в вашем описании. По умолчанию, то есть безо всяких акцентов, вес каждого слова равен 1. Двигаясь от единицы в сторону нуля, вы уменьшаете важность слова; двигаясь в сторону двойки — увеличиваете. Рекомендуемый диапазон весов — от 0.5 до 1.6. При выходе за эти границы результаты генерации могут быть непредсказуемыми.

Эти два способа универсальны и специфичны одновременно. На разных платформах и с разными моделями может работать либо первый, либо второй, либо оба; где-то они работают немного не так, а где-то не работает ни один. Выяснить это можно экспериментальным путём или в обучающих материалах от разработчиков ресурса. Например, модель Leonardo Kino XL игнорирует множественные скобки, зато откликается на веса. Если вы читали предыдущую статью, то можете помнить дуб с растущим под ним грибом, который на самом деле на картинке отсутствует из-за порядка слов в запросе:

-3

Не меняя этого порядка (первым по-прежнему идёт дуб, и только потом — гриб), я попробую повлиять на результаты генерации и заставить Leonardo всё-таки вырастить гриб. В тексте запроса a big oak tree with yellow leaves, an orange specked mushroom underneath я последовательно увеличиваю вес слова mushroom (гриб), не меняя Seed. Вот что получилось:

Leonardo AI, модель Leonardo Kino XL
Leonardo AI, модель Leonardo Kino XL

Нетипичные случаи

А вот на платформе TurboText веса и скобки работают немного иначе. Здесь для того, чтобы повысить важность слова, его нужно повторить в тексте запроса, этот повтор заключить в круглые скобки и указать вес от 0.1 до 2, а чтобы понизить — сделать то же самое, но с квадратными скобками. Пример: "Белый пушистый кролик с седлом (седло:n.n) на спине" (вместо n.n подставляются соответствующие веса):

TurboText, стиль: реализм, версия: v3
TurboText, стиль: реализм, версия: v3

Важный момент: в TurboText слово обязательно нужно ещё раз написать в скобках, а не просто заключать в скобки слово в тексте, как на других ресурсах, иначе трюк не сработает. Картинка в правом нижнем углу сгенерирована по запросу "Белый пушистый кролик с (седлом:1.2) на спине", без повтора слова "седло". Как видите, в результате оно просто выпало из сюжета.

Сочетание квадратных скобок и числового значения веса [слово:n.n] не работает на других платформах (во всяком случае, насколько мне известно).

Возможные ошибки

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

Ошибка 1. Сочетать два метода расстановки акцентов не рекомендуется: они могут начать конфликтовать, и вы не добьётесь желаемого результата. Если платформа позволяет использовать оба метода, выберите что-нибудь одно.

Ошибка 2. Не нужно заключать в скобки целые предложения. Нейросети соотносят слова в запросах с так называемыми токенами — смысловыми единицами, понятными алгоритмам. Короткие слова чаще соответствуют одному токену; длинные разбиваются на несколько. Когда мы хотим сделать акцент на каком-то слове, для нейросети это выглядит как увеличение важности одного или нескольких токенов. Чем больше токенов вы попытаетесь обозначить как важные, тем бессмысленнее становится выделение. Если всё вокруг выделено, то, по сути, не выделено ничего: всё без исключения одинаково важно.

Надеюсь, что принцип расстановки акцентов стал понятен. Детали придётся уточнять отдельно для каждой платформы, поскольку они могут сильно различаться. Помните, что модели, основанные не на Stable Diffusion, могут не подчиняться этим правилам. Например, в "Шедевруме" они не работают, потому что это собственная генеративная модель Яндекса YandexART; они не работают и в "Кандинском". Но если вы не ограничиваете себя этими двумя отечественными разработками и пользуетесь целым набором самых разных нейросетей, эти приёмы определённо могут вам пригодиться.