Руководство по Soft Prompt / Софт Промпту (Мягким подсказкам)

(перевел на русский язык - Двачанон) (Ссылка на оригинал: https://rentry.org/shiso-softprompt-quickstart/)
Огромная благодарность Shiso за данный гайд.
Many thanks to Shiso for this guide.

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

Что такое Soft Prompt / Софт Промпт?

Софт Промпт - это способ изменить стиль и поведение вашего ИИ. Это делается путем обучения специального вида промпта, то бишь "подсказок", на основе набора определенных входных данных. С софт промптом весело экспериментировать, и он может помочь получить, интересные результаты! Хорошее представление о том, что может сделать софт промпт, можно получить, просмотрев список примеров с платформы NovelAI. Сообщество NovelAI уже некоторое время работает с ними и там их называют Modules (Модули) - Вот список Софт Промптов NovelAI для своей языковой модели Sigurd. Как правило, наиболее эффективные модули, направят ваш результат, с уклоном в сторону определенного литературного жанра, вымышленной вселенной или стиля написания конкретного автора. К сожалению, модули NovelAI не могут быть использованы с языковой моделью Pygmalion.

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

Первое: Софт Промпт не просто сжимает более крупный промпт, чтобы уместить его в 80 токенов. Хотя софт промпт может помочь Pygmalion усвоить новые факты и информацию, он наиболее эффективен для того, чтобы направить Pygmalion к правильному стилю и тону общения, что требует большого количества обучающих данных. Обучение на одном коротком рассказе не даст софт промпт, который напомнит Pygmalion все факты, содержащиеся в нем. Но если вы хотите, чтобы ваш бот существовал во вселенной "Звездных войн", вы можете обучить софт промпт на сериях романов по этой вселенной, чтобы получить результаты, написанные в том же стиле.

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

Как работает Софт Промпт?

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

Таким образом, по сути, мы превращаем первый блок нашего промпта в параметр обучения и выполняем тонкую настройку на его основе. Что мы получаем, когда делаем это? Похоже, что такой вид обучения позволяет хорошо настроить работу Pygmalion на определенный тон, выбор слов и форматирование во время общения. Эта процедура не очень помогает обучить Pygmalion новым понятиям, фактам и т.д. Если обучить софт промпт на серии книг "Гарри Поттер", то модель будет склонна использовать стиль написания как у Дж. К. Роулинг. Софт промпт будет побуждать модель писать о персонажах по имени Гарри и Гермиона. Но софт промпт не будет содержать сюжета книг. Насколько промпт поможет Pygmalion вспомнить факты о вселенной Гарри Поттера, будет зависеть от того, сколько сведений о книгах было у данной языковой модели изначально. Если ваша цель - вместить 3000 токенов истории о вашем персонаже в небольшое контекстное окно, к сожалению, софт промпт - не решение. Но если ваша цель - вписать свою историю в фэнтезийную серию, которая была включена в обучающий массив софт промпта, вас может удивить то, как хорошо Pygmalion все поймет!

Пример

Парадигматический пример в soft prompt white paper - это побуждение общей языковой модели действовать как переводчик с английского на французский. Один из способов сделать это - заполнить контекст множеством пар "вход - выход", таких как к примеру (морская выдра, мята, плюшевый жираф, сыр):

sea otter => loutre de mer
peppermint => menthe poivrée
plush giraffe => girafe peluce
cheese => fromage

Это эффективный способ инструктировать модель. Но оказалось, что мы можем сделать еще лучше. Вместо одного prompt, который ограничен, например, 2048 токенами примеров, софт промпт может уточнять на миллионах примеров. Это сильно подталкивает модель к пониманию того, что вы хотите, чтобы она сделала после символа "=>". Однако софт промпт не будет содержать все, что нужно знать о французском языке. Вместо этого она фокусируется на укреплении ассоциаций, которые модель уже знает. Направление модели на определенный стиль письма, выбор слов или тип форматирования - это то, с чем эта техника справляется лучше всего.

Обучаем Софт Промпт

Какой набор данных я должен использовать?

Для высококачественного софт промпта требуются высококачественные обучающие данные. Попробуйте начать с этого руководства по модулям NovelAI, чтобы получить представление о том, как собирать и обрабатывать текст для обучения. Если вы хотите лучше понять, что происходит на техническом уровне, это руководство дает общее представление. В конце этой страницы также есть несколько ресурсов по подготовке данных. В идеале вы должны стремиться собрать не менее 8 МБ данных для обучения. Обучение на больших, тематически объединенных наборах хорошо написанного текста дает наилучшие результаты.

Какие скрипты мне нужно запустить?

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

Самый простой способ начать - использовать Henk's Soft Prompt Tuner для запуска обучения на Colab. Начните с создания собственной копии этого блокнота, нажав Файл -> Сохранить копию на Диске. Обучение любой модели требует экспериментов, и создание копии позволит вам сохранить настройки блокнота для внесения изменений и итераций.

Если у вас есть мощный GPU, вы можете обучать софт промпт на локальной машине с помощью скрипта BullyNextDoor!

Пошаговая инструкция для Colab Tuner

Блокнот Colab будет ссылаться на пути к файлам на вашем Google Диске для загрузки и сохранения данных. Путь /content/drive/MyDrive/ относится к базовой папке вашего Google Drive. Многие проблемы при работе блокнота вызваны неправильным указанием этих путей.

  1. Соберите набор данных из очищенных файлов .txt, содержащих ваши обучающие данные. Поместите эти файлы в папку "dataset" на Google Диске. Если вы хотите поместить их в другую папку, вы можете указать dataset_path в блокноте.
  2. По желанию создайте txt-файл, содержащий стартовый промпт, и укажите путь к нему в trainingprompt. Теоретически это не должно сильно влиять на результат, так как это просто начальная точка для обучения, но некоторые люди говорят, что это помогает. Чем больше вех обучения, тем меньше эффект.
  3. Выберите модель, которую вы собираетесь тренировать в ckpt_path. Вы можете ввести путь к модели с huggingface, например, KoboldAI/OPT-6B-nerys-v2 или PygmalionAI/pygmalion-6b. Вы также можете обучить софт промпт для базовой модели вместо тонкой настройки, например, OPT-6B для Nerys или GPT-j-6B для Pygmalion. Это позволит вам обучить софт промпт, который будет работать на нескольких разных моделях с точной настройкой. Основа каждой модели KoboldAI включена в название в репозитории huggingface.
  4. Выберите параметры обучения. Стоит быстро просмотреть их определения, если вы впервые обучаете модель. Со всеми параметрами, включая размер токена, возможно, стоит поэкспериментировать. Мне нравится использовать несколько этапов, так как обучение обычно проходит быстро. Единственный параметр с простым правилом - это размер партии (batch_size), который должен быть настолько большим, насколько это возможно без заполнения VRAM. Мне пришлось уменьшить это значение до 380, чтобы обучить мягкую подсказку OPT-13B на Colab TPU.
  5. Заполните имя, описание и название для готовых файлов. В них с самого начала следует указать номер версии. Обучение модели - это итеративный процесс, поэтому будьте готовы к созданию нескольких версий, если вы хотите создать хорошую модель. Папка вывода по умолчанию покажет KoboldAI, где искать. Файл save_file совершенно необязателен. Вы можете использовать .mtjsp-файл для существующего софт промпта, чтобы обучить его дальше. Я никогда этим не занимался.
  6. Подключитесь к GPU или TPU на Colab. Вам понадобится TPU для обучения модели размером более 6.9B.
  7. Запустите скрипт и посмотрите, что произойдет!

Помогите, что-то пошло не так!

Начните с внимательного перечитывания ошибок в логах. Пожалуйста, дважды проверьте настройки Google Drive, как указано выше!

  • Убедитесь, что папка вывода существует на Google Диске. Если вы не запускали KoboldAI, вам нужно указать на существующую папку.
  • Убедитесь, что папка с набором данных названа правильно и что dataset_path указывает на правильное местоположение.
  • Убедитесь, что вы используете правильные имена файлов.

Я также рекомендую просмотреть исходный текст скрипта в блокноте Colab. В нем есть полезные комментарии о большинстве параметров и путях к файлам.

Спасибо многим людям на дискорд-серверах KoboldAI и Pygmalion за полезную информацию!

Edit
Pub: 03 Mar 2023 08:31 UTC
Views: 552