Коротко
Автор заменил sherpa на потоковую Nemotron в приложении для встреч и резко сократил время разметки голосов. За неделю эксплуатации обнаружились проблемы атрибуции, пропущенные реплики в живой ленте, незамеченный сбой интеграции и чрезмерное потребление памяти.
Контекст
Автор проекта Charoite_audio описывает переход от sherpa к Nemotron для диаризации в приложении, которое записывает встречи, строит стенограммы и показывает живые подсказки. Исходная задача — ускорить обработку аудио и улучшить разметку говорящих; код опубликован под Apache 2.0 на github.com/charoiteai/Charoite_audio.
Главное
- На записи длительностью 57 минут с восемью участниками разметка каналов Nemotron заняла 7 секунд, а повторный прогон sherpa — 18,5 минуты.
- Для микрофонного канала после фильтра эха автор отказался от различения голосов: речь длительностью от 15 секунд приписывается владельцу микрофона.
- Трекер эмбеддингов имел восемь мест и при их заполнении отбрасывал новые голоса; в одном звонке живая лента содержала 584 слова против 3795 в итоговой стенограмме.
- Потоковые слоты переименовывали человека после паузы: на записи 69 минут с шестью голосами возникло 33 метки. Закрепление одной метки за человеком сократило их число до шести.
- Поток включили в четверг в 12:35, отключили в 12:46, затем снова включили в 14:29 после исправлений.
- DER потоковых меток составлял 0,11–0,18, а результаты трекера на других записях — 0,26–0,97; человеческого эталона для русского аудио не было.
- В mlx-audio 0.5.6 у nemotron_diarization отсутствовало поле fc_encoder_config. Единственный тест против реальной библиотеки пропускался через importorskip из-за отдельного окружения.
- Ограничение MLX-кэша через mx.set_cache_limit на 512 МБ снизило память процесса с 8,6 ГБ до 808 МБ без изменения меток.
- Медиана задержки подсказок выросла с 5,9 до 8,4 секунды; связь этого эффекта с потоковым режимом автор не подтвердил.
- Порог отсечения фрагментов короче пяти секунд автор собирался пересмотреть после недели эксплуатации, но этого не сделал.
Как сделано
Автор заменил sherpa потоковым Nemotron из mlx-audio 0.5.6 и сравнивал его с прежним трекером голосовых эмбеддингов. Для микрофонного канала отказался от выделения отдельных голосов: после фильтра эха весь материал с речью длительностью не менее 15 секунд приписывается владельцу микрофона, а речь разбивается на фрагменты.
В живой ленте для потоковых меток сначала использовались сырые слоты модели. Поскольку слот мог сменить имя после паузы, автор закрепил одну метку за человеком. Затем устранил ограничение трекера, который при заполнении всех восьми мест отбрасывал новые голоса до распознавания.
Ручная проверка выявила обращение к отсутствующему у nemotron_diarization полю fc_encoder_config. Тест с настоящей библиотекой пропускался через importorskip, поскольку mlx-audio устанавливался в отдельном окружении. Автор исправил обращение и ограничил кэш MLX через mx.set_cache_limit(512 МБ).
Результаты
На 57-минутной записи с восемью участниками Nemotron разметил каналы собеседников за 7 секунд против 18,5 минуты у sherpa. Микрофонный канал обработался за 8 секунд вместо прежней диаризации sherpa, которая занимала около 2,1 ГБ памяти. После перехода весь разбор 37-минутного звонка занял 8 минут; откатов на sherpa из-за сбоев за неделю не было. Обычно разметка канала собеседников занимала 3–5 секунд, однажды — 10 секунд на 26-минутном звонке.
Потоковые метки после исправлений дали DER 0,11–0,18 на записях четверга; у трекера на других записях вторника было 0,26–0,97. Это не строгий прямой тест: записи различались, а человеческой эталонной разметки русского аудио не было. Два движка Nemotron и sherpa на одних записях расходились с DER 0,34 и 0,54. После ограничения кэша процесс тени снизил потребление памяти с 8,6 ГБ до 808 МБ при неизменных метках. Медианное время появления подсказки с живым потоком составило 8,4 секунды против 5,9 секунды ранее.
Ограничения
Живой поток проработал неделю, поэтому данных об устойчивости на длительном сроке мало. Сравнение DER проведено на разных наборах записей и без человеческой эталонной разметки, так что цифры не доказывают превосходство модели. Микрофонная схема намеренно не различает голоса: речь коллеги рядом может быть записана как речь владельца. Причину замедления подсказок автор не установил, как и причину редкого 10-секундного разбора. Обещанный пересмотр порога в пять секунд для отбрасывания коротких голосовых фрагментов не состоялся. В публикации не приведены денежные расходы.
Что взять себе
- Проверяйте живую ленту отдельно от итоговой стенограммы: постобработка может выглядеть корректно, даже если поток теряет значительную часть речи.
- Потоковые слоты модели не всегда являются устойчивыми идентификаторами людей; проверяйте поведение после пауз и закрепляйте метки подходящим способом.
- Не полагайтесь только на тесты с заглушками: интеграцию нужно запускать с настоящей библиотекой и в том окружении, где работает модель.
- Оценивайте диаризацию по человеческой разметке, если она доступна; сравнение двух моделей без эталона и на разных записях даёт лишь ограниченные выводы.
- Проверяйте реальное потребление памяти ML-фреймворка и его кэшей: RSS процесса может не отражать весь занимаемый объём.
Читать оригинал, если…
Откройте оригинал, если нужны код, история изменений и подробности тестирования в проекте Charoite_audio.