Нет, я не разработчик «машинного обучения», но мне интересно узнать, на что оно способно. Все это означает, что это не статья о кровавых технических подробностях Mozilla DeepSpeech. Скорее, я пишу о своем опыте после того, как провел с ним пару часов, был прилично впечатлен и обнаружил, что с нетерпением ожидаю, что этот проект со временем улучшится.

Я уже некоторое время поверхностно знаком с технологией голосового ввода. Называть Google Web Speech API «первым» оказывает медвежью услугу многим другим до этого, но это был первый, с которым я играл, и, вероятно, первый, который использовали многие веб-разработчики, такие как я. Сейчас тоже безумно хорошо.

Часть того, почему он безумно хорош, заключается в том, что он может переводить речь в текст практически в реальном времени. Не только это, но и для того, чтобы гарантировать, что результаты имеют смысл, он слушает… но прежде чем дать окончательные результаты, он использует некоторую обработку естественного языка, чтобы выяснить, действительно ли то, что он услышал, имеет смысл… а затем улучшает его. Используя Web Speech API, вы, как разработчик, можете даже видеть результаты, оцененные и оцененные.

Гугл постоянно совершенствуется. Так и должно быть. Их распознавание речи используется в Интернете, на телефонах Android и даже в Google Home, конкуренте Amazon Echo. Им абсолютно необходимо, чтобы он был максимально совершенным, чтобы вы, пользователь, могли взаимодействовать с опытом, используя только свой голос.

Конечно, Google не единственный в игре. IBM Watson также отлично справляется с этой задачей. Более того, их демонстрация распознает разных говорящих на лету и помечает их как таковые в конце текста.

Несколько динамиков? Возможность получить тайминги слов? Фантастика! Watson позиционируется как действительно хороший сервис для распознавания голоса для самых разных приложений. Watson, конечно, делает массу других вещей. На самом деле это используется в Star Trek Bridge Crew для заполнения некоторого ИИ, когда вы просто хотите сыграть в миссию, и у вас нет реальной команды, ждущей в своих VR-гарнитурах, чтобы поиграть с вами.

Я также вполне уверен, что если бы я посмотрел на сервисы Microsoft Azure, я бы увидел то же самое, и в последние дни вы можете увидеть подобное облачное предложение от Google.

Насколько я понимаю, у этих компаний все хорошо. Облачные сервисы, очевидно, популярны, и работающее распознавание речи — отличный сервис. Однако есть проблема.

Раньше, до того, как у Google появился платный облачный сервис, когда их браузер Chrome впервые начал предлагать API веб-речи, вы могли отслеживать сетевой трафик в своем браузере и видеть конечные точки, которые они использовали. Для любого приложения, в котором вам нужен голос, не основанного на браузере, вы можете как бы издеваться над службой до их конечной точки и снимать фрагменты аудиоданных. Это сделало бы то же самое. Я помню, как играл с транскрипцией аудиофайлов через Node.js.

Честно говоря, это было не кошерно. Это был сервис Google, и он предназначался не для этого. Они даже помечают трафик своего браузера, чтобы гарантировать, что он исходит из Chrome. Да (застенчиво), я тоже подделал это в своих запросах Node.js, чтобы продолжить играть.

Кроме того, проверьте эту страницу цен Watson. 2 цента за минуту загруженного аудио. Да, это кажется супердешевым. Но сейчас 2017 год, и мы больше, чем когда-либо, общаемся с нашими устройствами. Кроме того, у меня есть идея для проекта, в котором я хочу получить транскрипции всего тиража Batman ’66.

Да, шоу длилось всего 3 сезона, но его показывали практически каждый вечер в неделю. Он насчитывает 120 серий по 25 минут каждая. Это 6000 минут или 60 долларов за мою дурацкую проектную идею, при условии, что я не делаю ошибок. Моя дурацкая проектная идея может быть даже не такой уж и дурацкой — я хочу каталогизировать и говорить о времени. Видеоредакторы могут потратить много времени на каталогизацию отснятого материала или просто на поиск нужного материала для нужного монтажа. Что, если бы мы могли за ночь бросить эти 50 часов отснятого материала на распознаватель речи и лиц и подготовить его к поиску утром?

Помимо цены, есть затраты на передачу данных. Да, у меня дома безлимитный интернет, но что, если я захочу сделать мобильное приложение? Или проект Raspberry Pi без подключения или с небольшим подключением? Голос — это лишь одна из тех вещей, которые становятся крайне необходимыми, особенно когда мы вступаем в новую эру VR/AR. Каким бы недорогим ни был Watson с 2 центами в минуту, он также может быть немного непомерно дорогим в крупномасштабных случаях использования.

Вот почему я в восторге от проекта Mozilla DeepSpeech. DeepSpeech — это служба транскрипции речи, работающая локально с использованием машинного обучения. Выпущенная ими модель обучается с помощью Mozilla's Common Voice Project, по сути, путем краудсорсинга обучения для своей модели.

Mozilla заявляет, что Raspberry Pi и/или мобильный телефон еще не в планах (если только вы не хотите разветвить проект с открытым исходным кодом и разобраться в этом самостоятельно), но он есть в их дорожной карте. Я предполагаю, что для того, чтобы сделать его более мобильным, модель и связанные с ней файлы данных должны быть урезаны с 2 ГБ.

