Как в 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.
  • Группа стажеров, готовых изучать новые технологии.
  • Команда менторов.

На схеме видно, что нам пришлось изрядно потрудиться. Причины тому следующие:

  1. Современный UI в виде single page application.
  2. Для back-end в качестве языка программирования был выбран Java.
  3. Все общение между сервисами строится через REST-запросы.
  4. Отдельный сервис, который преобразует введенный пользователем текст в аудиоформат.
  5. Сохранение MP3-файлов в Amazon S3.
  6. Alexa Developer Kit, разработка скилов под Alexa.
  7. 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-проектов группировка по модулям/компонентам более выгодна, чем использование MVC-подхода. Мы можем перенести или изменить любой компонент, и это будет удобнее и проще.

Чтобы облегчить работу по верстке, мы использовали библиотеку компонентов 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: Елена Коваленко, Евгений Сидоренко и Оксана Мошак. Менторы — Мария Бабичева и Максим Кузенко.

Радует, что все, кроме одного стажера, дошли до конца, притом что вся работа команды проходила удаленно с периодическими встречами (1-2 раза в месяц) в офисе, а у части ребят была основная работа.

Процесс разработки

Мы с коллегами впервые выступали не в качестве исполнителей, а в роли тимлидов. Поэтому за технической реализацией нас ожидал не менее интересный процесс разработки. Последний был согласован и описан в документации еще до набора стажеров в команду.
В документе содержались необходимая терминология, описания процесса разработки, процесса тестирования, порядка работы с таск-менеджером Jira и тест-трекером Zephyr, каналов коммуникации и прочее. Мы описали Epics и декомпозировали их на User Stories.

Мы решили использовать гибкие методологии, основанные на Agile-фреймворке, — Scrum. Спринт две недели, каждый день Daily Scrum Meeting со статусом каждого члена команды, в середине спринта — демо от разработчиков, в конце спринта — демо от QA-команды и готовый функционал. После спринта — Retrospective, а в новом спринте — Planning. Оценивать User Story решили в Story Points и ввели практику Planning Poker.

В теории звучит красиво, но на практике получилось иначе:

  1. Запустили нулевой спринт как время для знакомства и настройки окружения. Менторы проводили демо по профильным направлениям и готовили стажеров «ко вступлению во взрослую жизнь». Идея себя оправдала.
  2. Первый Planning провели как тимбилдинг на крыше офиса с пиццей, где показали ребятам, что такое Planning Poker! Нашей ошибкой было желание совместить приятное с полезным: формальную часть планирования и тимбилдинг.
  3. Scrum и ограничения по времени. Команда не смогла уложиться в первый спринт, поэтому решили удлинить его (в порядке исключения, конечно же).
  4. Во время первого спринта мы столкнулись со стандартным отсутствием коммуникации в удаленной команде. Back-end не шел на продуктивный контакт с front-end, и это, естественно, влияло на весь процесс.
  5. Время для Daily Scrum Meetings не всем подходило.
  6. При этих условиях в самом начале мы потеряли одного разработчика.

Начали разбираться с погрешностями

Первое, что мы сделали как менторы, — провели голосование и все же утвердили Daily Scrum Meetings с максимальной посещаемостью.
Далее мы отказались от Planning Poker и стали использовать планирование, основанное на интуиции. Такой подход описывал еще Хенрик Книберг в книге «Scrum и XP: заметки с передовой». На планингах мы все вместе обсуждали приоритетные сторис и ориентировались на собственные ощущения: осилим ли до конца спринта.

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

Нам повезло, что у нас в команде был тестировщик с опытом, который и стал негласным QA-лидом. Он делился опытом и поддерживал процессы, сводя вмешательство менторов к минимуму. Остальные ребята проявляли инициативу и самостоятельно начали применять автоматизацию. К тому же QA-команда была единственной, у которой не было проблем с коммуникацией с другими звеньями разработки.

Итоги

Со временем процессы устоялись, команда стабилизировалась, и в декабре мы дошли до релиза с первой версией нашего рабочего продукта.

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

Присоединиться к проекту Alexis могут все желающие. Пишите мне на DOU, и я отвечу на все вопросы относительно текущей реализации.

Похожие статьи:
The introduction of a much more family friendly fiesta in 2016 is reaping major rewards for the City Council of Pamplona with data collected from the 2018 event showed yet another year of increases in the number of people involved in the arts and...
IT Education Center объявляет запись новых групп на курсы по Администрированию Linux. Начало обучения с 15.02.16 Программа подготовки Linux...
In this day and age, it is imperative for all businesses to have their own online presence. Most prospective customers will want to do a search online for your business, and if they see no website, they will be unlikely to make use...
Компанія Stobox, яка надає технології і консультації з токенізації та має орієнтовно до 80 співробітників, не розрахувалася...
росіяни тимчасово окупували місто Кремінна Луганської області, СБУ оприлюднила відео з Медведчуком, який просить про...
Яндекс.Метрика