# Разделение говорящих в записи встречи: локальная диаризация и транскрипт

Источник: https://modelium.tech/zhurnal/diarizaciya-zapisi-vstrechi/

Чтобы разделить говорящих в записи встречи локально, нужны две разные задачи: ASR расшифровывает речь, а диаризация отмечает, кто говорил и когда. WhisperX соединяет распознавание, выравнивание и метки спикеров; альтернативно можно сопоставить транскрипт с сегментами локальной модели диаризации. Метки «speaker 0/1» не являются именами людей, а перекрывающиеся реплики и русские имена нужно сверять с исходным аудио.

**Источник и дата проверки — 30 сентября 2026 года.** Ни один вариант не запускался Modelium на встрече; ниже — процедура для вашего собственного проверяемого пилота, а не результаты нашего испытания.

## Что значит «разделить говорящих» в записи?

**Диаризация** отвечает «кто говорил и в какие интервалы», но по умолчанию возвращает условные `speaker_0`, `speaker_1`, а не имена людей: так устроен пример вывода локального Community-1 [s1](#src-s1). **ASR** превращает аудио в текст. Для подписанного транскрипта нужны оба результата и сопоставление времени; WhisperX документирует связку транскрипции, выравнивания и speaker ID [s2](#src-s2). Не выдавайте условную метку за подтверждённую личность участника.

Вход пилота — разрешённая запись встречи, по возможности с известным числом участников и согласованным контрольным транскриптом. Выход — строки с таймкодом, текстом, анонимной меткой и отметкой «неуверенно/перекрытие». Это редакционное определение результата: готовый продукт и гарантия качества из него не следуют. Сохраняйте исходную запись для ручной проверки, ограничьте доступ к аудио и не отправляйте конфиденциальные файлы в неизвестный сервис только ради расшифровки.

## Какой локальный стек выбрать для русской встречи?

- **Один конвейер:** WhisperX описывает ASR на базе faster-whisper, выравнивание слов и диаризацию через pyannote Community-1 [s2](#src-s2). В pinned-коде выравнивания для `ru` указан `jonatasgrosman/wav2vec2-large-xlsr-53-russian`; это *наличие конфигурации*, а не независимый тест русских совещаний [s3](#src-s3). Карточка Whisper large-v3 перечисляет `ru` среди языков многоязычной ASR-модели, но не подтверждает точность на вашем микрофоне и лексике [s5](#src-s5).

- **Раздельные слои:** faster-whisper выдаёт транскрипт с интервалами; у него есть `word_timestamps` и VAD для фильтрации тишины [s4](#src-s4). Community-1 выдаёт интервалы/метки говорящих при локальном запуске после получения модели [s1](#src-s1). Затем необходимо сопоставить интервалы вручную либо собственной проверяемой логикой, особенно при пересечении реплик. Это схема интеграции, а не утверждение, что оба инструмента сами образуют готовое приложение.

- **Другой диаризатор:** по карточке автора Nemotron 3 Diarization выдаёт интервалы и условные метки до восьми голосов, поддерживает пакетный и потоковый режим [s6](#src-s6). Он не заменяет ASR-текст; для русской встречи сверяйте и спикеров, и слова. Публикуемые автором результаты не переносите на свои записи без отдельного замера [s6](#src-s6).

Не смешивайте лицензии кода, весов и сторонних компонентов: при корпоративном использовании проверьте отдельные условия выбранного чекпойнта и всех зависимостей. `pyannote/speaker-diarization-community-1` требует принять условия модели и получить токен Hugging Face перед загрузкой; локальный инференс Community-1 в README отличён от облачного `precision-2` [s1](#src-s1). Поэтому «локально» здесь означает выполнение инференса на своей машине *после подготовки*, а не отсутствие сетевых запросов при первой установке.

## Что подготовить до первого запуска?

- Получите разрешённую короткую запись с двумя или тремя знакомыми голосами, тишиной, быстрой сменой спикеров и хотя бы одним наложением реплик. Для проверки подготовьте ручную разметку «начало — конец — говорящий — дословная реплика». Храните реальный список имён отдельно от анонимных speaker ID.

- Зафиксируйте устройство, ОС, версии Python, WhisperX, pyannote и скачанных чекпойнтов, длительность записи и способ работы: CPU или GPU. Документация WhisperX допускает CPU-команду `--compute_type int8 --device cpu`, но не устанавливает универсальной минимальной RAM/VRAM для всех моделей и длительностей [s2](#src-s2). Размер файла весов не равен памяти во время выполнения.

- Для самого простого пути установите WhisperX по инструкции проекта, примите условия `speaker-diarization-community-1` и передайте собственный read-only HF-токен в параметр `--hf_token` без включения его в опубликованные логи [s2](#src-s2). Документация описывает `--diarize` и задание числа говорящих через `--min_speakers` и `--max_speakers`; не выставляйте точное число, если оно неизвестно [s2](#src-s2). Русский `--language ru` проверяйте вместе с фактически загруженной моделью выравнивания [s2](#src-s2)[s3](#src-s3).

- Перед реальными данными попробуйте этот же путь на несекретной тестовой записи; затем проверьте, что данные и логи не уходят наружу. Наличие локального процесса не доказывает полную сетевую изоляцию; для неё используйте [отдельную проверку офлайн-контура](/zhurnal/proverka-offline-kontura-ii/).

Команды ниже **синтаксис из документации, не исполненный Modelium прогон** [s2](#src-s2):

pip install whisperxwhisperx meeting.wav --model large-v2 --language ru --diarize \  --hf_token "$HF_READ_TOKEN"

Подставьте свой путь к файлу и токену через локальное окружение; аргумент `--hf_token` после подстановки переменной может быть виден в списке процессов и логах запуска, поэтому на общем компьютере используйте изолированную учётную запись и не печатайте команду с реальным токеном. Версии зависимостей и выбранный HF-чекпойнт фиксируйте отдельно: `pip install` без закрепления версии не даёт воспроизводимого окружения. Если нужна предсказуемая установка, сначала проверьте поддерживаемые версии проекта и закрепите их в локальном файле зависимостей. Успех команды — наличие результата, а не правильность имён и текста.

## Как обнаружить ошибку по голосам и тексту?

Для каждого контрольного фрагмента сравните начало и конец реплики, распознанные слова и метку говорящего с исходным аудио. Отдельно отметьте пропущенное короткое «да», смену говорящего в одной фразе, речь поверх речи, фоновые голоса, имена и профессиональные термины. WhisperX прямо предупреждает, что наложенная речь обрабатывается плохо и диаризация далека от идеала; отдельное выравнивание может не поставить таймкод слову вне словаря фонетической модели [s2](#src-s2). Если VAD отрезал тихую или короткую реплику, проверьте настройки на исходной дорожке: faster-whisper документирует отдельный фильтр VAD и настраиваемые параметры [s4](#src-s4).

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

**Основной следующий шаг:** [посмотрите модель локальной диаризации Nemotron 3](/zhurnal/nemotron-3-diarization-local-speakers-streaming/), затем проверьте её метки на той же разрешённой записи рядом с ручной разметкой. Это отдельный кандидат, не доказанный победитель для русской речи [s6](#src-s6).

## Источники

1. [pyannote.audio — README Community-1, Git revision b749285](https://github.com/pyannote/pyannote-audio/blob/b749285c5cdd4636b2edc7f766f1352c8dde9369/README.md) — получено 2026-09-30
2. [WhisperX — README, Git revision 771b4a1](https://github.com/m-bain/whisperX/blob/771b4a14a9486f8fd5aef18ef49e35d639523dd3/README.md) — получено 2026-09-30
3. [WhisperX — alignment.py, Git revision 771b4a1](https://github.com/m-bain/whisperX/blob/771b4a14a9486f8fd5aef18ef49e35d639523dd3/whisperx/alignment.py) — получено 2026-09-30
4. [faster-whisper — README, Git revision ed9a06c](https://github.com/SYSTRAN/faster-whisper/blob/ed9a06cd89a93e47838f564998a6c09b655d7f43/README.md) — получено 2026-09-30
5. [OpenAI Whisper large-v3 — model card, HF revision 06f233f](https://huggingface.co/openai/whisper-large-v3/blob/06f233fe06e710322aca913c1bc4249a0d71fce1/README.md) — получено 2026-09-30
6. [NVIDIA Nemotron 3 Diarization — model card, HF revision f667ed7](https://huggingface.co/nvidia/Nemotron-3-Diarization/blob/f667ed73aee57d40cc39428eb768b4fd87a0a29e/README.md) — получено 2026-09-30