У меня были некоторые проблемы с началом работы, но я проведу вас и покажу некоторые результаты. После попытки установить другие библиотеки ML это была прогулка в парке и очень простая. Но, как я уже сказал, это новое, и у меня были небольшие проблемы.

Прежде всего — у меня был установлен Python 3. Неа. Приобретите себе Python 2. Возможно, когда-нибудь он заработает и на 3, но не сегодня. Далее их инструкции по началу работы очень просты — запустите диспетчер пакетов Python: PIP и выполните «pip install deepspeech».

К сожалению, PIP не смог найти пакет! Оказывается, Mozilla еще не предлагает пакет для Windows, и на самом деле, просматривая документацию, Windows может вообще не тестироваться и не поддерживаться. С моим Mac на работе я решил, что мне не повезло, но потом вспомнил, что Windows 10 теперь поставляется с Ubuntu! Хотя я пытался, я думал, что это будет бесполезно.

Нет, работал как шарм! DeepSpeech устанавливается быстро и легко. Затем я хотел сразу же прыгнуть и попробовать. В своем README они перечисляют команду:

deepspeech output_model.pb my_audio_file.wav alphabet.txt lm.binary trie

Возникает вопрос… Где находятся эти файлы? Этот файл модели, бинарный файл, txt? Совсем не очевидно из README, но вы можете найти в разделе Релизы их репозиторий.

Как только я поставил их на место, моя первая попытка привела к ошибке. Это было расплывчато… что-то о двух измерениях.

TypeError: Array must have 1 dimensions.  Given array has 2 dimensions

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

Я использовал сайт загрузки YouTube, чтобы получить несколько образцов, а затем преобразовал их с помощью FFMPEG. Пару раз я использовал Adobe Audition, чтобы укоротить материал, чтобы он длился всего несколько секунд. Вы должны быть очень осторожны здесь, потому что ваш результат может варьироваться от ошибок обработки звука в вашей консоли до искаженного бессмысленного вывода!

Некоторые советы:

  • Используйте 16 бит, 16 кГц, моно аудио
  • Убедитесь, что в файл не включены метаданные (Adobe Audition по умолчанию включен, но в настройках экспорта вы можете снять флажок «Маркеры и метаданные»)
  • Ожидайте чуть более чем вдвое больше времени обработки для продолжительности клипа.

Моей самой первой попыткой был случайный пример файла WAV, который я нашел в Интернете:

http://www.wavsource.com/snds_2017-09-17_1751672946049674/people/politics/bushw_defend_freedom.wav

Это было довольно хорошо! В результате получилось: «Дерево дало нам чистую возможность защитить свободу, и мы собирались воспользоваться моментом и сделать это». Ошибки были "дерево" вместо "история" и "вы сеть" вместо "уникальный". Честно говоря, мне интересно, существовали бы эти ошибки, если бы мы применяли некоторую обработку естественного языка в качестве фильтра, как это делают облачные сервисы… и, поскольку мы запускаем ее локально, мы можем легко вставить этот шаг и многие другие. Обработка этого 4-секундного аудиофайла заняла 10 секунд.

Теперь настоящее испытание, двухминутный ролик из Бэтмена. Опять же, я запустил это видео через службу загрузки. Он был сохранен в WAV, но мне пришлось запустить его через Audition, чтобы убедиться, что битрейт и частота дискретизации правильные.

Вывод был впечатляющим, но были длинные искаженные отрезки:

«o dascmissiur, мистер замораживание, что хочет, привет, я вижу, могу ли я вызвать начальника, o здесь на минутку, commissoerdutchepfoherothisisbrusewiyistfreezeonts whatcommissionergardenisonlaealo с человеком-летучей мышью, мистер ван, и, возможно, если мы объединим две силы, и вы сможете поговорить с ним сами, хорошо, шеф, я не знаю у меня много времени, о, этот человек, да, мистер вино, я слышал, как мистер Фриссесссирлесс требует только кратко, если рейд, и у меня есть посредник, готовы ли вы сделать телекакакминночь и заплатитьтеренсомистерууууууууу нет выбора, плохие люди, могу ли я предложить вам взять телекомпанию в офис комиссара на час раньше и у нас будет купол пакет денег а мне ackageyoumoney это сыновья рискованный риск это наше дело мистер вино конечно но у меня есть то же самое faginkyou что все gottemcityaskihoperbinandi заслуживают этой веры я сделаю необходимые приготовления встретимся с офисом экономиста в одиннадцать в нем вы можете altakrmisuer действительно я сделал этого человека thedammypackagemoneywaitingsewatereventoliktohsofindmensodissimilaringbatyrisbenganyooensosimilaranoherh”

Странно то, что эти искаженные отрезки выглядят почти правильно, если они растянуты.

Так что да, у него есть небольшой путь, но он впечатляет для запуска. Это также будет только улучшаться, поскольку Mozilla и сообщество улучшают модели, возможно, создают некоторые оболочки NLP (или что-то еще) и уменьшают его для мобильных устройств. Поздравляю, Mozilla, я впечатлен — этот проект нужен!