Комментарии
На случай, если в вашем телефоне — куча диктофонных записей программистов, на основе которых вы пишете статьи
Speech-to-Text. Как перевести аудио в текст
Сибирикс
Speech-to-Text. Как перевести аудио в текст
На случай, если в вашем телефоне — куча диктофонных записей программистов, на основе которых вы пишете статьи
Нам, копирайтерам, много не надо. Гугл Док. Поисковик. Диктофон. И какая-нибудь программка с миленьким интерфейсом, где на первом шаге ты загружаешь аудиофайл, на втором — жмёшь на кнопочку «Транскрибировать», на третьем — получаешь текст.

«Есть такое, есть!» — радостно говорит Гугл. И выдает список:


Ты переходишь по первой ссылке, по второй, по третьей. И понимаешь: что-то тут не так. Как будто тебе снова 11 и ты просишь купить тебе джинсовые шорты, а тебе дают джинсы, и говорят: «Вот тут вот так отрежь — будет то же самое!». Мы же просили конвертер — загружаешь аудио, получаешь текст. А нам дают голосовой ввод. Это значит, нужно:

  1. Включить микрофон.
  2. Включить аудиозапись погромче и, желательно, в полной тишине.
  3. Ждать, пока проиграется аудиозапись, и только тогда ты получишь текстовый файл.

А есть что-нибудь не для изолированных заключенных, а для копирайтеров scrum-студии, например? Когда слева от тебя фиксят баги, справа от тебя пишут код, сзади тебя разговаривают с клиентами. И лучше бы тебе никого не бесить своими аудиозаписями.

«И такое есть!» — снова радуется Гугл. Вот:


Ок. Давайте попробуем.
Аудиозапись
Аудиозаписей у нас хоть отбавляй. У каждого копирайтера в диктофоне — сотни комментариев программистов, без сбора которых не пишется ни одна статья. Работа с текстом идет в три этапа.
1. Комментарий программиста
Справедливости ради, отметим, что речь программистов — та еще задачка не только для искусственного интеллекта, но и для естественного человеческого. В одном предложении программист может употребить сразу штук 5 диких кодерских терминов и связать их друг с другом не менее дикими «мёржить», «бенчить», «матчить» и «фиксить».

Вот дословная транскрибация случайной аудиозаписи длительностью 36 секунд. Так дословно транскрибировать копирайтер никогда не будет — мы всегда по ходу чистим текст от всякой грязи. Но, если бы так могла сделать программа распознавания речи, это был бы вполне приемлемый вариант и годное подспорье для дальнейшей работы.
— То есть сама технология, в принципе, известная. Это History API.
— History API?
— Да, ну браузерная. Так что получается, весь фокус в том, что ты, у тебя, получается, он, нормальная навигация отработывает, отрабатывает по истории, то есть полностью с переходами по различным точкам, различным городам, в соответствии с этим меняется карта, меняется блок навигации, там пагинация должна быть, если много горо…, если много магазинов появляется.
2. Чистенький вариант
Эту самую аудиозапись длительностью 36 секунд автор этой статьи вручную транскрибировал 2 с половиной минуты. Получилось вот так:
Сама технология известная — History API, браузерная. Весь фокус в том, что нормально навигация отрабатывает по истории: то есть полностью с переходами по различным точкам, различным городам. В соответствии с этим меняется карта, меняется блок навигации — там пагинация должна быть, если много магазинов появляется.
Это уже чистенький вариант — не в том смысле, что он в таком виде пойдет в статью, а в том, что текст по ходу транскрибирования чистился от повторений, оговорок, слов-паразитов, уточняющих вопросов и всего того речевого мусора, которым, к чести программистов, страдают не только они. Это тот вид текста, который в идеале хотелось бы получить от программы распознавания голоса, чтобы не тратить потом ещё кучу времени на правки текста.
3. Добавим чутка блеска
В подобном пламени безволья,
Как прежде, не мечтать не мог.
И в нем разбитая душа
В нем каждый видел взор над ним.


Эти пронзительные стихи написал Искусственный Интеллект. Когда-нибудь он будет писать статьи в блог Сибирикса. Но пока это делают белковые авторы. Чтобы развить не очень щедрые комментарии программистов, они что-то гуглят, что-то переспрашивают, что-то тыкают на сайте, чтобы разобраться самим, и в итоге получается как-то так:
Решением стал History API. Когда мы нажимаем на какой-нибудь магазин, в адресной строке меняется URL и в историю просмотров добавляется еще один пункт, как будто мы перешли на другую страницу. Но, на самом деле, страница не обновляется — просто на ней меняется часть содержимого. Технически это означает, что браузер использует ресурсы, которые получил при первой загрузке страницы, а далее при каждом переходе по сайту он перезагружает только необходимый контент. Теперь перестроение URL'а без обновления страницы нужно было увязать с картой и навигацией. Для этого мы написали js-ный контроллер для клиентского кода.
Очень надеемся, что мы не получим сейчас что-то подобное от Искусственного Интеллекта, иначе нашей уязвленной гордости ничего не останется, как только написать всем PR-отделом заявления на увольнение.
Realspeaker и Vocalmatic
Realspeaker и Vocalmatic очень похожи друг на друга. И там, и там — приятные интерфейсы (правда, у Realspeaker он все же чуть приятнее, потому что на русском).
Весь процесс конвертирования проходит в три этапа (как мы и мечтали в начале статьи).
Realspeaker Vocalmatic

