Как в Provectus использовали Alexa от Amazon для изучения английского
В рубрике DOU Labs мы приглашаем IT-компании делиться опытом собственных интересных разработок и внутренних технологических инициатив. Вопросы и заявки на участие присылайте на Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра. .
Привет! Я Павел Коптилин, Java Team Lead в Provectus. В этой статье я хочу рассказать о том, как в рамках внутренней программы Formula 1 мы в Provectus обучали голосового ассистента Alexa от Amazon русскому языку.
Зачем мы это делали? Чтобы Alexa помогала пользователям в изучении английского языка и тренировке произношения. Согласно нашей задумке, Alexa говорит слово по-русски, а пользователь дает перевод на английском.
Приложение получило название Alexis. В проекте участвовали как стажеры, так и опытные менторы. В процессе технической реализации идеи мы вместе знакомились с новыми технологиями и искали интересные решения. Что получилось в результате, расскажу подробнее.
Возможности Alexa и идея проекта
Разработкой собственных голосовых помощников сегодня занимается большинство крупных технологических компаний. Удобство использования ассистента, который реагирует на голосовые команды и мгновенно выполняет задания пользователя, неоспоримо. От управления плей-листом, вызова такси и озвучивания прогноза погоды до планирования дел: спектр действия голосовых помощников впечатляет.
В Украине наиболее популярны Siri от Apple и Google Assistant от Google благодаря возможности их интеграции в смартфоны. Компании хотят интегрировать этих ассистентов не только в смартфоны, но и сделать центром всей экосистемы устройств.
Яркий пример — Alexa от Amazon с возможностью управления умным домом.
Совместимые с Alexa устройства. Image Source
Alexa не ограничена интеграцией только в девайсы Amazon, сторонние компании могут также встраивать её в свои продукты. В Украине Alexa пока не получила популярности, главным образом из-за ограниченного количества доступных языков: их у нее только три. Тем не менее в Provectus Alexa прижилась: наш COO Ник Антонов привез из Штатов смарт-колонки Echo Dot от Amazon для каждой конференц-комнаты.
Так мы оценили отличие отдельно стоящего голосового помощника от такого же, но встроенного в телефон. Главное преимущество ассистента вроде Alexa — наличие микрофона и хорошего вывода звука. Даже если у вас активированы функции «Привет, Siri» или «Ok, Google» на телефоне, удобным их использование не назовешь. Вам все равно нужно брать телефон в руки и подносить устройство ближе для вывода звуковых команд. Наличие в амазоновских колонках чувствительных микрофонов позволяет общаться с ассистентом, как с обычным человеком, даже находясь к нему спиной или в другом конце комнаты. Колонка также обладает более громким и качественным звучанием, чем телефон.
Мы убедились, что голосовые помощники — это удобно и интересно. Но, вдоволь наигравшись с голосовым включением и выключением света, мы захотели от голосового ассистента чего-то большего, чтобы раскрыть его потенциал на все 100%. В этом и заключается проблема: придумать действительно полезное применение технологий распознавания голоса и вывода звука.
Получение информации в аудиоформате стремительно набирает обороты: большинство новых книг выходят сразу в этом формате, множество обучающих лекций необязательно смотреть, а можно слушать, а подкасты снова переживают бум популярности и могут стать такими же популярными, как каналы на YouTube (Spotify has bought two podcast startups and it wants to buy more).
Слушать книгу на телефоне в дороге, затем, придя домой, продолжить через колонки, переходя из помещения в помещение и не теряя звук, — качественное и удобное прослушивание востребовано из-за постоянной мобильности современного человека.
Очевидно, что развитие аудиотехнологий чрезвычайно важно для всех нас, именно поэтому проект в рамках Formula 1 мы посвятили поиску решений в данном направлении. Мы решили создать единый центр управления всем аудиоконтентом с возможностью быстро запустить или остановить воспроизведение с помощью голосовых команд, который будет доступен каждому пользователю.
Одна из проблем, которую нам предстояло решить, — это хоть немного научить Alexa русскому языку, чтобы ею могли пользоваться не только носители английского языка. Задача следующая: Alexa говорит вам слово на русском, а вы даете перевод на английском. Так и родилась идея проекта под названием Alexis, основная цель которого — помочь пользователю в изучении английского языка, расширяя его словарный запас и тренируя произношение.
Но ведь Alexa не говорит по-русски, возразит внимательный читатель и будет совершенно прав. Обход этого ограничения и стал основной технической задачей.
Техническая реализация
Дано:
- Колонка, говорящая на английском языке и понимающая его, а также умеющая проигрывать аудио в формате MP3.
- Группа стажеров, готовых изучать новые технологии.
- Команда менторов.
На схеме видно, что нам пришлось изрядно потрудиться. Причины тому следующие:
- Современный UI в виде single page application.
- Для back-end в качестве языка программирования был выбран Java.
- Все общение между сервисами строится через REST-запросы.
- Отдельный сервис, который преобразует введенный пользователем текст в аудиоформат.
- Сохранение MP3-файлов в Amazon S3.
- Alexa Developer Kit, разработка скилов под Alexa.
- AWS Lambda, serverless-функция: в качестве языка был использован JavaScript (для формирования ответов пользователю колонки и получения данных с нашего back-end).
В качестве фреймворка для написания back-end был использован Spring Framework, и приложение представляло собой Spring Boot Application с поддержкой Spring Security, Spring MVC и Spring REST Docs. Выбор фреймворка был обусловлен тем, что Spring Boot позволяет легко создавать полноценные Spring-приложения производственного класса, про которые можно сказать «просто запусти», а еще это — отличный пункт для включения в резюме стажера.
В качестве движка для Text2Speech мы решили использовать библиотеку MaryTTS. Ее основное преимущество — бесплатность.
Для реализации UI-части была выбрана React-библиотека из-за ее простоты и огромной популярности. По этой же причине мы выбрали Redux-контейнер для работы с данными.
Главной целью UI-команды было написание реальных продакшен-приложений, поэтому мы выбрали модульную архитектуру, так как для больших UI-проектов группировка по модулям/компонентам более выгодна, чем использование
Чтобы облегчить работу по верстке, мы использовали библиотеку компонентов Ant Design, а для написания тестов — Jest-фреймворк. Несмотря на огромное количество новых подходов и технологий, ребята справились с задачей и показали отличный результат.
Главная же сложность заключалась в реализации Alexa Skill, так как для всех это была terra incognita. Тем не менее стажеры удачно справились и с этой непростой задачей, которая потребовала многих часов изучения AWS-технологий.
В итоге в Alexis удалось реализовать следующие голосовые команды:
Voice command to start Alexis Skill:
«Alexa, open English space» — запуск Alexis Skill. После этого мы можем приконнектить Alexis к Alexa и запустить тест, используя команды ниже.
Voice command to activate Alexis:
«Activate <Alexis Password>» — активация Alexis и коннект приложения к девайсу с Alexa.
Voice commands to launch quiz:
«Start exam» — запускает тест для выбранной группы по умолчанию.
«Start <word group name> exam» — запускает тест для конкретной группы.
«Start all groups exam» — запускает тесты для всех групп.
Во всех случаях Alexa озвучивает группы слов по-русски, а мы произносим английский перевод.
Voice commands to answer quiz:
«This is <answer>» or «It’s <answer>»
Voice command to stop quiz:
«Stop»
И хотя нам удалось заставить Alexa говорить по-русски, научить ее понимать русский язык все равно не получится. Это было бы возможно, если бы Amazon отдавала звуковой поток, записанный через микрофон, а мы на своей стороне преобразовывали бы этот поток в русский текст.
Но по понятным причинам Amazon не пойдет на это: если сторонние приложения начнут подслушивать, что творится у пользователей дома, тогда даже скандал с Facebook будет казаться невинной оплошностью Цукерберга.
Команда
Перед нами как менторами проекта Alexis стояла задача отобрать стажеров, которые имеют необходимую квалификацию, заинтересованы в обучении и достаточно мотивированы, чтобы выпустить релиз (а это примерно четыре месяца). Желающих попасть на программу было очень много, поэтому на первом этапе мы давали всем тестовое задание по специализации и уже на основании выполненного задания приглашали ребят на собеседование с профильными менторами (front-end, back-end и QA).
Среди тех, кто приходил к нам, были ребята, которые уже могут пробовать себя на позиции Junior, и у них вряд ли была бы мотивация завершить проект. Были и те, кто откровенно слабоват. При отборе на проект для нас также был важен уровень владения английским языком.
Стажеры приходят к нам за опытом, максимально приближенным к тому, что можно получить на реальном проекте. Поэтому мы всегда закладываем возможные риски ухода стажеров (вплоть до 50% по профилю). Причины могут быть разные: понял, что «не мое», устроился на работу и т. д. Поэтому мы набирали стажеров с запасом.
В итоге сформировали такую команду:
- Front-end: Виктория Глущенко и Михаил Мединский. Ментор — Юлия Соболь.
- Back-end: Николай Михайлюк, Александр Бондаренко и Дарья Пиндус. Ментор — Павел Коптилин.
- QA: Елена Коваленко, Евгений Сидоренко и Оксана Мошак. Менторы — Мария Бабичева и Максим Кузенко.
Радует, что все, кроме одного стажера, дошли до конца, притом что вся работа команды проходила удаленно с периодическими встречами
Процесс разработки
Мы с коллегами впервые выступали не в качестве исполнителей, а в роли тимлидов. Поэтому за технической реализацией нас ожидал не менее интересный процесс разработки. Последний был согласован и описан в документации еще до набора стажеров в команду.
В документе содержались необходимая терминология, описания процесса разработки, процесса тестирования, порядка работы с таск-менеджером Jira и тест-трекером Zephyr, каналов коммуникации и прочее. Мы описали Epics и декомпозировали их на User Stories.
Мы решили использовать гибкие методологии, основанные на Agile-фреймворке, — Scrum. Спринт две недели, каждый день Daily Scrum Meeting со статусом каждого члена команды, в середине спринта — демо от разработчиков, в конце спринта — демо от QA-команды и готовый функционал. После спринта — Retrospective, а в новом спринте — Planning. Оценивать User Story решили в Story Points и ввели практику Planning Poker.
В теории звучит красиво, но на практике получилось иначе:
- Запустили нулевой спринт как время для знакомства и настройки окружения. Менторы проводили демо по профильным направлениям и готовили стажеров «ко вступлению во взрослую жизнь». Идея себя оправдала.
- Первый Planning провели как тимбилдинг на крыше офиса с пиццей, где показали ребятам, что такое Planning Poker! Нашей ошибкой было желание совместить приятное с полезным: формальную часть планирования и тимбилдинг.
- Scrum и ограничения по времени. Команда не смогла уложиться в первый спринт, поэтому решили удлинить его (в порядке исключения, конечно же).
- Во время первого спринта мы столкнулись со стандартным отсутствием коммуникации в удаленной команде. Back-end не шел на продуктивный контакт с front-end, и это, естественно, влияло на весь процесс.
- Время для Daily Scrum Meetings не всем подходило.
- При этих условиях в самом начале мы потеряли одного разработчика.
Начали разбираться с погрешностями
Первое, что мы сделали как менторы, — провели голосование и все же утвердили Daily Scrum Meetings с максимальной посещаемостью.
Далее мы отказались от Planning Poker и стали использовать планирование, основанное на интуиции. Такой подход описывал еще Хенрик Книберг в книге «Scrum и XP: заметки с передовой». На планингах мы все вместе обсуждали приоритетные сторис и ориентировались на собственные ощущения: осилим ли до конца спринта.
Каждый ментор проработал коммуникации со своей подкомандой, и в течение одного спринта была налажена связь между фронтом и бэком.
Нам повезло, что у нас в команде был тестировщик с опытом, который и стал негласным QA-лидом. Он делился опытом и поддерживал процессы, сводя вмешательство менторов к минимуму. Остальные ребята проявляли инициативу и самостоятельно начали применять автоматизацию. К тому же QA-команда была единственной, у которой не было проблем с коммуникацией с другими звеньями разработки.
Итоги
Со временем процессы устоялись, команда стабилизировалась, и в декабре мы дошли до релиза с первой версией нашего рабочего продукта.
В настоящее время проект выложен на GitHub и продолжит свою жизнь уже в качестве опенсорс-продукта. Возможно, он будет интересен как тем, кто делает первые шаги в изучении AWS-технологий, так и разработчикам, которые давно работают с AWS и могут поделиться своим опытом, а также привнести новые идеи в его развитие.
Присоединиться к проекту Alexis могут все желающие. Пишите мне на DOU, и я отвечу на все вопросы относительно текущей реализации.