Создание chatbot-a с помощью sockeye (MXNet) на базе AWS EC2 и AWS DeepLearning AMI |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2017-07-10 08:29 архитектура нейронных сетей, алгоритмы машинного перевода, создание чат-ботов Недавно, команда AWSDeepLearning выпустила новый фреймворк?—?“sockeye”, цель которого является упрощение обучения seq2seq сетей. Забегая вперед — я даже не ожидал такой простоты. Так что решил написать простое, быстрое и самодостаточное руководство, которое не требует от читателя глубоких знаний в области нейронных сетей. Единственное, что все же требуется для успешного выполнения всех шагов, это иметь некоторый опыт работы с:
Если все эти три вещи не вызывают проблем — прошу под кат. Перед тем как продолжить, хочу высказать особенную благодарность моим патронам, которые меня поддерживают. Как уже упомянул, намедни команда AWS DeepLearning выпустила новый фреймворк?—?“sockeye”. Позвольте мне привести цитату с официального сайта: … the Sockeye project, a sequence-to-sequence framework for Neural Machine Translation based on MXNet. It implements the well-known encoder-decoder architecture with attention. Вольнвый перевод: Sockeye это фреймворк для обучения нейронных сетей машинному переводу, который базируется на известной архитектуре encoder-decoder. Несмотря на то, что официально это framework разработан для тренировки сетей, для машинного перевода, технически он же может быть использован для тренировки более общего класса задач преобразования одной последовательности в другую(seq2seq). Я уже затрагивал тему того, почему машинные перевод и создание чата ботов, как две задачи, имеют очень много схожего и могут решаться схожими методами, в одной из прошлых статей. Так что не буду повторятся оставив возможность пытливым читателям пройти по ссылки, а тем временем я перейду к непосредственно созданию чат-бота. Описание процесса В целом, процесс состоит из следующих шагов:
Поднимаем EC2 машину с GPU, на базе AWS DeepLearning AMI В данной статье мы будем использовать AWS DeepLearning AMI, далее по тексту: DLAMI (кстати, если вы не знаете что такое AMI, то рекомендую ознакомится с официальной документацией вот тут). Основные причины использования именно этого AMI:
Для того что бы быстро создать нужную нам машину из AMI, идем на страницу DLAMI в AWS Marketplace. Тут стоит обратить внимание на следующие вещи: 1. Версия AMI На момент написания — «Jun 2017» была самая свежая версия, так что если хотите, что бы ваш процесс был консистентет с остальной частью этой стать — рекомендую выбрать именно его. 2. Регион для создания Учитывайте что не все типы машин с GPU доступны во всех регионах. Собственно, даже если они формально доступны, то не всегда есть возможность их создать. Так, например, в 2016 во время NIPS конференции с ними было очень проблематично. Нам потребуется машина типа p2, плюс, и на момент написания статьи, DLAMI был доступен только в тех регионах, где этот самый тип был доступен: 3. Выбор типа инстанса p2.xlarge — является самой дешёвой машинкой которая удовлетворяет нашим требованиям к памяти GPU (можете конечно попробовать и g2.2xlarge, но не говорите потом что вас не предупредили). На момент написания цена за него составляла ~0.9$ в час. Но лучше проверьте цену на официальном сайте. 4. VPC Если не в курсе что с этим делать — не трогайте. 5. Security group Так же как и с VPC, не знаете — не трогайте. Однако, если хотите использовать существующую группу, то убедитесь что там открыт SSL. 6. Key pair Позволю себе предположить что у читателя есть опыт работы с SSH и есть понимание того что это. 7. Жмем создать! Собственно теперь можем создать машину и подключится к ней. Подготовка к тренировке сети Подключимся к ново созданной машине. Сразу после, самое время запустить screen. И не забудьте тот факт, что при подключении нужно использовать логин ec2-user:Несколько замечаний по сему моменту:
1. устанавливаем sockeye Первое что нам нужно, это установить sockeye. С DLAMI процесс установки очень простой, всего одна команда:
Важная чать тут то, что нужно использовать именно pip3, а не просто pip, так как по умолчанию pip из DLAMI использует Python 2, который в свою очередь не поддерживается в sockeye. Так же нет необходимости устанавливать какие либо зависимости ибо они все уже установлены. 2. Подготовка данных(диалогов) для обучения Для тренировки, мы будем использовать “Cornell Movie Dialogs Corpus”(https://www.cs.cornell.edu/~cristian/Cornell_Movie-Dialogs_Corpus.html). Это, по факту огромный корпус диалогов из фильмов. Для обучения его нужно «приготовить», собственно я уже реализовал скрипт который готовит корпус и рассказывал детальнее о не ранее.Ну а теперь давайте эти самые данные, для обучения, и подготовим:
Пару вещей на которые стоит обратить внимание:
Теперь давайте создадим папку где будем проводить обучение и скопируем туда все данные:
Ну все, мы готовы начать обучение… Обучение С sockeye процесс обучения очень прост — нужно лишь запустить одну единственную команду:
Знаю-знаю, НИКОГДА не используйте один и те же данные для обучения и валидации. Однако мой скрипт на данный момент не совсем корректно разбивает данные на две группы и посему более лучшие результаты (я о субъективном оценивании) получаются, как не странно, без разбивки. Если читали прошлую статью то могли заметить что sockeye пытается за вас найти подходящую конфигурацию для тренировки, а именно:
Это довольно неплохо, так как более близкая к оптимуму конфигурация может привести к более быстрой (читай дешёвой) тренировке. Хотя еще нужно посмотреть как именно sockeye производит поиск параметров и насколько много ресурсов тратится на этот процесс. Также sockeye определит когда именно процесс обучения стоит завершить. Это произойдёт если качество модели не улучшилось на данных для валидации за последние 8 контрольных точек. Ждем результат Пока ждете можно посмотреть как MXNet пожёвывает ресурсы GPU во время обучения. Для этого нужно запустить вот эту команду в новом окне:
Увидите что-то вроде: К слову, технически, что бы начтаь общение с ботом нужно лишь дождаться хотя бы первой созданной контрольной точки. Когда это произойдет вы увидите что-то вроде такого: Теперь можно начать общение: Чатимся... Этот процесс не требует остановки обучения, нужно лишь открыть новое окно (ну или новое SSH соединение) перейти в ту же папку где происходит обучение и выполнить команду:
Несколько элементов на которых хочу с акцентировать внимание:
После запуска команды sockeye будет считывать ввод из STDIN и выводить ответ в STDOUT. вот несколько примеров: после часа обучения: после 2х часов обучения после 3х часов обучения оно мне начало угрожать =) Заключение Как можно увидеть с sockeye процесс обучения очень прост. Собственно, самое сложное, пожалуй, это поднять нужную машину и подключится к ней =) Я все до сих пор жду что бы кто-то из читателей:
PS: не забудьте скачать вашу модель и прибить машину после окончания обучения. Натренированная модель Вот тут можно скачать натренированную модель (тренировал всего 4 часа). Ее можно использовать на локальной машине, что бы поиграться с ботом, если не хочется тренировать своего.Источник: habrahabr.ru Комментарии: |
|