Textual Inversion

textual inversion — обучение нового текстового представления

Раздел
Адаптеры
Сокращ.
TI
Обновлено
11.08.26

Textual Inversion учит новое текстовое представление концепта по примерам, сохраняя остальные веса генеративной модели замороженными. Полученный embedding загружается в совместимый текстовый энкодер и вызывается своей меткой в промпте.

Коротко

Textual Inversion обучает новое текстовое представление, не переписывая всю модель. Несколько изображений концепта помогают подобрать embedding — вектор или небольшую последовательность векторов. В промпте к нему обращаются через условную метку, например MIRA.

Если четыре фотографии показывают одну рыжеволосую девушку, обучение может связать её общие черты с меткой MIRA. После загрузки embedding фраза MIRA с борзой в зимнем саду соединяет выученное представление с новой сценой. Генеративная модель при этом использует свои прежние знания о платье, собаке, растениях и освещении.

Что здесь называют новым «словом»

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

Textual Inversion добавляет в этот путь пользовательскую метку и подбирает для неё новое представление. Выражение «научить модель слову» хорошо передаёт идею, но не буквально описывает процесс: сохраняется не словарное определение и не текст, а набор чисел в пространстве embeddings.

В оригинальной работе Textual Inversion авторы искали новое «слово» в embedding-пространстве замороженной text-to-image модели. Современная реализация может хранить один вектор или несколько. Во втором случае пользователь по-прежнему пишет одну метку, а загрузчик разворачивает её в последовательность служебных токенов.

Как проходит обучение

Общая схема выглядит так:

  1. Собираются изображения одного субъекта, предмета, материала или визуального приёма.
  2. Выбирается placeholder — текстовая метка, через которую к концепту будут обращаться.
  3. Её embedding часто инициализируется представлением близкого обычного слова: например, человек, собака или стиль.
  4. Обучающие изображения зашумляются, а модель пытается предсказать добавленный шум с учётом текста.
  5. Ошибка проходит назад только к обучаемому embedding; остальные выбранные веса остаются замороженными.
  6. В файл сохраняются получившиеся векторы и данные, необходимые загрузчику.

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

Исходная статья демонстрировала персонализацию по нескольким изображениям, в том числе по наборам из трёх–пяти примеров. Это описание эксперимента, а не универсальная норма. Нужное количество зависит от разнообразия концепта, качества данных и реализации обучения.

Что находится в файле

Результат Textual Inversion — не копия генеративной модели и не набор LoRA-поправок для её слоёв. Обычно файл содержит:

  • один или несколько обученных embedding-векторов;
  • имя или служебные имена токенов;
  • иногда метаданные формата и обучения.

Поэтому такой файл обычно гораздо компактнее полной модели. Точный размер не является свойством метода: он зависит от размерности текстового энкодера, числа векторов, формата контейнера и объёма метаданных.

Placeholder и embedding тоже не одно и то же. Placeholder — удобная строка в промпте, а embedding — числовые данные за ней. Некоторые загрузчики позволяют назначить файлу другую метку при подключении. Например, API Diffusers имеет отдельный параметр для переопределения token при загрузке.

Совместимость зависит от текстового тракта

Фраза «подходит любой модели того же семейства» слишком грубая. Для загрузки должны совпасть или корректно поддерживаться:

  • архитектура текстового энкодера;
  • размерность embedding;
  • токенизатор и способ добавления новых токенов;
  • число текстовых энкодеров в pipeline;
  • формат single-vector или multi-vector;
  • соглашения конкретного загрузчика.

Даже технически совместимый embedding может вести себя по-разному с двумя дообученными моделями. Текстовое представление осталось тем же, но генеративная часть по-разному переводит conditioning в изображение.

У pipeline с несколькими текстовыми энкодерами может понадобиться отдельное представление для каждого тракта или специальная логика загрузки. Поэтому название базовой архитектуры на карточке — полезная подсказка, но окончательный ответ дают документация файла и пробная генерация.

Textual Inversion, LoRA и DreamBooth

