Генерация текста, переобучаем GPT-2.

Генерация текста, переобучаем GPT-2.

@NoHate

GPT-2 - нейросеть обученная командой OpenAI.

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

Благо open-source сообщество большое, и нашелся человек который подготовил для нас основу для переобучения (finetuning) GPT-2 сети, чтобы она могла генерировать текст на нужную нам тематику.

Github - https://github.com/minimaxir/gpt-2-simple

Кто сможет разобраться сам - можете дальше не читать.

Если у нас дома есть мощная видео-карта (порядка 16GB видео памяти), то мы можем проделывать все действия локально. Но так как моя видео-карта не справилась, то пришлось использовать бесплатные мощности Google.

Сервис https://colab.research.google.com/ позволяет нам бесплатно использовать обучение на GPU.

Для начала подготовим наш текст. Нам потребуется файл формата CSV (одна колонка), где на каждой строчке будет отдельный текст (именно такого вида тексты и будет генерировать сеть в итоге). Файл должен быть порядка 2-5MB (для начала сойдет).

Настраиваем Google Colab

1) Переходим на https://colab.research.google.com/
2) Клацаем File -> New Python 3 notebook
3) В открывшемся окне клацаем Runtime -> Change Runtime Type и выбираем GPU.
4) Открываем слева список файлов и загружаем туда наш файл (не забываем формат CSV).
5) В окошечко с кодом вставляем код от сюда: https://gist.github.com/plzdontshare/f561ec9fea4c03c076e817af74440b84
6) Запускаем код.

Все должно завертеться, закрутиться и вы должны увидеть что-то такое:


Каждые 100 проходов сеть будет печатать примеры чему она научилась. Следим чтобы loss и avg уменьшались, если они не уменьшаются - вы что-то сделали не так.

После того как сеть обучится, мы можем погенерировать немного текстов.

Нажимаем вверху +Code. В новом окошке для кода вводим:

gpt2.generate(sess, length=250, temperature=0.7, nsamples=5, batch_size=5)

И запускаем.

Вдоволь наигравшись, мы можем скачать обученную модель к себе, чтобы больше не зависеть от гугла, и генерировать текста дома или на сервере.

Опять клацаем +Code, и вводим:

!zip -r /content/checkpoint.zip /content/checkpoint

После запуска этой команды у нас должен создаться файл checkpoint.zip в корне, который мы можем скачать к себе (просто кликнув правой кнопкой -> Download).

Если не получается скачать из браузера, то делаем следующее:

1) Подключаем Google Driver (сверху есть кнопочка)
2) Нажимаем +Code и пишем код:
gpt2.copy_checkpoint_to_gdrive(run_name='run1')
3) Запускаем, и после выполнения идем смотреть на гугл диск. Скачиваем архив от туда.


Настраиваем локальную генерацию

Далее будем учиться ставить все это дело на сервер (ну или локально, если у нас дома Linux).

Если что-то не получается, то я хуево объясняю, и читаем описание тут https://www.tensorflow.org/install/pip?lang=python3

Для начала убедимся что у нас стоит Python3:

python --version

Если видим Python 3.x.x.x, то все ок, если же что-то вроде Python 2.7.17, то пробуем запустить так:

python3 --version

Опять сверяемся, если произошла ошибка, то бежим гуглить как установить Python 3.

Далее переходим в какую-нибудь папку и делаем:

$ python3 -m venv env
$ source ./env/bin/activate

И теперь у нас должна измениться подсказка командной строки:

Далее выполняем 3 команды:

pip install -U pip
pip install gpt-2-simple
pip3 install --upgrade tensorflow==1.15

После чего у нас должно установиться все необходимое.

В нашу папку (в которой мы творили весь этот беспредел) распаковываем скачанный архив checkpoint.zip.

Создаем там же файл run.py со следующим содержимым:

https://gist.github.com/plzdontshare/320c9be36edf3c5b562812ae009f0818

И запускаем:

$ CUDA_VISIBLE_DEVICES=-1 python run.py

Если все сделали правильно, в файле texts.txt будут наши тексты (20 шт).

Играемся с параметрами в файле run.py чтобы получить нужный результат.

Report Page