Мы пробовали чистить звук перед распознаванием. Не помогло
Кажется очевидным: убрать шум, выровнять громкость — и распознаватель услышит лучше. Мы проверили это на своих записях. Вышло наоборот.
Что мы пробовали
Взяли записи четырёх голосов, 1434 фразы, и прогнали каждую фразу через тринадцать вариантов обработки перед распознаванием. Потом сравнили число ошибок с необработанной записью.
- Выравнивание громкости: все записи приводятся к одному уровню. Стало хуже, примерно на два пункта больше ошибок на сто слов. Английские фразы одна за другой записывались русскими буквами.
- Шумоподавление RNNoise. На голосе, который и так был чистым, стало хуже.
- Шумоподавление GTCRN. Оно только перемешало ошибки: одни ушли, другие появились, а на русском стало чуть хуже.
- Фильтр высоких частот на 90 Гц, который срезает низкий гул. Никакой разницы.
Почему так
Очистка звука не даёт распознавателю просто запись получше. Она меняет звук, а распознаватель реагирует на это изменение так, как мы не ожидали.
Сильнее всего удивила громкость. Распознаватель сам решает, на каком языке звучит речь, и громкость сдвигает это решение. Чем громче звук, тем сильнее модель тянет к русскому, и английская фраза появляется кириллицей. Тише звук — модель отпускает, и она возвращается к языку фразы. Небольшой сдвиг на входе менял алфавит примерно в 150 фразах из 1434.
Мы искали и один идеальный уровень громкости, но не нашли. Усиление звука вредило, а лучший уровень у каждого голоса свой, и они расходились больше чем на 15 дБ.
Что помогло немного
Устойчивый выигрыш дало только одно: сделать звук тише на три децибела. Это убрало около половины пункта ошибок на сто слов, и ни один голос не стал хуже. Если сделать звук намного тише (на 6 дБ и больше), появляется новая беда: русский начинает уезжать в украинское написание.
Выигрыш небольшой, поэтому мы добавили его только как эксперимент. В настройках диктовки есть переключатель «Улучшить распознавание (эксперимент)», по умолчанию он выключен. На живые субтитры он не влияет.
Поэтому шумоподавление перед распознавателем мы не ставим. Если захотим улучшить результат на русском и украинском, будем смотреть, как модель выбирает язык, а не на звук.