Или: мистическое искусство превращения списка заклинаний 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 .
Если я правильно понимаю, у нас есть монах-полуэльф по имени «Вот понимание таверны» и безымянный колдун без расы, у которого был день и, возможно, опасность с воздуха. Поистине, искусственный интеллект поразителен.
Теперь, когда мы закончили произносить заклинания, не забудьте закрыть свою виртуальную машину и очистить ее - о, правильно. Никакой уборки делать не надо. Графические процессоры уже вернулись на свои места и поют свою знаменитую хоровую музыку. Вы платите только за то время, которое они фактически выполняют ваши команды графического процессора, а не за хранилище, или за время, которое вы тратите на то, чтобы менять каталоги и забывать, где вы кладете свои заклинания, и искать эти надоедливые заклинания. Зачерпните себе порцию мороженого с хрустящим пирогом, устройтесь в удобном кресле и транслируйте сериалы на свой хрустальный шар. Ты заслужил это.