Или: мистическое искусство превращения списка заклинаний D&D в гораздо более длинный список гораздо более странных заклинаний.

с Джанель Шейн

Уровень: несчастный подмастерье. Возможность использовать терминал для установки пакетов (в идеале уже установлен python), а также возможность изменять папки и перемещать файлы и тому подобное. Для этого руководства кодирование не требуется.

Так! Вы хотите стать волшебником!

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

Использование Spell очень похоже на выполнение команд на вашем собственном компьютере, за исключением:

1. Он заставляет использовать git для отслеживания файлов (чтобы вы не читали заклинания, для которых нет контрзаклинания).
2. Команда запускается удаленно, используя возможности графических процессоров Spell (да, вы использовать саму ману вселенной, доступную по разумной цене)
3. Он не перезаписывает файлы в вашем каталоге, если вы не запустите команду spell cp runs/##

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

И команды для удаленного запуска заклинания, удобно, примерно такие же, как и для запуска локально.

Так что! Начнем.

Во-первых, зарегистрируйте аккаунт.

Выберите свое имя волшебника (ваше имя пользователя) и сверхсекретное слово силы (ваш пароль)
Обратите внимание, что вражеский волшебник, который знает ваше имя и слово силы, будет иметь над вами большую власть, поэтому раскрывайте их волшебникам только вы полностью доверяю. Никогда не открывайте их Третчеру Твинобороду, волшебнику большой хитрости и двуличности.

Когда вы пробормотаете свое имя и слово силы, вы увидите следующее видение. Не пугайтесь.

Вы можете выполнить все это руководство с планом ЦП, если хотите, но бесплатный кредит на GPU, который предоставляется вместе с учетной записью GPU, во много раз больше, чем вам понадобится для выполнения этого руководства. Для этого урока я обучил десятки моделей на графическом процессоре K80 (вы знаете, с красивыми золотыми крыльями) и в итоге потратил чуть более 1 доллара на кредит. Итак, вы можете подписаться на тарифный план GPU.

Теперь сделайте глубокий вдох, сконцентрируйте свою силу внутри себя и ознакомьтесь с удобным разделом «Начало работы».

Первая инструкция говорит, что нужно что-то набрать в терминал. (Если вы работаете на Mac, ваш терминал находится в разделе "Программы / утилиты")

pip install spell

Эта команда использует установщик пакета python, pip, для установки заклинания и всех его зависимостей. (Вам понадобится уже установленный Python)

Моя собственная установка не обошлась без происшествий. Несколько раз небо вспыхнуло темнотой, и голоса выдали тревожные ошибки красным шрифтом. Похоже, моя знакомая miniconda, которая установила для меня python, взяла на себя ответственность защищать python от всех изменений. Я закатал рукава халата и начал бороться с этим, все время ругаясь. Миниконда намного сильнее, чем кажется, и мы наконец пришли к компромиссу: мне разрешили бы установить заклинание только в том случае, если бы я был готов позволить миниконде отгородить его для моей защиты.

Выполнив следующую команду, я создал безопасную среду для установки и запуска Spell.

$ conda create -m -n spellenv

И чтобы вызвать эту среду, мне нужно ввести следующее в любом новом окне терминала:

$ source activate spellenv

Наконец, я смог установить Spell через pip install spell.

Признание: в первый раз, когда я попробовал это, я случайно набрал pip install shell , который тоже работал, но установил что-то совершенно другое. Мастера должны быть осторожны, чтобы не произносить заклинания неправильно, иначе результаты могут сильно отличаться от предполагаемых.)
Также не рекомендуется: pip install smell (ваш компьютер улавливает запах сыра по вашему выбору), pip install swell (ваш компьютер будет вдвое больше размером через нечетные промежутки времени).
(ладно, не совсем.)

Чтобы узнать, сработала ли установка, просто произнесите это простое слово:

$ spell

И ЛО:

