Транскрипция показывает, что было сказано. В интервью, встречах и подкастах не менее важно понимать, кто именно это сказал. В обработке речи эта задача называется диаризацией спикеров. Начиная с версий iPhone 1.8.5, Mac App Store 1.3.2 и Mac DMG 1.5.1, Whisper Notes выполняет диаризацию целиком на устройстве.
Ниже мы разберём устройство функции, покажем результаты теста с облачной эталонной разметкой и честно опишем сценарий, который не удалось исправить одной лишь заменой модели, — вместе с нашим инженерным решением.
Что делает диаризация
Откройте заметку — собственную запись, импортированный аудио- или видеофайл либо запись встречи — и нажмите кнопку говорящих. Через несколько секунд у каждого абзаца появятся метка спикера и временная отметка.
Метки говорящих на Mac и iPhone. Нажатие на предложение переводит воспроизведение к нужному моменту.
Сначала используются имена «Спикер 1» и «Спикер 2». Достаточно переименовать метку один раз, чтобы она изменилась во всей транскрипции. Нажатие на любое предложение сразу переводит аудио к этому моменту — цитату легко сверить с исходной речью.
После переименования метка обновляется в каждом абзаце заметки.
Для записей встреч определение говорящих запускается автоматически после завершения звонка; это можно отключить в настройках. Метки сохраняются при экспорте: команда Копировать транскрипцию с говорящими переносит их в буфер обмена, а файлы SRT и VTT — в субтитры.
Диаризация анализирует голоса, а не слова, поэтому одинаково работает для более чем 100 языков, которые приложение умеет транскрибировать.
Модель 19 MB на Neural Engine
Диаризация отвечает на вопрос «кто и когда говорил» в три этапа. Аудио делится на фрагменты с речью. Каждый фрагмент превращается в голосовой отпечаток — компактный вектор, описывающий сам голос, а не слова. Затем отпечатки группируются: фрагменты в одном кластере получают одну метку.
Whisper Notes использует конвейер pyannote community-1, преобразованный в Core ML, поэтому оба этапа выполняются на Neural Engine. Модель загружается один раз и занимает 19 MB; разговор длиной 5.7 минуты обрабатывается на Mac с процессором серии M за 2–4 секунды.
Аудио → речевые фрагменты → голосовые отпечатки → кластеры → метки
Каждый этап выполняется на устройстве.
Для диаризации это особенно важно. Голосовой отпечаток — биометрический признак: он идентифицирует человека подобно отпечатку пальца. При локальной обработке отпечатки ваши, коллег и участников интервью вычисляются, группируются и удаляются на устройстве. Они никуда не отправляются.
Что мы измеряли
Для диаризации мы используем постоянный тест из двух файлов. Эталонную разметку создаёт облачный сервис распознавания речи и диаризации ElevenLabs, после чего мы проверяем её вручную. При оценке каждые 10 ms речи относятся к говорящему и выбирается лучшее соответствие результата эталону. Два файла — небольшая выборка, поэтому цифры показывают порядок качества, но не претендуют на окончательный вывод.
Первый файл отражает типичный случай: пятиминутный англоязычный подкаст, два человека с хорошо различимыми голосами. Так выглядят большинство интервью, подкастов и встреч один на один.
| Английский подкаст с двумя говорящими (5 мин) | Результат |
|---|---|
| Точность на уровне кадров (шаг 10 ms) | 96.7% |
| Точность на уровне предложений (то, что читает пользователь) | 99.1% |
| Время обработки на Neural Engine серии M | 2–4 с |
Оставшиеся 0.9% — три смещения границ общей длительностью 3.4 секунды, то есть в пределах разрешения самой эталонной разметки. На таком материале локальный результат соответствует облачному сервису, создавшему эталон.
Сложный случай
Второй файл намеренно сложный: два похожих мужских голоса в помещении с реверберацией и ведущий, который перебивает гостя 19 раз — в среднем на 2.3 секунды. Гость говорит 272 секунды, ведущий — 43. Именно такой акустический профиль ломает диаризацию на любом языке: похожие голоса обмениваются короткими репликами.
Автоматическая кластеризация здесь схлопывается. Голосовые отпечатки настолько близки, что алгоритм объединяет их и присваивает почти весь разговор одной метке. Запись оказалась китайским интервью, что позволило проверить очевидную гипотезу: языковая специализация модели даст лучший результат. Через конвейер CPU мы запустили две модели, специально обученные на китайской речи:
| Модель | Английский подкаст | Сложный случай* | Время (аудио 5.7 мин) |
|---|---|---|---|
| pyannote community-1 (наша модель, Neural Engine) | 96.7% | 81–82% | 2–4 с |
| CAM++ (обучена на китайском, CPU) | 93.9% | 81.2% | 36–103 с |
| ERes2NetV2 (обучена на китайском, CPU) | — | 80.5% | 220–290 с |
* Покадровая точность на сложном файле при заданном числе говорящих. Без него все модели сходятся к одному говорящему.
Обе модели схлопываются одинаково, хотя требуют в 10–100 раз больше вычислений. Трудность носит акустический, а не языковой характер: предел задаёт то, что современные голосовые эмбеддинги способны различить на любом языке.
Поэтому мы дали конвейеру факт, который он не может надёжно вывести сам: число людей в комнате. Если указать число говорящих в меню — от 2 до 6, — точность предложений в сложном файле поднимается после схлопывания до 89%. Для обычных записей по умолчанию остаётся автоматическое определение.
Повторный запуск с точным числом говорящих. В том же меню экспортируются SRT и VTT с метками спикеров.
Уточнение коротких реплик
После фиксации числа говорящих примерно половина оставшихся ошибок пришлась на реплики короче трёх секунд. В двухсекундном фрагменте модели эмбеддингов не хватает сигнала, а при быстрой смене реплик голосовой отпечаток захватывает часть соседнего говорящего.
После кластеризации конвейер повторно проверяет каждое предложение короче 3.5 секунды: заново вычисляет голосовой отпечаток по маске, точно охватывающей кадры предложения, сравнивает его с опорным отпечатком каждого говорящего — средним по его самым длинным репликам — и меняет метку только при убедительном преимуществе. Используется та же модель, дополнительной загрузки нет.
| Итоговая точность предложений | До уточнения | После |
|---|---|---|
| Сложный случай (число задано) | 89.0% | 94.8% |
| Английский подкаст (автоматически) | 98.5% | 99.1% |
Порог выбран консервативно: на двух файлах уточнение изменило 21 метку и не внесло ни одной новой ошибки.
Ограничения
• Метки появляются после окончания записи, а не во время звонка. Если нужны живые субтитры с именами до завершения встречи, лучше подойдёт облачный сервис вроде Otter или Notta.
• При одновременной речи каждому предложению назначается одна метка.
• Похожие голоса по-прежнему сложны. 94.8% на нашем трудном файле — текущий предел при указанном числе говорящих, а не решённая задача.
Доступность
Определение говорящих входит в разовую покупку за $6.99 вместе с тремя движками транскрипции — Parakeet V3, Whisper Large V3 Turbo и SenseVoice — и локальным ИИ-редактированием. Отдельного тарифа и учётной записи нет.
• iPhone: App Store, версия 1.8.5 или новее.
• Mac App Store: версия 1.3.2 или новее.
• Прямая загрузка для Mac (DMG): версия 1.5.1 или новее с сайта whispernotes.app, доступна бесплатная пробная версия.
Как устроена сама запись встреч, читайте в нашей статье об офлайн-транскрипции встреч.