Привет. Ищу полезную инфу, подсказки или критику. Есть проект по

ASR. На данных заказчика обкатали несколько SOTA ASR моделек, лучше всего себя показал Whisper Large V2.

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

Однако всё же есть примеры неидеальной работы на тех же фамилиях и именах сотрудников компании, внутренних названиях и наименованиях, все же некоторых специфических терминах.

Текущие условия:
⁃ Имена и фамилии сотрудников можно запросить
⁃ Можно также запросить некоторый набор терминов и внутренних топонимов/названий, которыми они оперируют в диалогах
⁃ Самими же диалогами компания делится неохотно из-за всяких заморочек на прайваси. В лучшем случае ожидаю, что дадут не более 100 часов, а то и поменьше
⁃ У нас убермало компьюта, в распоряжении буквально пара 2080 ti и одна 3090 ti

Чего бы хотелось в идеале:
⁃ Сохранить текущий перформанс Whisper Large V2, но улучшить его работу на вышеуказанных словах
⁃ В ближайшем будущем переехать на более легковесное решение, которое бы работало быстро (<1 xRT) и хорошо скейлилось на серверных CPU типа XEON

Сейчас смотрим в сторону прикрутки чего-то к декодированию:
⁃ LM-fusion подходы
⁃ Seq2Seq исправление в духе spell-correction поверх K-гипотез от Whisper
⁃ Файнтюнинг Whisper от Medium до того самого Large V2 (если заказчик насыпет данных всё-таки)
⁃ Потенциально (но пока не хотелось бы) переход на другие архитектуры

От перехода отталкивает то, что предобучать что-то самим у нас буквально нет компьюта, а большинство доступных предобученных ASR не кейс-сенсетив, не умеют в пунктуацию и нормализацию. На сколько нам нужна пунктуация мы пока выясняем, но вау-эффект от хорошо оформленных транскрипций у бизнеса уже был и назад этот фарш не провернуть…

Возможно, это не такая уж проблема, и на самом деле можно было бы делать пайплайн с нормализацией отдельно, но пока мы не можем оценить насколько это направление сложнее. Короче бизнес сложно будет убедить идти туда, когда Whisper Large V2 работает «почти идеально».

Собственно, вопросы:
1. Пробовали ли вы как-то комбинировать E2E-ASR (в идеале с Whisper) с отдельной LM, можете поделиться статьями, кодом, идеями, инсайтами, мб какими-то личными наработками?
2. Как бы вы решали задачу улучшения существующей ASR-системы, когда параллельных данных очень мало и/или нет совсем (но есть голден-сеты и отдельно тексты)?
3. Что бы вы в целом посоветовали при обучении/файнтюниге Whisper под свой домен, какой был опыт и результаты у вас?
4. Какие другие архитектуры вы могли бы порекомендовать в условиях данной задачи?

У команды толком нет опыта с ASR, мы просто ML-инженеры/оркестры, поэтому сейчас только погружаемся в задачу. Также мы пока только пытаемся заформализовать требования/оценки и направления работы, поэтому какие-то ограничения возможно удастся снять в диалоге с бизнесом, если они будут блокировать реализацию проекта.

В общем, если более опытные ребята натолкнут на полезные мысли, буду очень признателен. Заранее спасибо!

9 ответов

109 просмотров
Oleg-Pavlovich Автор вопроса

Спасибо за ответ! Идея дообучать модель поменьше для тестов нравится. Если будем файнтюнить, пойдем по такому пути скорее всего. Насчёт того, что в Whisper уже есть LM, я понимаю, просто хотелось уточнить имеет ли при этом смысл накрутить другую LM и/или иной алгоритм для рескоринга гипотез. Просто кажется, если впрягаться в декодирование, то можно что-то выжать даже имея тупо список терминов. А вот для файнтюнинга он будет бесполезен.

2. Whisper это state-of-the-art (ну или рядом) система. Чтобы её доучить, надо будет много данных и много компьюта. файнтьюниться спокойно и на малых данных. и не надо даже много компьютеров. поэтому я бы предложил сперва собрать датасет на данных клиента и на них дообучить поменьше модели

Oleg-Pavlovich Автор вопроса
Aigiz K
2. Whisper это state-of-the-art (ну или рядом) сис...

Если сговоримся с заказчиком, конечно будем пробовать. А можно какие-то цифры для оценки, если не секрет? На скольких часах файнтюнились, что получилось добиться по метрикам?

Oleg Pavlovich
Если сговоримся с заказчиком, конечно будем пробов...

вообще чем больше данных, тем качество будет лучше. я с 250 часами small и медиум обучил. для самой маленькой результат был плохой, подозреваю что из за малого количества данных. но язык у меня башкирский, язык проще для asr. wer где то 14%

Oleg-Pavlovich Автор вопроса

Круто, спасибо! А башкирский был в претрейне у него? Полагаю что нет, но если да, интересно ещё какой был WER до файнтюна?

Oleg Pavlovich
Круто, спасибо! А башкирский был в претрейне у нег...

его не было совсем. но там есть родственные языки типа турецкий, казахский

Oleg-Pavlovich Автор вопроса
Aigiz K
его не было совсем. но там есть родственные языки ...

понял, спасибо большое ещё раз за ответы! полезно

у немо тоже есть модель с пунктуацией и капитализацией https://huggingface.co/nvidia/stt_ru_fastconformer_hybrid_large_pc

Oleg-Pavlovich Автор вопроса

Похожие вопросы

Обсуждают сегодня

Как думаете через какой сервис они верифицируют?
inc.
5
Вопрос на перед, на следующую пятницу. Сколько строк кода можно вешать на одного программиста, понятно что если проект хорошо написан то можно и миллион. Но есть же где то пре...
AlekseyK Kluchnikov
31
Немного оффтопа: а кто на чем сидит для осдева в плане ide/редактора? Последнее время сидел на vscode, но я его прям не могу нормально воспринимать, перешел на сlion, но меня...
Evg Resh
29
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
День добрый, подскажите пожалуйста, есть ли какой-то способ сказать ребару не компилировать определённое приложение? Всю доку их перечиатл ничего подобного не нашёл
Кирилл
14
На чём в основном щас пишут мини апы? Vuejs?
Goot evening Not everyone
6
Я правильно понимаю что нет способов получить список ожидающих заявок на вступление в группу с помощью бота из mtproto?
Шамиль Прилов
9
А какие существуют способы обработки ошибок выделения памяти в ядре? Т.е., допустим, есть функция, которая возвращает адрес свободной страницы в физической памяти и диапазон в...
disba1ancer
51
Вот объясните, как это работает: Вот есть допустим unix-подобная система, и программа запускает допустим printf или fork, как это передается ядру, и как оно обрабатывать начин...
Егор
14
Всем привет. Сейчас я изучаю erlang по книге Erlang and OTP in action. Дошел до главы где реализуется первый gen server на примере tcp rpc сервера. Меня очень сильно смутил ко...
Freezing Death
12
Карта сайта