(spellenv) Azraras-Book-of-Power:~ azrarastoutfrogg$ spell
Usage: spell [OPTIONS] COMMAND [ARGS]…
Options:
 -h,--help Show this message and exit.
 --version Show the version and exit.
Commands:
cp Retrieve a file or directory
feedback Provide feedback to the Spell team
help Display help information
hyper Create hyperparameter searches
info Describes a run. Displays info such as start and end 
 time as well as run parameters such as apts, pips, 
 and mounts.
jupyter Start a Spell Jupyter session
keys Manage public SSH keys registered with Spell
kill Kill a current run
login Log in with your username or email
logout Log out of current session
logs Retrieve logs for a run
ls List resource files
model-servers Manage model servers
passwd Set a new password for your Spell account
ps Display run statuses
rm Specify one or more resources to delete. These can be 
 [run_id] or uploads/[directory]
run Execute a new run
stats Display performance statistics for a run
status Display account and billing information
stop Stop a run with status 'Running'
upload Upload a file or directory
whoami Display current user information
workflow Execute a new workflow
workspaces List workspaces
(spellenv) Azraras-Book-of-Power:~ azrarastoutfrogg$

Вселенная открыта для вас. Ваш разум завораживает возможностями. Заклинания за пределами вашего понимания! Сама сила убить или узнать, кто вы на самом деле.

Следующая команда - войти в систему! Это будут учетные данные, которые вы использовали при создании учетной записи.
ДА. Ваше имя волшебника и ваше слово силы. Если вам удалось спасти их от волшебника Twestybeard.

Тип:

$ spell login

Введите свои учетные данные.

И снова LO!

(spellenv) Azraras-Book-of-Power:~ azrarastoutfrogg$ spell login
Enter your spell username or email: [email protected]
Enter your spell password: 
Hello, Azrara Stoutfrogg!
(spellenv) Azraras-Book-of-Power:~ azrarastoutfrogg$

Теперь вы готовы наложить свое первое заклинание - простое колдовство, которое сначала изучает каждый ученик волшебника.

Если я запускаю эту команду самостоятельно, не применяя силу заклинания (если я запускаю ее на моем собственном компьютере, а не удаленно подключаясь к машинам Заклинания), я просто говорю «эхо» (то есть «повторять за мной»), а затем фраза, которую я хочу повторить. Я слышу, как мой голос возвращается ко мне.

(spellenv) Azraras-Book-of-Power:~ azrarastoutfrogg$ echo hello-world
hello-world
(spellenv) Azraras-Book-of-Power:~ azrarastoutfrogg$

Если я запущу эту команду с помощью Spell, произойдет гораздо больше (включая забавные смайлы). Удаленный компьютер оживает, чтобы запустить эту команду для меня, а Spell обрабатывает запрос и передает данные / программы на удаленный компьютер и с него. Это занимает, ммм, 30 секунд, и включает в себя двойное конфетти в конце.

(spellenv) Azraras-Book-of-Power:~ azrarastoutfrogg$ spell run echo hello-world
Counting objects: 13, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (13/13), done.
Writing objects: 100% (13/13), 5.06 MiB | 102.00 KiB/s, done.
Total 13 (delta 6), reused 0 (delta 0)
To git.spell.run:aiweirdness/d8f3f7b5925131ebeeba9e32c7e75b6b7c1b52d7.git
 * [new branch] HEAD -> br_e8118d3b24aa8a2823900b518fc0e219d1dd5dcc
💫 Casting spell #75…
✨ Stop viewing logs with ^C
✨ Machine_Requested… done
✨ Building… done
✨ Run is running
hello-world
Retrieving modified or new files from the run
✨ Saving… done
✨ Pushing… done
🎉 Total run time: 31.07015s
🎉 Run 75 complete
(spellenv) Azraras-Book-of-Power:~ azrarastoutfrogg$

Но ждать! Мы ускорим выполнение этой простой команды, используя огромную мощь (и красивые золотые крылья) графического процессора K80!

