В последнюю секунду почти двухчасовой записи появилась строка: «Субтитры делал DimaTorzok». Перед ней не было реплики. Не было музыки, титров или голоса, который можно было бы принять за эти слова. Были 86 секунд почти полной тишины.

Модель указала высокую вероятность отсутствия речи — 0,906, — но всё равно напечатала знакомую ей фразу. Два последних слова получили нулевую длительность. Система разделения говорящих тоже не обнаружила в этом месте человека. Ошибка выглядела нелепо, однако именно она объясняла более серьёзную проблему: современная модель распознавания может одновременно понимать, что перед ней тишина, и уверенно рассказывать, что якобы услышала.

Мы начали с одного испорченного документа, а закончили сравнением почти двух десятков моделей и способов обработки звука. На видеокарте NVIDIA RTX 5060 Ti с 16 ГБ памяти были проверены короткие контрольные фрагменты, непрерывный семиминутный отрезок и, для финалистов, все шесть исходных файлов. Их общая длительность составила 5 часов 29 минут 40 секунд.

Ожидалось, что новая версия Whisper или одна из моделей 2026 года легко обойдёт старый large-v2. Этого не произошло. Новые системы выигрывали отдельные эпизоды, быстрее работали или лучше отделяли тишину. Но только large-v2 выдержал главное противоречие этих записей: нужно было услышать голос почти у шумового пола и при этом не сочинить разговор там, где голоса нет.

Запись на границе слышимости

Сохранившийся семиминутный фрагмент был записан в один канал, с частотой 48 кГц и глубиной 16 бит. Его средний уровень составлял −52,3 дБ относительно цифрового максимума. В самых тихих местах он опускался до −63,5 дБ, а шумовой фон находился около −70,3 дБ. Разница между речью и шумом иногда измерялась несколькими децибелами.

Для обычной студийной записи это плохой исходный материал. Для проверки моделей — почти идеальная ловушка. Генеративная система старается продолжить вероятный текст и рискует принять шум за начало фразы. Более осторожная система оставляет окно пустым, но вместе с шумом может отбросить тихий ответ реального человека.

Мы выбрали девять двадцатисекундных окон. Около 200-й секунды звучал вопрос про бахилы. На 390–410-й секундах обсуждали документы и согласие. Около 520-й секунды называли фамилию, имя и дату рождения. Окна около 290-й и 490-й секунд были почти пустыми и служили проверкой на выдумки.

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

Признаки провала

DimaTorzok, «Продолжение следует», упоминания редакторов субтитров, десятки слов «Спасибо», описания несуществующей музыки и циклическое повторение одной фразы считались не мелкими огрехами, а доказательством, что модель потеряла связь со звуком.

Сначала мы проверили сам Whisper

Сравнение началось с официального Whisper и его ускоренной реализации faster-whisper. Large-v3 был очевидным первым кандидатом: он новее, обучен на большем объёме данных и часто превосходит large-v2 в общих таблицах качества. На этой записи его преимущество исчезло.

Обычный large-v3 создал 445 отрезков с высокой вероятностью отсутствия речи. В тексте встретились 70 «Спасибо», 13 «Продолжение» и восемь вариантов Dima. Внешний детектор речи WhisperX очистил часть пустых окон, но DimaTorzok сохранился. Принудительное выравнивание слов лишь прикрепило выдуманную фразу к шуму и снабдило её временем.

Ускоренный large-v3-turbo закончил раньше, но тоже напечатал «Продолжение» и фразу про редактора субтитров. Large-v2 оказался спокойнее: на полном основном файле он не породил этих трёх артефактов и выдал 1041 отрезок, содержащий 6348 слов. Единственный заметный срыв случился около 38-й минуты, где одна фраза повторилась примерно десять раз на фоне уровнем около −60 дБ.

Мы отдельно запустили официальный large-v2 в PyTorch с исходными весами, проверенными по контрольной сумме. На семи минутах он занял 61,9 секунды с настройками против повторов и 104,4 секунды со штатными параметрами; пиковое потребление видеопамяти составило 8,8 ГБ. Первый режим оборвал последнюю речевую часть на 6:25 и потерял имя с датой. Второй дошёл до 6:59, но дважды придумал английскую фразу taking a shower и тоже не сохранил контрольные сведения. Исходная реализация не оказалась точнее ускоренной.

Точность изменилась вместе с форматом вычислений

