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

Некоторое время назад я присутствовал на небольшом разговоре об Я, робот, влиятельном сборнике Айзека Азимова. Но не только оригинальную версию книги: в Нидерландах проходит мероприятие Nederland Leest (Нидерланды читают), и они выбрали для продвижения книгу Я, робот. В качестве уловки последняя глава была написана комбинацией писателя Рональда Гипхарта и робота. Во время беседы, которую я посетил, я узнал, что робот, о котором идет речь, на самом деле не был роботом. Скорее, менее романтизированная, чем роботы, но уж точно не менее интригующая технология под названием Рекуррентная нейронная сеть. Эта сеть была обучена на множестве книг определенного автора и могла генерировать текст со стилистическими чертами этого автора!

Для тех, кто не знаком с этой технологией — есть много очень хороших ресурсов, объясняющих рекуррентные нейронные сети (RNN) и дающих примеры их использования. Например, известная статья Андрея Карпатого Необоснованная эффективность рекуррентных нейронных сетей». Я всегда нахожу видео YouTube на RNN очень понятным, возможно, вы тоже!

В этой части блога я не буду объяснять работу сети, но суть таких сетей в том, что у них есть память. И, как оказалось, когда мощный нелинейный алгоритм может также рассуждать, используя прошлое, он становится очень мощным в предсказании будущего. К сожалению, ванильные RNN не могли работать с памятью дальнего действия. И когда мы пытаемся скопировать чей-то стиль письма, нам обязательно нужно оглянуться не на одно слово! Вот тут-то и появляются сети с долгой кратковременной памятью. Эти сети могут решить проблему нехватки памяти, добавив механизм остановки и пропуска информации в состояние ячейки . Он может забытьнекоторую информацию из предыдущего состояния, но также может сохранить эту информацию и перенести ее в следующее состояние!

Мне нравится думать о LSTM как о своего рода конвейере, который постоянно решает, что оставить, что выбросить и сколько каждого действия необходимо, когда. Идея этой части блога состоит в том, чтобы не делать ее слишком технической, я мог бы объяснить все шаги LSTM позже. А пока представьте себе это как нейронную сеть с интеллектуальным механизмом, который использует свое предыдущее состояние,свои текущие входные данные и свои предыдущие выходные данные( под предыдущим я имею в виду временной шаг t-1) и пытается выяснить, каким должен быть наиболее вероятный текущий результат.

Самое смешное, что генерация текста на самом деле то же самое, что и предсказание следующего фрагмента текста по предыдущему фрагменту текста! И именно поэтому LSTM можно использовать в качестве генеративной модели!

Это было очень краткое введение в генерацию текста и LSTM. Теперь поговорим о Hearthstone!

Карты Hearthstone и сообщество

Hearthstone — чрезвычайно популярная карточная игра, основанная на лоре Warcraft. В нем сотни карт, и каждая из них влияет на одну игру Hearthstone. В нем много чего происходит, и если хотите, вы можете узнать больше об этой игре где угодно в Интернете, но для целей этого блога важно понимать, что является отдельным Hearthstone. карта. В этом проекте я в основном имел дело с тремя архетипами карт: Заклинание, Миньон и Оружие. Ниже приведен пример карты каждого из трех архетипов.

Вы также можете видеть, что атака Кел’Тузада равна 6, а его здоровье — 8. Эти свойства типичны для карт типа Миньон.

Эти карты имеют гораздо больше функций, таких как класс или редкость, но я не буду сейчас вдаваться в подробности. Я предполагаю, что либо вы знаете, как работают карты Hearthstone, либо это очень легко найти :). Кстати, попробуйте игру, если хотите, она простая и увлекательная и отлично работает на мобильных устройствах.

В текущем расширении Hearthstone в игре есть 1594коллекционные карты и многое другое, что нельзя коллекционировать. Это очень много карт! Вы можете просмотреть все карты на Hearthpwn.

Но на этом карты не заканчиваются. Сообщество Hearthstone огромно и креативно. Есть несколько сайтов, подобных этому, где люди могут создавать свои собственные карты и публиковать их на сайте. Создать собственные карты Hearthstone предельно просто: все ограничивается лишь вашим воображением и некоторыми основными правилами игры. Это делает эту задачу потенциально очень интересной для ИИ!

Но сначала нам действительно нужны данные карты!

Доступ к Hearthstone API

Через Mashape доступен API Hearthstone. Этот API имеет конечные точки для каждого типа карты, и это очень удобно для наших целей! Итак, во-первых, давайте получим данные.

Нам нужно создать бесплатный ключ API. Когда мы это сделали, давайте создадим функцию Python, которая вызывает API:

Теперь попробуем вызвать API:

Прохладный! Если вы хотите иметь возможность использовать эти результаты в автономном режиме и избежать повторного вызова API, вы можете сохранить эти результаты на диск:

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

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

На этом первая часть этого небольшого блога заканчивается! В этой части мы загрузили данные из Hearthstone API и выполнили предварительную предварительную обработку. В следующей части мы будем формировать эти данные для использования в глубоком обучении!

Удачного кодинга и игр Hearthstone!

P.S. ЧАСТЬ ВТОРАЯ: https://bit.ly/2uU4JsF