(spellenv) Azraras-Book-of-Power:~ azrarastoutfrogg$ spell run 
--machine-type K80 echo hello-world
Everything up-to-date
💫 Casting spell #76…
✨ Stop viewing logs with ^C
✨ Machine_Requested… done
✨ Building… done
✨ Run is running
hello-world
Retrieving modified or new files from the run
✨ Saving… done
✨ Pushing… done
🎉 Total run time: 36.483634s
🎉 Run 76 complete
(spellenv) Azraras-Book-of-Power:~ azrarastoutfrogg$

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

Не бойся. Подобно вьючным ламам, которые представляют собой невыносимую королевскую боль для похода длиной в 1 милю и легкого обеда на пикнике, подход Spell доказывает свою ценность в более длительных путешествиях.

Итак, попробуем что-нибудь посложнее! Давайте использовать силу заклинания для создания новых мощных заклинаний для Dungeons & Dragons! Начав со списка существующих заклинаний, я обучу программу машинного обучения, называемую рекуррентной нейронной сетью (RNN), чтобы генерировать больше. Я буду использовать программу textgenrnn, проект Макса Вульфа с открытым исходным кодом.

Во-первых, чтобы отделить эту работу от других наших проектов, мы создадим папку для заклинания и будем выполнять в ней свою работу.

(spellenv) Azraras-Book-of-Power:~ azrarastoutfrogg$ mkdir spell
(spellenv) Azraras-Book-of-Power:~ azrarastoutfrogg$ cd spell
(spellenv) Azraras-Book-of-Power:spell azrarastoutfrogg$

Теперь мы получаем textgenrnn:

$ git clone https://github.com/minimaxir/textgenrnn

Нам также понадобится файл-оболочка python, который я написал для textgenrnn, который позволяет нам создавать и обучать новые модели textgenrnn с помощью одной команды, а также обрабатывает для нас сохранение и загрузку моделей. (Эта оболочка не относится к Spell - вы также можете использовать ее для локального запуска textgenrnn)

А затем скопируйте наш набор данных с именами заклинаний D&D в отдельную папку в textgenrnn/data. Назовем его dd_spells.txt и поместим в textgenrnn/data/dd_spells (мы можем получить его из github, но не делайте это через git clone, потому что Spell запутается, если файл принадлежит сразу двум вложенным репозиториям git. ).

Что можно скачать: textgenrnn python save wrapper, набор данных мороженого, набор данных заклинаний d & d, набор данных bios символов d & d.

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