Затем мы оставили одну модель и поменяли только способ хранения чисел. Это был важный опыт: слова «тот же large-v2» скрывают несколько разных режимов вычисления.

Режим large-v2Что произошло на семи минутахИтог
FP16Восемь раз повторил «Я не знаю», заменил 1995 год на 1992-йСлишком много циклов
INT8–FP16Придумал «тревожную музыку» и хлопок двери, потерял имя и датуСжатие ухудшило результат
BF16Не дал Dima, циклов и звуковых описаний; правильно восстановил 1995 годЛучший баланс

BF16 занял 18,9 секунды. Он распознал меньше самых тихих слов, чем FP16, но не заполнил пропуски повторами и правильно восстановил контрольную дату. В этой задаче чуть более полный текст был хуже чуть более короткого: добавленные слова не принадлежали записи.

Даже версия среды выполнения имела значение. Старый CTranslate2 4.6.1 потерял дату и повторил «Я не знаю». После штатного обновления до 4.8.1 тот же рабочий путь воспроизвёл контрольный результат: 43 отрезка, 236 слов, правильный 1995 год и ни одного заранее отмеченного артефакта.

Новые модели проходили одну и ту же проверку

После Whisper мы не искали систему, которая красивее перепишет один удачный отрывок. Каждая модель сначала получала одинаковые окна с тишиной, бахилами, документами, фамилией и датой. Только после этого имело смысл давать ей длинный фрагмент.

МодельСильная сторонаГде не справилась
Qwen3-ASR 1,7BОфициальный русский режим и отдельное выравнивание словНа семи минутах оставила 369 знаков; пропустила большие части и говорила в тишине
Qwen3-ASR 0,6BВ автоматическом режиме оставляла несколько тихих окон пустыми«Бахилы» превратились в «бакилы», 1995 — в 1919; длинный вход закончился нехваткой памяти
NVIDIA Canary 1B v2Русский язык и временные отметки словНа длинном фрагменте зациклилась на «вот так вот», ошиблась в именах
Microsoft VibeVoice-ASR 9BПоддерживает 51 язык, длинные записи и собственное разделение говорящихНе подходит под ограничение 16 ГБ: веса занимают около 17,3 ГБ, поэтому скорость с переносом части модели в оперативную память не сравнивалась
GLM-ASR NanoЧасто честно оставляла тишину пустойТеряла реальную речь и повторяла искажённую фамилию
OmniASR CTC 1B и 3BБыстрые, без длинных циклов; 3B слышала больше разговораСильно повреждали русский текст, не давали готового времени слов
OmniASR LLM 1B и 3BПринимали более длинный звукПридумывали повторяющиеся фразы на слабом фоне; 3B зацикливалась сильнее 1B
MOSS Transcribe Diarize 0,9BВ коротком окне правильно назвала человека и дату, сразу разделила двух говорящихНа семи минутах сократила тихие части и выдала ошибочную временную отметку
NVIDIA Nemotron 3.5 StreamingБыстрый потоковый режим, чистая тишина, правильно услышанные бахилыПотеряла фамилию, имя и большую часть тихих ответов
Dolphin small 0,4BОчень быстрая, выдаёт время словОтбрасывала почти всю тихую речь и полностью потеряла имя с датой
Mistral Voxtral Realtime 4BЧистая тишина и точная фраза про бахилыОставила пустыми разговор о согласии, фамилию, имя и дату; нет времени слов
ESPnet OWSM-CTC v4 1BЗа семь минут не дала циклов и обработала звук примерно за 25 секундВернула лишь 39 слов и пропустила почти всю тихую речь

Наиболее интересным соперником оказался MOSS-Transcribe-Diarize. На коротких отрывках она услышала бахилы, правильно восстановила фамилию, имя и дату, а также сразу различила двух людей. Но длинный вход показал другую картину: тихие части сократились, контрольные сведения ухудшились, а одна временная отметка закончилась раньше, чем началась. Хороший двадцатисекундный опыт не выдержал семи минут.

Похожее расхождение возникло у Voxtral Realtime. Она идеально прошла проверку чистой тишиной и точно записала вопрос про бахилы. Но три других окна, где человек всё же говорил, остались пустыми. Для прямого эфира такая осторожность может быть достоинством; для архивной беседы — потерей содержания.

Три семейства ошибок

