Руководство
Что на самом деле происходит, когда Mac транскрибирует аудио на устройстве
«ИИ на устройстве» — маркетинговая фраза, прикреплённая к вполне конкретной и довольно интересной инженерной работе. Вот весь конвейер, от файла до текста.
Теперь любое приложение заявляет, что делает всё «на устройстве». Стоит понимать, что за этим стоит: отчасти потому, что это объясняет, почему локальная транскрибация так быстро стала хорошей, отчасти потому, что в этом и разница между утверждением, которое можно проверить, и тем, которое нельзя.
Вот этот конвейер, по порядку.
Шаг 1: всё превращается в моно 16 кГц #
Whisper, модель распознавания речи, которую использует почти каждое такое приложение, принимает ровно один вид входных данных: 16 000 отсчётов в секунду, один канал, числа с плавающей точкой от -1 до 1.
Поэтому первое, что делает любой инструмент транскрибации, — выбрасывает большую часть вашего аудио. Ваша стереозапись на 48 кГц сводится в моно и понижается по частоте дискретизации. У видеофайлов извлекается звуковая дорожка, а изображение отбрасывается.
Звучит разрушительно, но в основном таковым не является: человеческая речь живёт ниже 8 кГц, а по пределу Найквиста частота дискретизации 16 кГц захватывает её целиком. Теряется качество музыки, а не разборчивость.
Практическое следствие: ваша дорогая запись на 96 кГц на этом этапе ничего вам не даёт — но и плохо сжатый файл этим не спасти.
Шаг 2: детекция речевой активности решает, что вообще стоит расшифровывать #
Сначала запускается вторая, куда меньшая модель, которая отмечает, в каких участках аудио есть человеческая речь.
Обычно используется Silero VAD — меньше мегабайта, и отвечает он на один вопрос: речь или не речь, с мелким шагом по времени.
Это существует по двум причинам. Так быстрее, потому что декодировать тишину — впустую потраченная работа. Что важнее, это предотвращает сбой, при котором Whisper, получив аудио без речи, всё равно порождает текст и зацикливается. Именно благодаря VAD современная локальная транскрибация перестала выдавать страницы повторяющихся фраз.
Шаг 3: звук становится картинкой #
Whisper не потребляет волновые формы. Он потребляет лог-мел-спектрограмму: двумерное изображение, где по горизонтали — время, по вертикали — частота в шкале, соответствующей человеческому слуху, а яркость — энергия.
Это и есть настоящий концептуальный скачок в современном распознавании речи. Как только аудио становится изображением, к нему можно применить весь аппарат, созданный для компьютерного зрения, — что дальше и происходит.
Шаг 4: работает энкодер, в идеале на Neural Engine #
Whisper — трансформер из двух половин. Энкодер читает спектрограмму и превращает её в плотное числовое представление сказанного. Это дорогая половина: тяжёлое, регулярное умножение матриц над входом фиксированного размера.
А это ровно то, для чего создан Neural Engine от Apple: выделенный блок на чипе, который делает один узкий вид арифметики чрезвычайно быстро и при очень низком энергопотреблении. Он не универсален — произвольный код на нём не выполнить, — но энкодер трансформера имеет ровно нужную форму.
Чтобы энкодер туда попал, модель нужно заранее скомпилировать в формат Core ML (.mlmodelc). Приложения, которые это делают, поставляют энкодер Core ML вместе с весами модели, и это самая большая разница в скорости между быстрым и медленным приложением локальной транскрибации на одном и том же железе.
Шаг 5: декодер работает на GPU #
Декодер порождает собственно текст, по одному токену за раз, и каждый обусловлен всем предыдущим.
Эта половина последовательна, поэтому она не подходит под пакетную архитектуру Neural Engine. Вместо этого она работает на GPU через Metal. На Apple Silicon этот GPU делит память с процессором, так что веса модели не приходится копировать через шину, — и в этом во многом причина, почему Apple Silicon показывает себя лучше ожидаемого в локальном выводе.
Шаг 6: таймкоды получаются из того же процесса #
Whisper выдаёт особые токены таймкодов вперемешку со словами. Именно так вы получаете SRT с осмысленными таймингами, а не стену текста: информация о времени выпадает из того же прохода декодирования, а не из отдельного шага выравнивания.
Когда VAD пропустил тишину, тайминги приходится отображать обратно на исходную запись, иначе каждый таймкод после первого пропуска был бы неверным.
Модель — и почему она меньше, чем кажется #
Модель Base у Whisper — 74 миллиона параметров. При полной точности это около 140 МБ, и большая их часть для нашей задачи избыточна.
Квантование хранит каждый вес меньшим числом бит. В модели q5_1 веса занимают 5 бит плюс небольшие масштаб и смещение на блок — примерно 6 бит на вес вместо 16. Получается около 60 МБ, а разницу в точности на обычной речи заметить трудно.
Для телефона это важно: загрузка 140 МБ и соответствующая память — реальная цена. Поэтому же честный ответ на вопрос «какую модель взять» — обычно меньшая, чем предполагают.
Длинные файлы и почему трудность именно в памяти #
API Whisper принимает один непрерывный буфер отсчётов. Два часа на 16 кГц — это около 470 МБ чисел с плавающей точкой плюс спектрограмма сопоставимого размера.
На Mac это нормально. На iPhone этого достаточно, чтобы приложение было завершено системой, — вот почему некоторые мобильные приложения транскрибации незаметно ограничивают длину файла.
Решение — транскрибировать окнами: держать декодированное аудио на диске, отображать в память по одному фрагменту, расшифровывать его, освобождать. Тогда пик потребления памяти зависит от окна, а не от файла. Тонкость в том, где резать: разрежете посреди слова — и на каждой границе получите искалеченное предложение, поэтому разумная реализация режет в самой тихой точке внутри области перекрытия и сдвигает таймкоды каждого окна обратно в исходную временную шкалу.
Почему всё это важно для вас #
Из описанного конвейера следуют три вещи, и это не маркетинговые заявления:
Оно работает без сети. Ни один шаг выше её не требует. Это проверяется за тридцать секунд — мы описали как, включая проверки, для которых не нужно нам доверять.
Ваша запись не становится ничьими обучающими данными. Дело не в том, что локальное приложение обещает не обучаться на вашем аудио. Дело в том, что вашего аудио никогда и не было там, где это было бы возможно.
Скорость зависит от вашего железа, а не от чьей-то очереди. Локальная транскрибация на Apple Silicon идёт в несколько раз быстрее реального времени — стабильно, в три часа ночи в воскресенье, без лимитов запросов.
Коротко #
Аудио понижается до моно 16 кГц, детекция речи убирает участки без речи, остаток превращается в спектрограмму, энкодер-трансформер обрабатывает её на Neural Engine, декодер порождает текст на GPU с вплетёнными таймкодами, а квантование делает модель достаточно маленькой, чтобы всё это уместилось в телефон.
Ничему из этого не нужен сервер — в чём и весь смысл.
Скачать Offline Transcription
Транскрибируйте аудио и видео целиком на своём Mac. Ничего не загружается в облако, аккаунт не нужен, поминутной тарификации нет.