textgenrnn
|-- data
| |-- dd_spells (don't git clone me!)
| | |-- Combined_DnD_spells.txt
| |-- ice_cream (don't git clone me either!)
| | |-- IceCream_sorted.txt
| |-- dd_bios (no cloning for me!) 
| | |-- dd_bios.csv
|-- textgenrnn_save_wrapper.py

Теперь у меня есть все загруженные наборы данных в моей папке данных, готовые к работе. И у меня есть файл python-оболочки, который мы будем использовать для запуска textgenrnn в корневой (верхней) папке.

Однако мне нужно сообщить местному проекту, что они существуют. Spell предписывает религиозное использование git, поэтому стоит поискать основные команды git, но вот те, которые мы будем использовать в основном:

$ git add -A -n

Добавляет все новые / измененные файлы в репозиторий git, а также обрабатывает удаленные файлы и папки. -n делает это пробный запуск. Вам нужно запустить эту команду только в том случае, если вы хотите увидеть, что изменилось.

$ git add -A

Добавляет все новые / измененные файлы в репозиторий git, а также обрабатывает удаленные файлы и папки. На этот раз все по-настоящему.

$ git commit -m “Explain what I was trying to do"

Сохраняет эти изменения в репозитории git.

Если вы забудете это сделать, Spell пожалуется, когда вы попытаетесь запустить заклинание удаленно.

Теперь волшебство происходит! (Каламбур предназначен. Каламбуры - мощный источник маны.)

Чтобы обучить новую модель из текстового файла в data/dd_spells/Combined_DnD_spells.txt и сохранить в weights/dd_spells:

$ spell run --machine-type K80 --pip textgenrnn \
 “python textgenrnn_save_wrapper.py --model_name=dd_spells \
 --new_model --num_epochs=1 \
 --data_file=dd_spells/Combined_DnD_spells.txt”

(Если вместо этого вы хотите использовать ЦП, опустите --machine-type K80.)

Вы увидите много результатов, но можете сесть, попить чай из драконьего цветка и дождаться сладких заклинаний. Если вы используете K80, тренировка займет около минуты.

(spellenv) Azraras-Book-of-Power:textgenrnn azrarastoutfrogg$ spell run --machine-type K80 --pip textgenrnn \
python “textgenrnn_save_wrapper.py \
--model_name=dd_spells \
--new_model --num_epochs=1 \
--data_file=dd_spells/Combined_DnD_spells.txt”
Everything up-to-date
💫 Casting spell #77…
✨ Stop viewing logs with ^C
✨ Machine_Requested… done
✨ Building… done
✨ Run is running
Using TensorFlow backend.
2018–10–30 03:30:28.448246: I 
...
Training new model w/ 2-layer, 128-cell LSTMs
Training on 253,682 character sequences.
Epoch 1/1
1/1981 […………………………] — ETA: 1:43:24 — loss: 3.9558
 3/1981 […………………………] — ETA: 35:08 — loss: 4.4925 
 5/1981 […………………………] — ETA: 21:28 — loss: 4.2348
 7/1981 […………………………] — ETA: 15:36 — loss: 3.9939
 9/1981 […………………………] — ETA: 12:20 — loss: 3.7671
 11/1981 […………………………] — ETA: 10:15 — loss: 3.6544
 13/1981 […………………………] — ETA: 8:48 — loss: 3.5629 
 15/1981 […………………………] — ETA: 7:44 — loss: 3.4864
 17/1981 […………………………] — ETA: 6:55 — loss: 3.4237
 19/1981 […………………………] — ETA: 6:16 — loss: 3.3784
 22/1981 […………………………] — ETA: 5:30 — loss: 3.3378
 25/1981 […………………………] — ETA: 4:56 — loss: 3.2933
 28/1981 […………………………] — ETA: 4:28 — loss: 3.2542
 31/1981 […………………………] — ETA: 4:06 — loss: 3.2299
 34/1981 […………………………] — ETA: 3:48 — loss: 3.2108
 37/1981 […………………………] — ETA: 3:32 — loss: 3.1897
 … (trimmed output from these other lines)
 1975/1981 [============================>.] — ETA: 0s — loss: 1.8494
 1978/1981 [============================>.] — ETA: 0s — loss: 1.8488
 1981/1981 [==============================] — 47s 24ms/step — loss: 1.8480
####################
Temperature: 0.2
####################
Stone of the Sharm
Spell Share
Sharow of the Share
####################
Temperature: 0.5
####################
Alarce of the Stone
Summon Conding Peath
Chee Freath
####################
Temperature: 1.0
####################
Shiff of Canst
Wall of Turous Enival
Chental Redicting
✨ Saving… done
✨ Pushing… done
🎉 Total run time: 1m20.255094s
🎉 Run 77 complete
(spellenv) Azrara-Book-of-Power:textgenrnn azrarastoutfrogg$

Приведенная выше команда заставила textgenrnn просмотреть весь набор данных только один раз (то есть за одну эпоху). Потери - это мера textgenrnn его собственного прогресса: чем лучше он думает, что соответствует входному набору данных, тем меньше потери. Затем, в конце эпохи, он выводит несколько примеров заклинаний. Температура похожа на уровень творчества, определяющий, насколько вероятно, что textgenrnn будет использовать свой лучший выбор при добавлении новых букв.

Наш прогресс автоматически сохраняется в Заклинании, и мы можем использовать наши сохраненные модели для продолжения обучения этой модели или для создания дополнительных заклинаний. Мы можем использовать эту команду, чтобы увидеть все файлы модели, которые textgenrnn_save_wrapper.py сохранили для нас.

# replace 77 with your run id
$ spell ls runs/77
- - weights
188 Nov 05 10:35 textgenrnn_config.json
461 Nov 05 10:35 textgenrnn_vocab.json
1117528 Nov 05 10:35 textgenrnn_weights.hdf5
$ spell ls runs/77/weights
- - dd_spells

Вот! Как и ожидалось, у нас есть каталог weights/dd_spells.

Давайте создадим больше заклинаний!

Оболочка python автоматически сохраняет нашу модель в weights/dd_spells, который, как мы видели, был сохранен на выходе runs/77.

Чтобы сэмплировать из модели, сохраненной в weights/dd_spells, нам нужно будет добавить (или, говоря языком Спелла, смонтировать) каталог weights в наш новый прогон. Мы можем сделать это с помощью флага--mount или -m.

Информация слева от двоеточия сообщает Spell, что мы монтируем (в данном случае directoryruns/77/weights), а информация справа от двоеточия сообщает Spell, что вызывать смонтированный каталог в нашем новом запуске (в данном случае мы ' сохраните имя каталога одинаковым, weights, поскольку это то, что ожидает наша оболочка).

$ spell run --pip textgenrnn --mount runs/77/weights:weights \
 "python textgenrnn_save_wrapper.py \
 --model_name=dd_spells --n_gen=10 --temperature=0.2"

Обратите внимание, что мы запускали это с использованием ЦП, потому что для этого нам не требуется ускорение графического процессора. Эта команда даст нам 10 заклинаний при очень низкой температуре. То есть заклинания, которые модель считает «безопасными».

Sharm of the Shape
Sharing Shape
Sharm of the Strike
Shadow Sharing Thants
Sharm of the Sharity
Sharper of the Sharing Chants
Chant of the Share
Sharm of the Sharm
Chanter Share
Shadow Stone

Предположим, нам нужно что-то более экзотическое. Используйте более высокую температуру!

$ spell run --pip textgenrnn --mount runs/77/weights:weights \
 "python textgenrnn_save_wrapper.py \
 --model_name=dd_spells --n_gen=10 --temperature=1.0"

Тогда получаем следующее:

Weallin
Shoct of mutQilefry
Lightted Undick Drickes
Dimp of the Aumthaus
Touch of the Four Warves, Uningal Peats
Shael of the Braveos
Count of the Nsites, Greater
Repengue Anlumonrat/isclaunt
Seleak's Cosu Constal
Sheep ob the Enroud

Они определенно более экзотичны, это точно. Применяйте их с большой осторожностью, поскольку эти заклинания созданы очень неполностью обученной моделью.

Если мы ищем заклинания только одного типа, мы можем указать начало, которое должно иметь каждое заклинание. Может, попробуем огонь?

$ spell run --pip textgenrnn --mount runs/77/weights:weights "python textgenrnn_save_wrapper.py --model_name=dd_spells --n_gen=10 --temperature=1.0 --prefix='flaming'"
flaming tofy
flaming Summonin
flaming Bersoous
flaming Licks
flaming Entral
flaminggshosmity
flaming Weith
flaming Breath of tag Tatce
flaming Presictralat
flaming Fire, Greath

Примечание: НЕ используйте «пылающий тофи», это НЕ леденец. Не спрашивайте, откуда я знаю.

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

Чтобы наш textgenrnn_save_wrapper.py и Spell работали правильно, нам сначала нужно загрузить наши веса из предыдущего прогона, 77, и, чтобы сохранить наши результаты и добавить их в git, мы делаем как раньше:

$ spell cp runs/77
$ git add -A && git commit -m "results from first D&D spell training"

Теперь давайте загрузим модель из dd_spells и потренируемся для другой эпохи в текстовом файле в data/dd_spells/Combined_DnD_spells.txt (обратите внимание, я использую ярлыки -t для --machine-type и -m для --mount:

$ spell run -t K80 --pip textgenrnn -m runs/77/weights/dd_spells:weights/dd_spells "python textgenrnn_save_wrapper.py --model_name=dd_spells --num_epochs=1 --data_file=dd_spells/Combined_DnD_spells.txt"

Обратите внимание, что мы удалили --new_model= из наших команд. Это означает, что вместо того, чтобы начинать модель с нуля, мы начинаем с сохраненной модели.

Как и раньше, модель идет и обучается без нас, и через минуту или около того (примерно в 10 раз дольше, если обучение на ЦП) она возвращается с ответами из новой, улучшенной модели.

1977/1981 [============================>.] - ETA: 0s - loss: 1.6396
1980/1981 [============================>.] - ETA: 0s - loss: 1.6394
1981/1981 [==============================] - 45s 23ms/step - loss: 1.6394
####################
Temperature: 0.2
####################
Summon Shape IIII
Shadow Shape
Spell Shape
####################
Temperature: 0.5
####################
Sonic Star
Trap Spirit
Hail of Death
####################
Temperature: 1.0
####################
Obo Starg
Preserve Trump
Jightning Hadance
✨ Saving… done
✨ Pushing… done
🎉 Total run time: 1m10.063085s
🎉 Run 79 complete

Однако, как показывает одно из заклинаний, созданных моделью при температуре 1.0, эта модель кажется проклятой. Такое случается. Это отрезвляющее напоминание о том, что выходные данные нейронных сетей, генерирующих текст, нельзя использовать, если они не будут предварительно проверены человеком с хорошим вкусом. Нейронная сеть может вызвать восторг в один момент, а Badthnig Slurr - в следующий. Нас может утешить то, что эта нейронная сеть не понимает, что означают слова.

Тем не менее, чувствуя сильное нарушение равновесия во Вселенной, мы можем решить обучить нашу нейронную сеть генерировать вещи, с меньшей вероятностью создающие / вызывающие / сохраняющие хаотические злые мерзости. Вместо этого мы можем научить его создавать ароматы мороженого.

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

Здесь мы загружаем модель из dd_spells, обучаем текстовый файл в ice_cream/IceCream_sorted.txt и сохраняем новую модель как dd_ice_cream.

$ spell run -t K80 --pip textgenrnn -m runs/77/weights/dd_spells:weights/dd_spells "python textgenrnn_save_wrapper.py --model_name=dd_spells --save_name=dd_ice_cream --num_epochs=1 --data_file=ice_cream/IceCream_sorted.txt"

Результат примерно такой:

####################
Temperature: 0.2
####################
Caramel Chocolate
Chocolate Chocolate
Banana Caramel Chip
####################
Temperature: 0.5
####################
Batterberry Cream Coffee
Heanted Madge Caramel Cheesecake
Black Cerry Cheese
####################
Temperature: 1.0
####################
Blicking Dark Caramel
Salted Wanana Maded Peanut Burt Cheesecacach
Beanbutter Appleder
✨ Saving… done
✨ Pushing… done
🎉 Total run time: 32.842697s
🎉 Run 80 complete

Чтобы сделать выборку из этой обученной модели, мы просто монтируем полученную модель из нашей серии мороженого (runs/80/weights/dd_ice_cream) и меняем имя модели, из которой мы производим выборку.

$ spell run -t K80 --pip textgenrnn -m runs/80/weights/dd_ice_cream:weights/dd_ice_cream "python textgenrnn_save_wrapper.py --model_name=dd_ice_cream --n_gen=10 --temperature=0.6"

Результат:

Boney Poconut
Fresh Licked Chocolate Beap
Oane Coffee Almond Pream S'n HOrdes
Backberry Mandy Almond Cream
Milk Chocolate Pecan
Honey Frownie
Dourted Pover
Malted And Meppermint
Ored Chocolate Chip
Chrockely Pie

К счастью, модель не полностью забыла о своем прошлом как модель, генерирующая заклинания D&D.

Итак, используя огромную мощность графических процессоров Spell, мы можем обучать модели намного быстрее, чем на центральном процессоре. Приятно ждать секунды, а не несколько минут, прежде чем появятся новые славные (или проклятые) заклинания D&D. Но где это действительно удобно, так это обучение на более крупных и сложных наборах данных, текст, который занимает целые абзацы, а не пару слов.

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

Чтобы обучить предложениям и абзацам, где каждая строка имеет какое-то отношение к предыдущей строке, нам нужно только добавить еще одну команду к нашему вызову.

$ spell run -t K80 --pip textgenrnn \
 "python textgenrnn_save_wrapper.py --model_name=dd_bios \
 --large_text --new_model --num_epochs=6 \
 --data_file=dd_bios/dd_bios.csv"
✨ Run is saving
Nov 08 14:12:32: saving: Saving 'weights/dd_bios'
Nov 08 14:12:32: saving: Saving 'textgenrnn_config.json'
Nov 08 14:12:32: saving: Saving 'textgenrnn_weights.hdf5'
Nov 08 14:12:33: saving: Saving 'textgenrnn_vocab.json'
Nov 08 14:12:33: saving: Compressing saved files
✨ Run is pushing
Nov 08 14:12:35: pushing: Saving build environment for future runs
✨ Total run time: 1h0m9.898649s
✨ Run 81 complete

Обратите внимание, что это ДОЛЖНА быть новая модель. Мы не можем обучить модель с большим текстом, исходя из обычной модели.

Выборка тоже немного отличается, поскольку нам нужен один большой кусок текста. Мы можем указать длину нашего текста с помощью --max_gen_length.

$ spell run --pip textgenrnn --mount runs/81/weights/dd_bios:weights/dd_bios "python textgenrnn_save_wrapper.py --model_name=dd_bios --large_text --n_gen=1 --max_gen_length=6000 --temperature=0.4"

А когда мы пробуем, мы видим историю жизни товарища-искателя приключений.

Cras the Griffstorgoun
Half-elf
Ranger
“Raria was raised in a simple and crazy with the ship who were the surface and a small village of the wards of the trees of the collective and started a path of the world with his demon and his head on the community of a group of her parents were her around and wanted to be a strength of respect. He has been actually a strange noble town of the Summer of an adventure in the destruction of the temple of the Gracks of the Cales of the Older charming the way of the halfling with the princess of the forest of his mother who would be her first child, and the only thing along the cave in the group of course, and he was the trade of an adventurer that he was the stone of the town of the world, and the religions of the slavers were a few months of the manor he could be the creatures of the streets of his mother and the strength of an underground to his tendency at the age of 15 and bear the new world with a power of the family of the Surrowan. Thording her family was a great crowd and the right that he was a storm of the Neerly start of the Aris, and a bit of her father and so he was born in the world. He can take the same archiness in the dribble of the wilds. Traditionally, he was provided with a protective and leave her to do what they were the only child of the library. The former family was a strength and as the Hunter was only to be a way of his learning and she had spent in the heart of the streets needed to the River and the elves of the Grando.

История жизни на удивление бессмысленна. Я не слышал о храме Граков Калес Старших или эльфах Грандо, и я не знаю, что имеется в виду под Тордингом. Выборка при более высокой температуре только делает слова более странными.

Kirshalisan NhaKay Aestraus
Human
Warlock
“Sister is a life in a sking of pushed that the village couldnt show strong with a despite of the Empire of More:pission. One mustak’s father came more than a resparent who scraps for questions for the manor he gets at the lords. When he met Kalia had died to recondect to some of the company. At 32 years as the nest of the truth, what they harden gorguttel! In tinges by a facing for the boy maxest. Ive what he liked the Sense of adventures to the fellow and shiping with apprenticed by his way in the age of his head.

Есть еще одна стратегия, которую мы можем применить - настаивать на том, чтобы нейронная сеть использовала только те слова, которые она видела раньше, и только самые распространенные слова.

Этот метод строит модель, которая строит текст слово за словом, а не букву за буквой. Размер словаря по умолчанию составляет 20 000 слов, так что он все еще может генерировать МНОГО странного. Но он может лучше использовать свою память, поскольку фраза, скажем, «Я бросаю лимонный полет», теперь состоит всего из 3 символов вместо 18.

Вот команда для создания новой модели с именем dd_bios_word и обучения ее в нашем файле dd_bios.csv.

$ spell run --machine-type K80 --pip textgenrnn \
 "python textgenrnn_save_wrapper.py --model_name=dd_bios_word \
 --new_model --large_text --word_level --num_epochs=5 \
 --data_file=dd_bios/dd_bios.csv"
####################
Temperature: 1.0
####################
in that situations , my anger was mischief by my heritage .
after being expected , officially spending more time , zaela realized that they had just seen having things to gain arrogant , much anyway . thus wasn ' t toward her in names . however her parents were now treated her some joy to her new mission , and gave her at the retreat . she proved strangely pretty hard , but was being quite enough for a loud attempt to lie and unlikely on her own finger . her brother married , long lived for the natanian as he learned of magic . however , he loved and studied for his upbringing . having left to live in the forest with his adoptive mother , some well , and some early fewer waking upon his fallen and mother traveled 6 since , tending the emergency visit of the by families . this news of the prince was always clear the feathers to faded , a breland king , a dwarven into the heart of a great city . unfortunately , when the man died a child and his birth , left his father in the deepest caves , having been studying the middle unexpectedly ' s apprentice , not kindly to goblins , becoming a people of hire . "
✨ Saving… done
✨ Pushing… done
🎉 Total run time: 19m47.463368s
🎉 Run 83 complete

И для образца сгенерированного текста:

$ spell run --pip textgenrnn -m runs/83/weights/dd_bios_word:weights/dd_bios_word "python textgenrnn_save_wrapper.py --model_name=dd_bios_word --large_text --word_level --n_gen=20 --max_gen_length=6000 --temperature=1.0"
half — elf
“ here is the understanding of the tavern .
monk
above — orcs , micah found his first custom from the community of both selling the fighting sparkle of the world . it now exploring the recent lily of the back of the city of neverwinter , nearly whims and takes a few more finnton expensive style books on jewelry .
“ the bad people have seen straight to her for music , though she knows nothing in her mind — arcane or thats bone . for wonder , she heard from good memory that her got talking and noya got on itself .
warlock
born only child warlock on strict long few years ago , not this need . if she discover the past my story came upon , the fire decided that i had an day ! and luck , i still woke up in there . much about said ( you would be forward to me ? investigation a pirate voice appeared and i could have enough control moving me ? i sleep ! , maybe others write , i know it had an air danger . i was no longer welcome into the world . eventually , we wandered the incident , left their suspicions about the shadow , lands on the price . it was here im encouraged to certainly avoid my hands . we would them believe the cook we were the next thing .

Если я правильно понимаю, у нас есть монах-полуэльф по имени «Вот понимание таверны» и безымянный колдун без расы, у которого был день и, возможно, опасность с воздуха. Поистине, искусственный интеллект поразителен.

Теперь, когда мы закончили произносить заклинания, не забудьте закрыть свою виртуальную машину и очистить ее - о, правильно. Никакой уборки делать не надо. Графические процессоры уже вернулись на свои места и поют свою знаменитую хоровую музыку. Вы платите только за то время, которое они фактически выполняют ваши команды графического процессора, а не за хранилище, или за время, которое вы тратите на то, чтобы менять каталоги и забывать, где вы кладете свои заклинания, и искать эти надоедливые заклинания. Зачерпните себе порцию мороженого с хрустящим пирогом, устройтесь в удобном кресле и транслируйте сериалы на свой хрустальный шар. Ты заслужил это.