Некоторое время назад к нам пришел клиент – крупный металлургический комбинат. Продукцию комбината перевозят поезда. А во время железнодорожных грузоперевозок машинисты и диспетчеры должны переговариваться согласно регламенту. За переговоры не по регламенту - штраф. Поэтому “боль” клиента была сильной: получить систему автоматического контроля регламента переговоров по рации во избежание финансовых потерь и снижения риска катастроф.  

Мы опрометчиво согласились. А когда получили аудиозаписи, поняли, что поторопились подписывать договор. Дело в том, что записи с раций сопровождаются огромным количеством шумов. Качество аудио было такое, что порой мы сами не могли ничего разобрать. В одной записи мы поначалу слышали только «во во во», а когда напряглись, различили «два вагона вагон». Потренировав ухо, мы разметили некоторое количество записей и загрузили их в свою универсальную модель. Результат был плохой: ошибка распознавания - 76,9% (вернее WER – 0,769). Решили прогнать записи на других решениях. Итог был не лучше: ошибка Google составила 92% (WER – 0,92), другие вендоры дали похожий результат.

В принципе, еще можно было отказаться. Но мы решили «избрать путь самурая», а, как известно, путь самурая – это путь, ведущий к смерти. Шанс сделать из решения, которое почти ничего не распознает, решение, которое распознает почти все, стремится к нулю. А подписавшись на выполнение, мы рисковали попасть на большие штрафные санкции.

Первый месяц, работая на старой end2end архитектуре, мы не смогли заметно продвинуться в качестве. Уже почти отчаявшись, мы решили пойти ва-банк и перестроить все свое решение.

Что мы сделали: 

  • Перешли от end2end архитектуры на гибрид. Для гибрида нужно меньше обучающих данных и он более робастный к изменениям аудио-среды. На гибриде мы стали ставить эксперименты, чтобы найти оптимальную конфигурацию.

  • Транскрибировали около 50 часов записей (потом, правда, потребовалось оттекстовать еще).

  • Собрали корпус текстов, характерных для железнодорожной сферы: инструкции машинистов, регламенты и т.д

Иногда казалось, что улучшить результат не получится, кейс провальный. Но за неудачами следовали эксперименты, улучшающие метрику. В итоге нам удалось снизить WER почти в 3 раза и распознавать речь с раций достаточно качественно. 

Что действительно помогло:

  • Как ни удивительно, самый большой вклад внесли тексты для языковой модели. Только они обеспечили снижение WER на 0,3. Мы сами в это не сразу поверили, но объясняется данный факт довольно просто. При переговорах по рации на железнодорожном транспорте 200 самых употребимых выражений составляют порядка 90% от всех слов. Более того, если все слова распознавать как слово «вагон», вы получите около 15% качества :) Таким образом, сузив словарь до нескольких сотен слов (назовем его словарь Эллочки-людоедки) и правильно оценив вероятность их употребления, мы получаем максимальный прирост качества.

  • Вторым фактором было дообучение акустики и работа с шумами. Основной прирост мы начали получать, разметив (транскрибировав) 40 часов записей. Остальная разметка (еще несколько десятков часов) дала буквально 3% в приросте метрики.

  • Третий по значимости фактор – адаптация самой модели. 

Вывод  №1 – львиная доля прироста качества пришлась на создание обучающего датасета, при этом основной прирост дала семантика и первые 40 часов аудио.

Вывод №2 – иногда (правда не всегда), качество распознавания речи можно кардинально улучшить, имея нужный датасет и полгода на эксперименты;).

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

Бонус для дочитавших: наш телеграм бот @AmVeraSpeechBot. В боте вы можете проверить качество работы нашего решения по распознаванию речи (Amvera Speech) (это универсальная модель, а не модель для ЖД) и просто безлимитно и бесплатно распознавать голосовые сообщения. Просто отправьте в бот короткую аудиодорожку или голосовое сообщение – и получите текстовую расшифровку. 

Комментарии (11)


  1. propell-ant
    10.10.2022 19:57
    +7

    Я правильно понял термины:
    у гугла был WER=0.92,
    а если все слова распознать как "вагон", то был бы WER=0.85 ?

    Спасибо, мир заиграл новыми красками!


    1. Amvera_Speech Автор
      10.10.2022 20:00
      +1

      Да, но Google такое выдавал на модели, которая из разряда совсем не приспособлена к акустики рации. У того же ЦРТ результат был лучше, но все равно общая модель не позволяла хорошо распознать настолько специфический домен. И 0,85 будет, если распознавать "вагон" без пропусков слов, а большая часть ошибки как раз заключалась в том, что в сильном шуме на всех решениях были огромные пропуски.


      1. kirillkosolapov
        10.10.2022 20:09
        +2

        К слову у ряда вендоров есть специальные отраслевые решения, которые дают приемлемые цифры в таких акустических условиях, правда их нет в открытом доступе.


  1. Markscheider
    10.10.2022 21:01
    +1

    А шумы (радиопомехи) были ±одинаковые? Имею в виду частотную полосу "шипения", громкость относительно речи и пр.


    1. Amvera_Speech Автор
      10.10.2022 21:21
      +1

      Там было 2 типа записи - аналог и цифровой, на них было по разному. Плюс несколько станций - на них были отличия в акустике не стороне диспетчера. На аналоге как раз получилось лучше всего вычистить шумы (цифры как раз для него), на "цифре" было чуть хуже. А по распределению - там шумы как от самих раций, так и окружающий шум был, но от раций в похожем частотном диапазоне, который к сожалению, частично перекрывал диапазон в котором была сама речь.


      1. sukhe
        11.10.2022 19:51
        +1

        Каким образом шумы вычищали? Есть нормальные готовые библиотеки, или своё что-то изобретали?


        1. Amvera_Speech Автор
          11.10.2022 20:27
          +1

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


  1. Rive
    10.10.2022 21:44
    +3

    Пожалуй, разметить датасет едва ли не сложнее, чем подобрать способ успешной работы с ним.


    1. Amvera_Speech Автор
      10.10.2022 21:50

      Соглашусь, нужна очень хорошая разметка, и если "чистые" записи размечать относительно просто (на час записи тратится 3-4 часа работы разметчика), то для этих пришлось тратить очень много времени, несколько раз их переслушивать и делать тройное перекрытие между разметчиками.


  1. 555www555
    11.10.2022 00:55

    у вас свой движок по распознаванию речи? Мы производим аудиобейджи Свидетель и диктофоны Edic-mini - нам бы было бы интересно с вами посотрудничать.


  1. YDR
    11.10.2022 15:10
    +1

    Как только люди нейронки не мучают, только бы рации нормальные не покупать...(шутка, с долей шутки).

    С Хорошей рацией и машинисту хорошо (вагон с прогоном и перегоном не перепутает).

    А вообще интересно.