Этот проект предоставляет скрипты для генерации текста с использованием архитектуры модели. Он включает утилиты для Byte Pair Encoding (BPE), определение модели, стратегии сэмплирования и скрипты для безусловной и интерактивной условной генерации текста.
encoder.py
: Обрабатывает Byte Pair Encoding (BPE) для токенизации и детокенизации текста.model.py
: Определяет архитектуру модели GPT-2 на основе Transformer с использованием TensorFlow.sample.py
: Реализует стратегии сэмплирования, такие как top-k и top-p (nucleus sampling), для генерации токенов из логитов вывода модели.generate_unconditional_samples.py
: Скрипт для генерации текстовых сэмплов безусловно, начиная с токена по умолчанию (<|endoftext|>
).interactive_conditional_samples.py
: Скрипт, который позволяет пользователям вводить промпт и интерактивно генерировать продолжения текста.
-
Python: Рекомендуется Python 3.7+.
-
TensorFlow: Этот код основан на TensorFlow 1.x. Убедитесь, что у вас установлена совместимая версия (например,
tensorflow==1.15
илиtensorflow-gpu==1.15
). -
Другие библиотеки: Установите необходимые пакеты Python:
pip install numpy regex fire
-
Веса модели и словарь: Вам необходимо загрузить предварительно обученные файлы модели GPT-2. Обычно они включают:
encoder.json
: Отображение словаря.hparams.json
: Гиперпараметры модели.vocab.bpe
: Правила слияния байтовых пар.- Файлы чекпоинтов модели (например,
model.ckpt.data-00000-of-00001
,model.ckpt.index
,model.ckpt.meta
).
Создайте следующую структуру каталогов:
models/ └── <model_name>/ (например, 124M) ├── encoder.json ├── hparams.json ├── model.ckpt.data-00000-of-00001 ├── model.ckpt.index ├── model.ckpt.meta └── vocab.bpe
Замените
<model_name>
на фактический размер модели (например,124M
,355M
и т.д.). Эти файлы можно найти в официальном репозитории OpenAI GPT-2 или других источниках, предоставляющих совместимые модели.
Для генерации текстовых сэмплов без конкретного промпта:
python generate_unconditional_samples.py --model_name <model_name> [options]
Пример:
python generate_unconditional_samples.py --model_name 124M --nsamples 2 --length 100
Для генерации текста на основе ваших промптов:
python interactive_conditional_samples.py --model_name <model_name> [options]
Пример:
python interactive_conditional_samples.py --model_name 124M --nsamples 1 --length 150
Скрипт запросит у вас ввод текста: Model prompt >>>
--model_name
: (Строка) Какую модель использовать (например,124M
). По умолчанию124M
.--seed
: (Целое число) Начальное значение для генераторов случайных чисел для воспроизводимости.--nsamples
: (Целое число) Количество возвращаемых сэмплов. Для безусловной генерации0
означает генерацию неограниченно.--batch_size
: (Целое число) Количество батчей (влияет на скорость/память).--length
: (Целое число) Количество токенов в сгенерированном тексте. ЕслиNone
, определяется гиперпараметрами модели.--temperature
: (Float) Контролирует случайность. Меньшее значение — менее случайный результат, большее — более случайный. По умолчанию1
.--top_k
: (Целое число) Учитывает толькоk
наиболее вероятных токенов.0
означает отсутствие ограничений. По умолчанию0
.--top_p
: (Float) Nucleus sampling. Учитывает наименьший набор токенов, чья кумулятивная вероятность превышаетp
. По умолчанию1
.--models_dir
: (Строка) Путь к родительской папке, содержащей подпапки моделей. По умолчаниюmodels
.
Огромное спасибо OpenAI за GPT-2 — вы настоящие сигмы в мире искусственного интеллекта. Именно благодаря вашей открытой реализации мы вообще тут что-то кодим, играемся с нейросетями и притворяемся, что понимаем, как это всё работает. Без вас мы бы сейчас, возможно, писали регулярки вручную или, страшно сказать, читали документацию. Так что низкий поклон, лайк, репост и звезда на GitHub от SynvexAI. P.S. Да пребудет с вами CUDA и минимальный loss.