💎 Как Улучшить Качество Распознавания Речи?

И пара слов про генерализацию систем STT.

Мы часто ведем беседы с заказчиками на тему того, как можно небольшим ресурсом (и не только) улучшать качество распознавания речи в конкретном домене. Чтобы лишний раз не повторяться, напишу тут краткое резюме.

Пара слов про генерализацию систем STT

Системы STT делятся на 2 типа:

  • Которые хорошо или удовлетворительно работают вообще на любых (в разумных пределах) доменах и качество нужно только улучшать;
  • Которые при старте обязательно нужно допиливать - размечать аудио, тренировать языковые модели;

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

Грубо говоря решение "А" стартует с 30% WER "на холодную", а решение "Б" на холодную вообще не стартует и работает только после вложения какого-то количества ресурсов, чтобы это решение работало на этом домене. Но после этого можно сразу получить допустим 25% WER.

Хорошо это или плохо? Все естественно относительно, но никто не сможет дать гарантии, что решение "Б", которое не генерализуется на старте и "подгоняется" под конкретный домен при малейшем от него отступлении продолжит иметь заявленное качество. Возникает также закономерый вопрос, какого качества можно достичь вложив ресурсы в кастомизацию решения "А". Что важно - рост качества решения "А" на одном домене как минимум не приведет к его падению на других.

Когда мы делали подход к снятию метрик систем, доступных на рынке,  мы обратили внимание, что большая часть доступных решений относится к категории "Б" (ну и немного прослеживается кто на чем тренировал свои системы).

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

Так как все-таки улучшить качество распознавания речи?

Мы сейчас умеем это делать четырьмя способами (от наимее затратного к наиболее затратному):

  1. Сборка доменного словаря терминов. Если у вас часто употребляются какие-то "особенные" слова, которые в обычном языке употребляются редко, но писать их нужно правильно - мы умеем просто добавлять такие словари. Это скорее добавляет качеству восприятия текста. Это самый простой и быстрый способ;
  2. Если у вас есть большой корпус текстов в вашем домене - то на них можно натренировать "маленькую" языковую модель и использовать ее одновременно с большой. Таким образом вырастет и качество и сохранится генерализация! Естественно можно комбинировать со способом (1);
  3. Если нужен еще более сильный  прирост качества - можно просто разметить энное количество часов аудио. Обычно это от нескольких десятков до нескольких сотен часов. Это самый эффективный и проверенный способ. Его минус - время и затратность. Мы можем сделать это за вас, у нас все настроено для этого;
  4. Вообще в любом домене "рескоринг" гипотез, которые выдают модели, можно строить и на каких-то кастомных доменных эвристиках. В такси такой эвристикой, например, является наличие валидного адреса в тексте. Уже другой вопрос, что надо "вариться" довольно много времени в каком-то домене, чтобы это работало. Но иногда бывают и очень простые эвристики (например персональные данные можно искать по наличию цифр), которые тоже работают;

Естественно - все эти способы можно и нужно комбинировать.

Способ Затраты Насколько получалось улучшить WER
Словарь терминов 💵 1-2 процентных пункта
Дополнительная LM 💵 4-5 процентных пунктов
Сбор и разметка аудио 💵 💵 💵 8 - 10 процентных пунктов
Кастомные доменные эвристики Может быть 💵 а может и 💵 💵 💵 💵 Все очень по-разному

Кейс 1 - словарь

Типовой пример - на такси словарь срезает 1-2 процентных пункта WER в каждом регионе.

Кейс 2 - дополнительная LM

Мы делали анализ сравнения "холодного" и "горячего" старта на конкретном домене (финансы). У нас получалось за счет комбинации словаря и дополнительной LM срезать дополнительные 4-5 процентных пунктов WER без особых инвестиций в разметку.

Кейс 3 - разметка аудио

Разметив менее 100 часов аудио мы смогли снизить WER на такси с 20% до 12%.

Кейс 4 - кастомные эвристики

В распознавании речи пост-процессинг делается посредством сравнения вероятности гипотез, которые выдает модель. Довольно показательно - а что будет, если посчитать для неправильных предсказаний, в каком % из них верная гипотеза вообще была в списке, но не первом месте?

Мы сделали такой анализ для такси, и увидели, что среди всех ошибок порядка трети ошибок на самом деле на втором-третьем месте таки содержат верную гипотезу.  Уже другой вопрос были ли ошибки в мелочах или в адресах, но используя свой доменный аналог геокодера из двух таких гипотез можно выбирать верную (на самом деле вычленять и проверять адреса оффлайн не так-то просто!).

Какой способ выбрать?

На самом деле тут не надо ничего выбирать. В идеале надо использовать все способы.

Просто как правило их внедрение будет просто разнесено по времени. Имея сильную STT модель, разметка даже 50 часов не является очень большим расходом.