Генерация текста, переобучаем GPT-2.
@NoHateGPT-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) Запускаем код.
Все должно завертеться, закрутиться и вы должны увидеть что-то такое:
![](/file/109add9ffd2aec875c6fe.png)
Каждые 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
И теперь у нас должна измениться подсказка командной строки:
![](/file/2c22cb6cc387f4ddde7e4.png)
Далее выполняем 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 чтобы получить нужный результат.