Это был темный, серый зимний вечер, и я обнаружил, что, как и слишком много раз в прошлом, смотрю на экран своего компьютера, бесконечно просматривая бесполезные статьи, начиная от самопомощи снежинками и заканчивая учебниками по плавлению мозгов.
Фух, это был длинный приговор.
В любом случае, по причинам, которые я не помню, я обнаружил, что читал эту статью: https://www.digitaltrends.com/cool-tech/japanese-ai-writes-novel-passes-first-round-nationanl-literary-prize /
Искусственный интеллект написал роман, и более того, он почти выиграл литературный приз! Так что это не только не мусор, но и достаточно, чтобы обмануть экспертов! Я был заинтригован и начал гуглить…
Я узнал, что на самом деле существует Месяц национального поколения романов, когда люди представляют свои лучшие попытки создать роман, содержащий не менее 50 000 слов. Я посмотрел на код / результаты и был очень заинтригован. Вы можете найти его здесь: https://github.com/NaNoGenMo
А потом как будто у меня уже не шла пена во рту от волнения, я прочитал это: https://github.com/zackthoutt/got-book-6
Парень написал следующую книгу по игре престолов, используя глубокое обучение! В голове проносились всевозможные мысли. Теперь я мог это видеть ...
Я собирался взять некоторые данные и пропустить их через свой удивительный алгоритм. Я собирался опубликовать роман. Он собирался стать бестселлером. Очередной большой фантастический сериал. Я бы неплохо справлялся с продажей книг. Затем придет Netflix и получит права на мою книгу. Они сделают трилогию фильмов. Я встречусь с Дженнифер Лоуренс. У меня сейчас все будет хорошо. Пригласили бы меня на интервью по телевидению. Интервьюер восхищалась моей работой, рассказывала, что она такая большая фанатка, и спрашивала, в чем секрет моей, казалось бы, сверхчеловеческой способности создавать так много удивительных романов. Я самодовольно улыбался, смотрел в камеру и кричал:
«Ха-ха, идиоты! Я просто скормил все книги Колеса Времени с помощью алгоритма, который я украл с github у какого-то случайного чувака! Вы похожи на людей из того фильма Аль Пачино, где он делает программу для Simone. Ты получил Симонеда! "
Пандемониум разразится. Люди начнут сомневаться в своей реальности. Они будут бояться брать в руки другую книгу, если их любимый автор окажется машиной.
Я не мог дождаться. Я приступил к осуществлению своего коварного плана.
30 минут спустя…
Я сдался.
Да, оказывается, большинство алгоритмов не так хороши для создания хороших романов. Фактически, они производят действительно бессвязные и забавные результаты:
«Я унаследовал компанию, потому что будущее вызвало аплодисменты его брата. родители имели глупый успех, сударыня, теперь действительно, и женская форма в индивидуальном окрасе. теперь разглагольствования случились, и девица, всегда выигрывала за любой подарок, через шесть ».
Я явно не собирался никого впечатлять этой прозой, не говоря уже о Netflix и Дженнифер Лоуренс. Я был разочарован. У меня не было опыта в глубоком обучении и ресурсов для потребления невероятного количества данных, поэтому я едва ли мог надеяться превзойти эти усилия так называемых экспертов.
Если бы только был жанр, в котором эти случайные слова можно было интерпретировать как гениальность. И тут меня осенило. Поэзия! Что такое поэзия, как не набор случайных слов, сложенных вместе? Это эквивалент современного искусства в литературе. Хорошо, прошу прощения у всех, кто любит и читает стихи. Я уверен, что это может быть красиво и многозначительно. Но это никогда не нравилось моим неискушенным вкусам. Я предпочитаю простые сказки с мечами. И драконы. И мудрые старики с длинными седыми бородами.
Но мне было любопытно попробовать и посмотреть, какой результат я могу получить с поэзией. Так начался мой маленький проект.
Данные
Данные, которые я решил использовать, были Листьями травы Уолта Уитмена. Даже такой плебей, как я, может оценить Уолта Уитмена! Вы можете найти это в Project Gutenberg, который является ресурсом для работ, не защищенных авторским правом, или работ, которые сейчас находятся в общественном достоянии: https://www.gutenberg.org/
Я нашел текстовый файл «Листья травы» и сохранил его на своем компьютере. Назовем его data.txt.
Алгоритм
Я решил использовать алгоритм Зака Таута, который он использовал для создания следующей книги Игры престолов: https://github.com/zackthoutt/got-book-6
Где мне запустить это?
Что вам нужно знать о глубоком обучении, так это то, что вам нужно много вычислительной мощности для запуска моделей. В идеале вам нужен ресурс графического процессора, чтобы сделать за вас тяжелую работу. У меня не было графического процессора, но, к счастью, я баловался (акцент на баловстве) с глубоким обучением раньше и записался на курс Джереми Ховарда по нему: http://www.fast.ai/
В курсе fast.ai вы запускаете все свои модели в облаке, поэтому ваша машина не ограничивает вас. Мы устанавливаем инстанс EC2 на Amazon Web Services (AWS), за которым стоит GPU (это будет инстанс P2). Вам необходимо запросить у Amazon доступ к этому; что вы можете, если вы являетесь участником его курса.
После запуска экземпляра вы запускаете свой код в записной книжке Jupyter, подключенной к этому экземпляру. Я чувствовал, что настройка всего этого для запуска вашей модели глубокого обучения была сложной задачей для такого непрофессионала, как я, поэтому я собираюсь сделать пошаговое руководство, как это сделать. Теперь есть много способов сделать это. Но я просто покажу вам, как я это сделал. Возможно, это не лучший способ. Но это работает.
Наконец, учебник
Я предполагаю, что вы знаете, как запускать инстансы EC2. Для этого вы хотите использовать один из AMI AWS Deep Learning. Таким образом, вам не нужно беспокоиться об установке каких-либо пакетов глубокого обучения. Я выбрал AMI AWS Deep Learning (Amazon Linux).
Теперь выберите экземпляр p2. Скорее всего, это будет экземпляр p2.xlarge, если только вы не крупный игрок, получивший разрешение на создание еще более крупного экземпляра.
Когда все будет в порядке, запустите свой экземпляр.
Теперь откройте терминал и подключитесь к вашему EC2. Вы знаете, что делать: используйте терминал в Mac или Putty в Windows. Вы можете узнать, как подключиться к своему экземпляру по SSH, щелкнув правой кнопкой мыши экземпляр EC2 и выбрав параметр «Подключиться». Команда будет похожа на эту:
ssh -i your-ec2-key.pem ec2-user@ec22–212–21–23–21.compute-1.amazonaws.com
Ты в! И все уже настроено, потому что мы выбрали Deep Leaning AMI. Ну, все, кроме нескольких мелочей ...
Одна из библиотек, используемых для глубокого обучения, - Tensorflow. Мы хотим использовать для этого упражнения Tensorflow версии 1.0.0. Причина в том, что код github мы будем использовать в более поздних версиях. Вероятно, это достаточно простое обновление, чтобы изменить код, чтобы исправить это, но я ленив и просто хочу запустить это ****.
Нам нужно изменить нашу версию, сначала удалив существующий пакет Tensorflow и переустановив 1.0.0.
#Uninstall pip uninstall tensorflow # Install version 1.0.0 pip install tensorflow==1.0.0
Затем нам нужно оптимизировать настройки нашего графического процессора, потому что Amazon по какой-то причине не делает это автоматически:
# optimize GPU sudo nvidia-persistenced sudo nvidia-smi — auto-boost-default=0 sudo nvidia-smi -ac 2505,875
Еще одна вещь, которую нам нужно сделать, чтобы гарантировать, что наш алгоритм глубокого обучения действительно использует графический процессор в этом экземпляре, - это установить путь к библиотеке для CUDA:
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64
Выполнено! Теперь мы готовы запустить Jupyter. Вам нужно запустить эту команду:
jupyter notebook --no-browser --port=8888
Очевидно, это тоже непросто. Теперь вам нужно открыть новую вкладку / окно в вашем терминале. И запустите эту команду (с вашим ключом и идентификатором EC2), чтобы вы могли запустить Jupyter на локальном хосте 8000:
ssh -i EC2key.pem -L 8000:localhost:8888 [email protected]
Хорошо! Теперь мы действительно готовы начать кодирование, то есть копирование и вставку чужого кода. Откройте localhost: 8000, и вы должны увидеть запуск Jupyter. Вам может потребоваться аутентификация для доступа к нему, и в этом случае вам нужно передать строку в URL-адресе. Это можно найти в выводе вашего терминала, в котором вы выполнили команду Jupyter notebook.
Теперь нам нужно переместить данные в нашу записную книжку. Я предполагаю, что вы были большим последователем и уже сохранили данные. Мы назвали его data.txt. Вы можете легко переместить это в Jupyter, используя кнопку «Загрузить» в правом верхнем углу домашней страницы.
Теперь наши данные находятся в Jupyter, все, что нам нужно сделать, это использовать на них наш украденный код!
Вы можете взять записную книжку с кодом здесь: https://github.com/zackthoutt/got-book-6/blob/master/got-book-generator.ipynb
Либо скопируйте его, либо переместите всю записную книжку с помощью команды загрузки на свой сервер Jupyter. Измените ссылку в коде на свои данные
book_filenames = sorted(glob.glob("/data/*.txt"))
Становится:
book_filenames = sorted(glob.glob("data.txt"))
А теперь вы просто нажимаете «Беги» и проходите каждую ячейку сверху вниз!
Обучив свою модель (и вы можете поиграть с гиперпараметрами), вы можете выбрать слово и сгенерировать образец поэзии Уитмана. Он должен быть сохранен в папке выходных данных на вашей домашней странице Jupyter. Вот образец:
я слышу новые речные полосы на западном небе,
охваченные ими блуждания по
твоей стороне остального, сирень в музыке, крики, длинные, невыносимые, впредь в твоей задаче музыка,
здесь с семенем просто целью, больше без капли и века, достаточно людей,
дальше с Индией!
столетия - овсянка!
всегда мне было приятно, и ее время или земля!
подтверждая для песков разговоров и паузу в его сторону,
война разрушена, лучше всего, затем свободно в одиночестве,
бескрайний вдоль морей,
одаренный
снаружи в сторону и его лицо
лба Америки,
манхэттен на севере, как вся золотая земля,
вниз сквозь многие далекие армии, защищающие своего брата?
Посмотри на это. Это не имеет никакого смысла. Но, может быть, это так? Я говорю о гениальности. Теперь вы тоже можете стать следующим Джеймсом Джойсом, и они будут пытаться понять, что вы имели в виду, на долгие годы.
Вот еще один:
камни и пена победы, время и ночь пересечения,
однако качайте голос и
общие любители,
мы больше не выдерживаем разыгрывания плана из ваших целей, либертад,
все гуляют,
в руинах два героя медленно
заняты с ней - шансы на отдых подготовлены, чтобы ее знать ставит здесь
вокруг - трогай,
Мой товарищ по механике
горе,
после того, как я на переулках и в космосе так красиво вышло - сделано
теперь солнце со всеми своими поворотами в последний,
яркое из нескончаемых судорожных путешествий,
их сферы,
ибо мои руки снова лежат на белой руке в болото,
я знаю как феодальный голос, неотделимо грубая и круглая рука такова,
пока я не слышу, как гимн омывает кубические инструменты, и медведь закрывает хриплыми шагами в замерзшем часовом,
строитель, забитый в угол и отчаявшийся, существо,
застенчивое и пахнущее, моряки, заносчивые маленькие, и, звеня плещущимся водоворотом, сидели,
и настоящие покровы лет над головой поднимались или кувыркались город.
Разве это не слезы на глазах?
Кроме того, если работа вашей модели занимает много времени, убедитесь, что вы запускаете ее на своем графическом процессоре. Вы можете проверить это, запустив:
nvidia-smi
Если отображается сообщение «Нет запущенного процесса», даже если ваша модель обучается, это означает, что графический процессор не подключен должным образом. Опять же, убедитесь, что вы выполнили эту строку:
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64
Надеюсь, это было полезно!
Пожалуйста, поделитесь своими результатами. Мне было бы любопытно посмотреть, что у вас есть. :)
Билал