После десятков запусков модели разделились не на «хорошие» и «плохие», а на три группы. Генеративные системы, к которым относятся Whisper и языковые варианты OmniASR, пытались восстановить самые тихие фразы, но могли продолжить их уже без звука. Отсюда повторы, DimaTorzok и несуществующие редакторы субтитров.

Неавторегрессионные системы вроде OWSM-CTC редко сочиняли длинные фразы. Их ошибка была противоположной: они молчали. Из семи минут OWSM сохранила всего 39 слов. Это выглядит аккуратно на странице, пока не сравнишь страницу с записью.

Потоковые Nemotron и Voxtral были быстры и устойчивы на чистом сигнале. Но они рассчитаны принимать решение без большого будущего контекста. На предельно тихой архивной записи осторожный потоковый распознаватель чаще выбирал пустоту.

Размер модели также не гарантировал улучшения. Трёхмиллиардная OmniASR слышала больше своей версии на один миллиард параметров, но сильнее зацикливалась. Веса девятимиллиардной VibeVoice занимают около 17,3 ГБ, поэтому на нашей карте они не могли целиком разместиться ещё до выделения памяти для вычислений. Официальное автоматическое распределение перенесло часть модели в оперативную память. Полученные 2,5 минуты на двадцатисекундный отрывок нельзя считать скоростью VibeVoice на подходящем оборудовании; модель исключена только потому, что не выполняет условие работы целиком на видеокарте с 16 ГБ памяти.

Детектор речи оказался слишком хорош в удалении

Самым очевидным средством против выдумок был детектор голосовой активности — программа, которая сначала отделяет речь от пауз, а затем передаёт модели только речевые интервалы. На одном полном файле Silero действительно удалил DimaTorzok. Одновременно расшифровка сократилась с 3524 до 512 слов. Вместе с одной выдумкой исчезли 3012 настоящих слов.

Отдельный FireRedVAD правильно оставил пустыми окна около 470-й и 490-й секунд. Но в ключевом месте около 520-й секунды он не нашёл ни мгновения речи и полностью вырезал бы фамилию, имя и дату рождения. На других тихих окнах сохранялось меньше секунды звука.

Исследования подтверждают, что галлюцинации распознавания особенно часто возникают рядом с тишиной и слабым сигналом. Но на нашей записи речь сама находилась рядом с тишиной. Поэтому более строгий порог не решал задачу, а менял один вид ошибки на другой. В рабочем режиме детектор речи отключён.

Разделение говорящих — другая задача

Диаризация отвечает на вопрос «кто говорил когда», а распознавание — «какие слова прозвучали». Смешивать эти этапы опасно. Если Whisper придумал предложение в паузе, метка «Говорящий 2» не превращает предложение в настоящее. Если Whisper пропустил шёпот, программа разделения голосов не восстановит потерянные слова.

Pyannote Community-1 обнаружила в шести файлах соответственно пять, шесть, четыре, пять, четыре и три голоса. Слова назначались говорящему только при наибольшем временном пересечении. Доля слов без подтверждённого голосового интервала составила от 0,4 до 6,6 процента. Мы оставили для них честную пометку «Спикер не определён», а не приписали ближайшему человеку.

WhisperX с русской моделью выравнивания помог двум MP4: неопределённых слов стало ноль, а переходы между людьми сделались ровнее. На тихих WAV результат ухудшился. В одном случае доля невыравненных слов выросла с 3,5 до 5,2 процента, появились лишние смены говорящего. Поэтому выравнивание применяется к видео, но не к WAV. Это решение принято по сравнению результатов, а не ради единообразия схемы.

Шесть полных записей изменили окончательный выбор

Короткие окна помогали быстро отсеять очевидно неподходящие модели, но победителя определил только полный прогон. Все четыре WAV и два MP4 были обработаны без сжатия и нарезки. Получилось 2184 отрезка и 22 370 слов.

Модель и способ поискаСлов«Спасибо»DimaTorzok«Продолжение»Соседние повторы
large-v2, ширина 5, перебор температуры22 359221017
large-v2, ширина 5, температура 025 575691069
large-v2, ширина 1, температура 025 4211630150
large-v3, ширина 5, перебор температуры17 608131323171
large-v3, ширина 5, температура 017 377134293277
large-v3, ширина 1, температура 017 707141293082

