CLIP: текстовый энкодер
Урок объясняет, как текст промпта вообще попадает в модель — через текстовый энкодер CLIP.
Текстовый энкодер CLIP — сеть, которая превращает слова промпта в набор числовых векторов (эмбеддингов), понятных U-Net.
Почему нужен «переводчик» текста
U-Net работает с числами, а промпт — это слова. Кто-то должен перевести «рыжий кот на подоконнике» в числовую форму, отражающую смысл. Это делает текстовый энкодер CLIP. Он обучен так, что описание и подходящая картинка получают близкие представления — поэтому его эмбеддинги «знают», как слова связаны с визуальными понятиями.
От слов к токенам и эмбеддингам
Сначала промпт режется на токены (примерно кусочки слов), затем каждый токен превращается в вектор, и сеть обрабатывает всю последовательность, учитывая контекст. На выходе — таблица эмбеддингов: по вектору на токен. Эту таблицу U-Net и читает через cross-attention.
# Грубая имитация токенизации промпта (не настоящий CLIP)
prompt = "рыжий кот на подоконнике"
tokens = prompt.split()
for i, t in enumerate(tokens):
print("токен", i, "->", t)
print("Всего токенов:", len(tokens))Вывод:
токен 0 -> рыжий токен 1 -> кот токен 2 -> на токен 3 -> подоконнике Всего токенов: 4
Ограничение длины
У текстового энкодера есть лимит на число токенов (классически — 77). Если промпт слишком длинный, лишнее обрезается или обрабатывается частями. Поэтому важные слова лучше ставить ближе к началу — это практическое следствие, которое пригодится в разделе про промпт-инжиниринг.
Как работает под капотом
CLIP обучали на огромном наборе пар «картинка — подпись», сближая их представления. В результате текстовый энкодер выучил «визуальный смысл» слов: что «закат» связан с тёплыми цветами, а «киберпанк» — с неоном. Stable Diffusion берёт уже обученный текстовый энкодер CLIP и пользуется его эмбеддингами как условием для U-Net. Качество понимания промпта во многом определяется именно этим энкодером.
Частые ошибки
- Думать, что модель «читает» промпт как человек. Она оперирует токенами и векторами; редкие слова и опечатки могут пониматься неточно.
- Не учитывать лимит токенов. Сверхдлинные промпты частично теряются — лучше быть лаконичным и расставлять важное вперёд.
- Путать текстовый энкодер с U-Net. CLIP только кодирует текст; рисует (предсказывает шум) U-Net.
Почему модель «не понимает» некоторые слова
CLIP выучил визуальный смысл слов из того, что встречал в обучающих подписях. Если понятие в данных было редким (узкий технический термин, имя малоизвестного объекта, слово на другом языке), эмбеддинг получится размытым, и модель нарисует нечто приблизительное. Это объясняет частое разочарование: одни промпты «магически» работают, другие словно игнорируются. Дело не в капризе модели, а в том, насколько хорошо понятие было представлено в обучающих подписях.
Отсюда практический навык: если слово не срабатывает, замените его на более частое и наглядное описание. Вместо редкого термина опишите то, что он означает, простыми словами — «светящиеся неоновые вывески ночью» вместо узкого жаргонизма. Так вы попадаете в ту область эмбеддингов, которую модель знает уверенно, и получаете предсказуемый результат.
Итог
- Текстовый энкодер CLIP превращает промпт в эмбеддинги, понятные U-Net.
- Промпт делится на токены (классический лимит — 77), каждый получает вектор смысла.
- Качество понимания запроса во многом определяет именно текстовый энкодер.