DLA Speech Recognition story
Not really long, not really painful.
Created on October 17|Last edited on December 19
Comment
В ходе создания финальной версии проекта мне пришлось посмотреть в такое количество статей архива и репозиториев с paperswithcode, что всех и не упомнишь. Поэтому не буду даже пытаться, их след затерялся во времени, потому как с самого начала я забыл логировать в этот отчет источники вдохновения.
Финальная версия модели была эмпирически подобрана достаточно быстро. В этом мне, конечно, очень пригодился опыт стажировки в ASR. Изначально я планировал обучать quartznet, однако времени на это все сильно не хватило, поэтому итоговая моделька весьма и весьма простая. Итак, к делу!
Эксперименты
DeepSpeech быстро пишется и быстро учится, так что было решено использовать именно его. Первая пара итераций экспериментов была проведена без аугментаций. Моделька сходилась быстро, но не к тем значениям, к которым хотелось бы.
Обучающая выборка для первой модельки здесь состояла только из train-clean-100, поэтому качество на test-other оставляло желать лучшего. Для второй модельки же были добавлены test-clean-360 и test-other-500, что резко улучшило результаты (не удивительно).
Стало понятно, что все работает и надо докручивать улучшения. В качестве наиболее перспективных (по моему опыту) и простых для реализации были взяты аугментации Freq и Time Masking (с дефолтными параметрами из +- любой статьи про Librispeech), а так же Gain, ColoredNoise и PitchShift (с адекватными согласно моему коммонсенсу параметрами). Видно, что новая моделька стала лучше обобщать!
Серьезные эксперименты! Раз уж теперь все работает и хорошо сходится, пришло время попробовать обучиться подольше. Выбрана архитектура чуть поумнее - DeepSpeech2 со свертками в начале, 4 слоями GRU и 1d сверткой в конце. Как оказалось, моделька отлично работает и получает хороший буст от LM рескоринга.
За 10 часов обучения моделька сошлась к 0.34 WER на test-other - и это без бим-серча! А с ним (сюрприз) еще лучше.
После таких замечательных результатов грех не попробовать улучшиться рескорингом. Я взял предобученную 4-граммную модель с http://www.openslr.org/11/ и добавил ее в бимсерч. Результаты весьма впечатляющие - 0.106 WER на test-other (beam_size=2000, alpha=0.3, beta=1e-3). Для такой простой архитектуры качество более чем отличное!
Заключение
Вот так за несколько экспериментов все и получилось. Немного не хватило до "technically better than a human", но тоже ничего. Жаль, времени не было потестить конформеры и виспер. При желании можно было бы завести, я думаю, добавив немного дополнительных данных и подождав пару дней.
Последний эксперимент, кстати, это тот же DeepSpeech2 с теми же гиперпараметрами, только на маленьком числе итераций и с логированием бимсерча.
Всем спасибо, конец.
Add a comment