На iOS 26 и macOS 26 Apple заменила старый API распознавания речи SFSpeechRecognizer на новый — SpeechAnalyzer и SpeechTranscriber. Точных цифр по качеству компания не опубликовала, поэтому разработчикам приходилось гадать, стоит ли мигрировать и как новый движок сравнивается с Whisper от OpenAI. Разработчики Inscribe, приватного AI-воркспейса для устройств Apple, провели тест: прогнали все пять движков через одинаковый код на одном MacBook Pro M2 Pro (32GB, macOS 26.5.1) на датасете LibriSpeech.
Результат однозначный: SpeechAnalyzer разгромил старого предшественника. На чистой речи WER упал с 9.02% до 2.12%, на шумной — с 16.25% до 4.56%. Это улучшение в 3.5–4 раза. Если ваше приложение всё ещё использует SFSpeechRecognizer для чего-то длиннее голосовой команды, миграция оправдана одной только точностью.
Гораздо более неожиданный итог: SpeechAnalyzer обошёл даже Whisper Small — самую большую модель из тех, что использует Inscribe. При WER 2.12% против 3.74% на чистой речи и 4.56% против 7.95% на шумной, новый движок Apple ещё и в три раза быстрее на секунду аудио. Для английского языка на современном iPhone или Mac встроенный движок теперь — самый точный on-device вариант. Whisper сохраняет два преимущества: поддержку десятков языков (у SpeechTranscriber их около 30) и кроссплатформенность. Но для английского на Apple-железе эпоха, когда Whisper был автоматическим выбором по точности, закончилась.
Inscribe уже изменил настройки: автодвижок теперь предпочитает SpeechAnalyzer для поддерживаемых языков и Whisper для остальных. Все пять движков работают быстрее реального времени (в 12–40 раз на M2 Pro). Точные цифры скорости пока не публикуют — тесты точности шли параллельно с рабочей нагрузкой, что зашумляет замеры времени, но не влияет на WER.
Методология проверяема. Результаты для Whisper совпадают с опубликованными числами OpenAI (небольшое систематическое смещение из-за квантизации CoreML и более строгого нормализатора — признак честного воспроизведения). Сырые транскрипции для обоих движков Apple выложены в открытый доступ, можно пересчитать WER самому. Кстати, бенчмарк нашёл баг в самом Inscribe: импорт аудио не вызывал finalizeAndFinishThroughEndOfInput(), из-за чего распознавание зависало. Баг починили в тот же день.