
Простой пакет Python, который завершает существующую модель точную настройку и сценарии генерации для модели генерации текста GPT-2 OpenAI (в частности, «маленькие» 124M и «средние» версии гиперпараметра 355 м). Кроме того, этот пакет позволяет легче генерировать текст, генерируя в файл для легкого курирования, что позволяет префиксам заставлять текст начать с данной фразы.
Этот пакет включает и вносит минимальные изменения низкого уровня в:
Для создания настоятельно рекомендуется использовать графический процессор, хотя вы можете генерировать использование ЦП (хотя и гораздо медленнее). Если вы тренируетесь в облаке, используя колаборторную ноутбук или Google Compute Engine VM с тенсрофом глубокого обучения, настоятельно рекомендуется. (Поскольку модель GPT-2 размещена на GCP)
Вы можете использовать GPT-2-Simple для переподготовки модели, используя графический процессор бесплатно в этой колаборторной ноутбуке, которая также демонстрирует дополнительные функции пакета.
Примечание: разработка на GPT-2-SIMPE в основном была заменена AitextGen, который обладает аналогичными возможностями генерации текста ИИ с более эффективным временем обучения и использованием ресурсов. Если вам не требуется использование TensorFlow, я рекомендую вместо этого использовать AitextGen. Контрольные точки, обученные с использованием GPT-2-SIMPLE, также могут быть загружены с использованием Aitextgen.
GPT-2-Simple может быть установлен через PYPI:
pip3 install gpt-2-simple Вам также необходимо будет установить соответствующую версию TensorFlow 2.x (MIN 2.5.1) для вашей системы (например, tensorflow или tensorflow-gpu ).
Пример для загрузки модели в локальную систему, создавая ее в наборе данных. и генерировать немного текста.
ПРЕДУПРЕЖДЕНИЕ: Предварительная модель 124M, и, следовательно, любая производимая модель, составляет 500 МБ! (Предварительная модель 355 м составляет 1,5 ГБ)
import gpt_2_simple as gpt2
import os
import requests
model_name = "124M"
if not os . path . isdir ( os . path . join ( "models" , model_name )):
print ( f"Downloading { model_name } model..." )
gpt2 . download_gpt2 ( model_name = model_name ) # model is saved into current directory under /models/124M/
file_name = "shakespeare.txt"
if not os . path . isfile ( file_name ):
url = "https://raw.githubusercontent.com/karpathy/char-rnn/master/data/tinyshakespeare/input.txt"
data = requests . get ( url )
with open ( file_name , 'w' ) as f :
f . write ( data . text )
sess = gpt2 . start_tf_sess ()
gpt2 . finetune ( sess ,
file_name ,
model_name = model_name ,
steps = 1000 ) # steps is max number of training steps
gpt2 . generate ( sess ) Сгенерированные контрольные точки модели по умолчанию в /checkpoint/run1 . Если вы хотите загрузить модель из этой папки и сгенерировать из нее текст:
import gpt_2_simple as gpt2
sess = gpt2 . start_tf_sess ()
gpt2 . load_gpt2 ( sess )
gpt2 . generate ( sess ) Как и в случае с TextGenRnn, вы можете генерировать и сохранить текст для последующего использования (например, API или бота), используя параметр return_as_list .
single_text = gpt2 . generate ( sess , return_as_list = True )[ 0 ]
print ( single_text ) Вы можете передать параметр run_name в finetune и load_gpt2 , если вы хотите сохранить/загрузить несколько моделей в папке checkpoint .
Существует также интерфейс командной строки как для создания, так и для генерации с сильными значениями по умолчанию для простого запуска на облачной виртуальной машине с графическим процессором. Для создания (который также будет загружать модель, если нет,):
gpt_2_simple finetune shakespeare.txt И для поколения, который генерирует тексты в файлы в папке gen :
gpt_2_simple generateБольшинство тех же параметров, доступных в функциях, доступны в виде аргументов CLI, например:
gpt_2_simple generate --temperature 1.0 --nsamples 20 --batch_size 20 --length 50 --prefix " <|startoftext|> " --truncate " <|endoftext|> " --include_prefix False --nfiles 5Смотрите ниже, чтобы увидеть, что делают некоторые из аргументов CLI.
NB: сначала перезапустите сеанс Python, если вы хотите фиксироваться в другом наборе данных или загрузить другую модель.
Метод GPT-2, который использует для генерации текста, немного отличается от таких, как другие пакеты, такие как TextGenRnn (в частности, генерирование полной текстовой последовательности исключительно в графическом процессоре, и декодирование его позже), что не может быть легко исправлено без взлома базового кода модели. Как результат:
truncate в функцию generate , чтобы сбрать текст только до указанного конечного токена. Вы можете соответствующим образом сократить length .)prefix , нацеленный на начальные последовательности токенов, и truncate , нацеленное на последовательность конечных токенов. Вы также можете установить include_prefix=False , чтобы отказаться от токена префикса во время генерации (например, если это что -то нежелательное, как <|startoftext|> )..csv в finetune() , он автоматически проанализирует CSV в формат, идеально подходящий для обучения с GPT-2 (включая Pregining <|startoftext|> и суффиксы <|endoftext|> к каждому текстовому документу, чтобы приведенные выше truncate приведены приведенные выше утешительные трюки). Это необходимо для правильного обработки как кавычек, так и новейсов в каждом текстовом документе.batch_size , который делится на nsamples , что приводит к гораздо более быстрому поколению. Очень хорошо работает с графическим процессором (может установить batch_size до 20 на K80 в Колаборатории)!batch_size=1 и около 88% GPU V100.overwrite=True в Finetune, которая продолжит обучение и удаляет предыдущую итерацию модели без создания дубликатной копии. Это может быть особенно полезно для передачи обучения (например, в значительной степени GPT-2 на одном наборе данных, а затем на другом наборе данных, чтобы получить «слияние» обоих наборов данных).gpt2.encode_dataset(file_path) . Выход представляет собой сжатый файл .npz , который будет загружаться намного быстрее в графический процессор для создания.gpt2.load_gpt2(sess, model_name='774M') и gpt2.generate(sess, model_name='774M') .Макс Вульф (@minimaxir)
Проекты Max по открытым исходным кодам поддерживаются его Patreon. Если вы нашли этот проект полезным, любой валютный вклад в Patreon приветствуются и будет использоваться в хорошем творческом использовании.
Грань
Этот репо не имеет никакого отношения или отношений с OpenAI.