1. Выбор языка аудиозаписи


Всего 37 языков. Так что, если вам нужно транскрибировать комментарии каталонских программистов, придется выбрать Espaniol (Spanish).

1. Загрузка аудиозаписи
2. Загрузка аудиозаписи

2. Выбор языка аудиозаписи


119 языков и диалектов. Здесь уже есть возможность выбрать Catalan (Spanish)

3. Получение результата


Сразу после загрузки аудиозаписи выдается расчетное время транскрибации. Для аудиозаписи длительностью 36 секунд — это 14 секунд, то есть практически в 3 раза меньше. Результат выдается тут же на экране.

3. Получение результата


Здесь не рассчитывается время транскрибации каждой отдельной аудиозаписи, но есть общая информация, что транскрибация занимает чуть меньше времени, чем длительность аудиозаписи. Результат присылается на email.

Результат Realspeaker (точность 20%)
Realspeaker поколдовал и выдал такой результат:
сама технология принципе я получается он нормальный пацан соответствии с этим меняется карта меняется по навигации
Попадания:
сама технология
<в> принципе
получается
Нормальн<ая>
<в> соответствии с этим меняется карта меняется
навигации
Результат Vocalmatic (точность 20%)
Vocalmatic недалеко ушел:
Сама технология принципе общается нормально навигация до работы потом соответствии с этим меняется карта меняется блок навигации.
Попадания:
сама технология
<в> принципе
нормальн<ая>
<в> соответствии с этим меняется карта меняется блок навигации


Для чистоты эксперимента автор этой статьи закрылся в отдельной комнате в студии, где обычно проходит обучение сотрудников, и самостоятельно громко и четко в полной тишине записал тот же самый текст. И вот что получилось.
Результат Realspeaker (точность 97%)
то есть сама технология в принципе известная это history API history API Да ну браузерная Так что получается весь фокус в том что ты у тебя получается Он нормальная навигация отрабатывает отрабатывает по истории там полностью с переходами по различным точкам различным городам в соответствии с этим меняется карта меняется блок навигации Там pagination должна быть если много гору если много магазинов появляется
Результат Vocalmatic (точность 97%)
то есть сама технология в принципе известная это history API history API Да ну браузерная Так что получается весь фокус в том что ты у тебя получается Он нормальная навигация отрабатывает отрабатывает по истории там полностью с переходами по различным точкам различным городам в соответствии с этим меняется карта меняется блок навигации Там pagination должна быть если много гору если много магазинов появляется
Главные ошибки
В первом случае обе программы пропустили огромные куски текста — Realspeaker из нераспознанных 51 слов попытался восстановить только 3 («я», «пацан», «по»), остальные просто пропустил. Vocalmatic — из того же количества нераспознанных слов попытался восстановить 4 («общается», «до», «работы», «потом»). Так как в задаче распознавания речи применяются рекуррентные нейронные сети, которые могут угадывать пропущенные элементы по контексту (как это делает человек), такое огромное количество просто пропущенного текста говорит о том, что все эти слова были восприняты как шум — печать принтера, мелодия на телефоне, топот, разговор по скайпу за соседним столом.

«Нормальная навигация» у Realspeaker превратилась в «нормального пацана» (хотя слово «навигация» он отлично знает и распознал его в конце текста). А «получается он нормальная навигация» у Vocalmatic превратилось в «нормально общается». Видимо, в том корпусе текстов, на базе которых обучаются данные нейронные сети, гораздо чаще встречаются сочетания слов «нормальный пацан» и «нормально общается» (может, они обучаются на архивах ФСИН?).

Удивительно, что программы не распознают предлоги: выдают «принципе», а не «в принципе», «соответствии», а не «в соответствии».


Получается, что качество распознавания текстов в обеих программах колеблется от 20% до 97%. Для высокого качества необходимо создать идеальные условия. Но, увы, брать комментарии в отдельной комнате не получится, потому что комментарий сопровождается показом на компьютере тех фичей, о которых идет речь. Просить программистов говорить громко и внятно бесполезно. Всех вокруг замолчать, не дышать и не шевелиться — тоже. Так что под наши реальные задачи программы все-таки пока не подходят, несмотря на все достижения в обучении рекуррентных нейронных сетей. Но если вы транскрибируете идеально записанные тексты, обе программы станут вам отличными помощниками.
Что касается стоимости удовольствия, Realspeaker транскрибирует аудиозаписи длительностью до 1,5 минут — бесплатно, более длительные аудиозаписи — из расчета 8 руб. в минуту. Vocalmatic предлагает почасовые пакеты — первые 25 минут — бесплатно, дополнительно: 1 час за 15 долларов, 3 часа — за 36 долларов, 5 часов — за 55 долларов и 10 часов за 99 долларов. При этом, за каждого приглашенного друга в Vocalmatic вы оба получаете еще по 15 бесплатных минут. Выбирайте!