Эти названия отвечают на разные вопросы.

Метод Что обычно обучается Что подключается при генерации
Textual Inversion Новое текстовое представление Embedding и связанная с ним метка
LoRA Низкоранговые поправки к выбранным слоям Набор адаптерных весов
DreamBooth Персонализация субъекта через дообучение Полное или компактно сохранённое изменение модели

DreamBooth можно реализовать с помощью LoRA, поэтому эти две строки не всегда обозначают взаимоисключающие форматы. Textual Inversion отличается яснее: его основной обучаемый результат находится на текстовой стороне.

От trigger word в LoRA метка TI отличается механизмом. LoRA-триггер — текст, с которым адаптер научился связывать свои изменения. В Textual Inversion метка непосредственно указывает загрузчику и текстовому энкодеру на сохранённый embedding.

Положительные и отрицательные embeddings

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

Это не автоматический «исправитель качества». Отрицательный embedding отражает свои данные и способ обучения, может убирать вместе с нежелательными признаками полезные детали и по-разному работать с разными моделями. Его стоит воспринимать как ещё один элемент условия, а не как универсальный пресет.

Как использовать в графе генерации

Embedding загружается в тот текстовый тракт, который превращает промпт в conditioning. После этого его метка пишется в соответствующем положительном или отрицательном тексте. Точные узлы и синтаксис зависят от программы, но логика остаётся прежней:

файл embedding → совместимый tokenizer/text encoder
метка в prompt → выученный вектор → conditioning

Если pipeline содержит несколько энкодеров, значение имеет конкретный тракт, который получает embedding. Простое наличие файла в папке ещё не означает, что нужный энкодер его загрузил.

Почему результат бывает слабым или слишком «прилипшим»

Слабый эффект часто связан не с самой идеей TI, а с одним из четырёх мест:

  • embedding не загрузился или попал не в тот энкодер;
  • в промпте используется другая метка;
  • файл несовместим по размерности или формату;
  • замороженная модель плохо выражает нужный концепт через своё текстовое пространство.

Слишком узкий результат обычно указывает на данные и обучение. Если на всех фотографиях одна поза, один фон и одинаковая одежда, embedding может связать их с субъектом. Больше шагов не обязательно решают проблему: иногда они лишь закрепляют нежелательную связь.

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

С чем часто путают

  • Textual Inversion и любой embedding. Embedding — общее понятие; TI — способ обучить пользовательское текстовое представление по изображениям.
  • Имя файла и метка. Они могут совпадать, но загрузчик способен хранить или назначать другое имя токена.
  • Один токен и один вектор. Пользовательская метка может разворачиваться в несколько обученных векторов.
  • Совместимость и одинаковое расширение файла. Контейнер не гарантирует совпадение текстовых энкодеров.
  • Negative embedding и список запрещённых слов. Внутри находятся числовые представления, а не скрытая текстовая строка.

Частые вопросы

Textual Inversion меняет базовую модель?

Во время классического обучения остальные веса модели заморожены, а оптимизируется новый embedding. При загрузке он добавляется к текстовому тракту текущей сессии. Исходный файл базовой модели при этом не обязан изменяться.

Метка обязана выглядеть как специальный код?

Нет. Необычное имя снижает риск случайного совпадения с обычным текстом, но формат метки определяет токенизатор и загрузчик. Важнее точно использовать то имя, под которым embedding подключён.

Можно ли переименовать метку после обучения?

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

Почему multi-vector embedding занимает место в промпте?

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

Подходит ли TI для точного лица?

Метод способен передавать персональный субъект, что показано в исходной работе, но точность не гарантирована. Она ограничена данными и выразительностью замороженной модели. Сравнение с другими способами персонализации лучше проводить на одной проверочной сетке, а не по общему рейтингу методов.

Главное

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

Компактность здесь идёт вместе с зависимостью от tokenizer и text encoder. Поэтому перед использованием важнее проверить совместимость и имя метки, чем ориентироваться на расширение или размер файла.

Источники