Большое число слов само по себе не означало полноту: режим с температурой 0 мог набирать объём повторениями. Поэтому важна вся строка. Large-v2 с шириной поиска 5 и штатным перебором температуры дал не самый длинный текст, зато реже других повторял соседние фразы и почти не создавал заранее известных выдумок.

Large-v3 иногда точнее формулировал короткие чистые отрывки из MP4. На длинных тихих WAV он проиграл: полезного текста стало меньше, DimaTorzok появился 32 раза против одного, а «Продолжение» — 31 раз против нуля. Изменение температуры или сокращение ширины поиска не устранило этот разрыв.

Что пришлось исправить вокруг модели

Качество модели было только частью работы. Два файла размером около 650 МБ сначала падали из-за ограничения нашего синхронного маршрута загрузки, а MP4 ошибочно отсутствовал в списке разрешённых форматов. Это не были пределы Whisper. Загрузку перенесли в асинхронную очередь с пределом 2 ГБ, а PyAV стал читать звуковую дорожку MP4 напрямую. Оба больших файла прошли без сжатия и перекодирования.

Служба разделения говорящих тоже не могла читать MP4 через прежнюю библиотеку. Её перевели на тот же PyAV 16.0.1: первый звуковой поток декодируется в один канал с частотой 16 кГц без промежуточного файла. После завершения задания исходная временная загрузка удаляется.

Рабочая конфигурация теперь закреплена явно: faster-whisper 1.2.1, large-v2, BF16, CTranslate2 4.8.1, вычисления на CUDA, ширина поиска 5, штатный перебор температуры, временные отметки слов, отключённый перенос предыдущего текста и порог длинной тишины 2 секунды. Пакетная обработка и предварительный детектор речи отключены. После исправлений 34 проверки программного интерфейса прошли, одна была пропущена.

Почему мы не загрузили вообще каждую модель

Часть кандидатов была исключена по документации до загрузки весов. Fun-ASR-MLT-Nano, Cohere Transcribe, Xiaomi MiMo-ASR, ARK-ASR, IBM Granite Speech, Phi-4 Multimodal и несколько моделей Kyutai не заявляли русский в нужном режиме. Parakeet TDT формально вернул русский текст, но его официальная карточка указывает только английский; такой результат нельзя считать поддерживаемым.

Meta MMS и SeamlessM4T знали русский, но их лицензии запрещали нужное коммерческое применение, а готовых временных отметок слов не было. Облачные ElevenLabs, AssemblyAI, Speechmatics и Azure могли быть сильными, но условие требовало локальных весов. Seed-ASR опубликовала исследование без подходящего готового набора весов.

Мы также сознательно не выбирали специализированную русскую модель. GigaAM v3 на нескольких отрывках была точнее многих универсальных систем, но задача состояла в поиске одной многоязычной модели для разных будущих записей. Это условие надо помнить: если нужен только русский язык, состав финалистов и победитель могут измениться.

Лучшая открытая модель для видеокарты с 16 ГБ памяти

По итогам эксперимента faster-whisper large-v2 в режиме BF16 — лучшая открытая универсальная модель для локальной расшифровки на видеокарте с 16 ГБ памяти. Она прошла короткие контрольные отрывки, непрерывный семиминутный фрагмент и полный прогон шести записей общей длительностью 5 часов 29 минут.

На длинной тихой русской речи, с обязательными временными отметками и без самодельной очистки текста large-v2 дал самый точный и устойчивый результат среди проверенных моделей. Он пропускает часть речи у шумового пола. Но эти пропуски оказались менее разрушительными, чем уверенные выдумки large-v3, и менее обширными, чем молчание потоковых и неавторегрессионных систем.

Одна строка DimaTorzok всё же осталась. Её удалили не по запрещённому списку слов, а потому что конкретный интервал прошёл проверку: 86 секунд без распознанной речи, высокая вероятность тишины, нулевая длительность слов и отсутствие голоса по независимой модели. Тем же способом была исключена одна метка «Музыка». Это локальное решение на основании звука, а не фильтр, который способен стереть настоящую реплику.

Следующая новая модель должна будет пройти тот же путь: девять контрольных окон, семь непрерывных минут, все шесть оригиналов, подсчёт известных срывов и ручное чтение мест после долгой тишины. До тех пор номер версии остаётся обещанием. На этих записях более старый Whisper оказался не самым современным, а самым осторожным из тех, кто всё ещё слышал.