Локальный AI ассистент для видеозвонков: почему бенчмарки врут на реальных созвонах
Локальный AI ассистент для видеозвонков требует не только настройки распознавания речи, но и честной диаризации, то есть ответа на вопрос «кто это сказал», и на реальном рабочем созвоне эта задача ломает стандартные бенчмарки.

Публичные тесты диаризации (разделения записи по говорящим) снимают на подкастах и телефонных корпусах, а рабочий видеозвонок устроен иначе: кодеки давят частоты, участники говорят одновременно, а ваш голос вообще отсутствует в системном аудиоканале. Без понимания этих ловушек любой замер покажет ложную картину.
Автор проекта локального ИИ-ассистента для встреч провёл день, сравнивая модели диаризации на реальном 20-минутном фрагменте рабочего созвона, и получил результат, который назвал «самым обидным из возможных»: менять в системе нечего. Все три найденных дефекта оказались ошибками не моделей, а измерительного стенда. Материал опубликован как третья часть серии о полностью локальной записи и обработке видеозвонков на Mac с чипом M1 Max, без облака.
Как устроена запись и почему стандартные тесты не работают?
Mac пишет два аудиопотока: системный звук (всё, что приходит из видеоконференции в динамики) и микрофон. Дальше цепочка: распознавание речи, диаризация (разбиение записи на фрагменты по говорящим), склейка в стенограмму и запись встречи в граф знаний в Obsidian. Всё работает локально.
Диаризация собрана из двух компонентов в sherpa-onnx:
- Сегментация pyannote 3.0 (6 МБ) размечает, где есть речь и где границы фрагментов.
- Эмбеддер ERes2Net выдаёт на каждый фрагмент вектор из 512 чисел, это «отпечаток голоса». Близкие векторы кластеризуются в одного человека.
На подкасте или телефонном корпусе это работает предсказуемо. На рабочем созвоне всё сложнее, и вот почему.
Четыре проблемы реального созвона
- Четверо-пятеро участников приходят одним смешанным потоком из ВКС: кто-то через ноутбучный микрофон в трёх метрах, кто-то через гарнитуру, кто-то с телефона из машины.
- Поток уже прошёл через кодек (алгоритм сжатия звука) с подавлением шума, который «жуёт» именно те высокие частоты, по которым эмбеддеры различают людей.
- Участники перебивают друг друга, поддакивают, кашляют и говорят одновременно.
- В системном канале нет вашего собственного голоса. ВКС не возвращает участнику его аудио обратно. Ваш голос есть только в микрофоне, вместе с эхом чужих голосов из динамиков.
Последний пункт стал причиной самой грубой ошибки замера.
Что понадобится
- Mac на Apple Silicon (в описанном кейсе M1 Max) или аналогичная машина с достаточной производительностью для локального инференса (вычисления модели на устройстве без облака).
- Библиотека sherpa-onnx с моделями pyannote 3.0 и ERes2Net.
- Утилита записи двух аудиопотоков (системный звук и микрофон) на Mac.
- Obsidian для графа встреч (по желанию).
- Около 2 часов на подготовку эталонной разметки 20-минутного фрагмента.
Пошаговая инструкция: как честно замерить диаризацию
-
Запишите два раздельных потока (системный звук и микрофон) с реального созвона. Не используйте готовые подкаст-корпуса: результат будет нерелевантным для вашей задачи.
-
Подготовьте эталон вручную. Прогоните сегментацию, получите фрагменты речи с временными метками и прослушайте каждый, проставив имя говорящего. Фрагменты, где говорят двое одновременно или вся реплика состоит из одного «угу», пометьте как неопределённые.
-
Убедитесь, что эталон и прогон используют один и тот же входной файл. Это критический шаг. Если эталон собран по сведённой стенограмме (микрофон плюс системный канал), а прогон идёт только по системному каналу, вы получите ложные штрафы за реплики, которых во входных данных модели физически нет.
-
Выберите метрику, которая отвечает на ваш вопрос. Классический DER (Diarization Error Rate, общая ошибка диаризации) смешивает три разные проблемы: пропущенную речь, ложную речь и путаницу говорящих. Если вас интересует именно путаница, считайте отдельно: какая доля речи каждого человека (в секундах) попала в его основную метку.
-
Проверяйте эмбеддинги на реальных сегментах, а не на минутных окнах. На минутном окне рабочего созвона говорят несколько человек. Сравнивая векторы минутных окон, вы сравниваете не голоса, а «средние по палате», смеси, которые похожи по построению.
-
Проверьте, что запускаете тот самый код, который работает в продакшене. Если в вашем скрипте есть второй проход (склейка осколков кластеров), а вы вызвали библиотеку напрямую без него, вы тестируете не свою систему, а сырой выход кластеризатора.
Автор взял 20-минутный фрагмент встречи, прогнал сегментацию и получил 55 фрагментов речи. Разметил вручную 55% времени (остальное, наложения и неопределённые реплики).
Первый прогон показал «катастрофу»: голос автора размазан по трём меткам, под одной меткой сидят четверо. Тот же результат дали две внешние модели. Вердикт: всё плохо.
Потом выяснилось: эталон собран по сведённой стенограмме, где автор присутствует, а прогон шёл по системному каналу, где автора физически нет. Модель получала штрафы за реплики, которых не существовало в её входных данных. Три вердикта пришлось выбросить, два из них незаслуженно занизили оценку чужим моделям.
После исправления эталона и замера эмбеддингов на настоящих сегментах речи (а не на минутных окнах) картина перевернулась: метки чистые на 97-100%, эмбеддер различает людей хорошо.
- Эталон снят не с того файла, что прогоняется. Самая грубая и самая незаметная ошибка. Проверьте дважды: входной файл для модели и файл, по которому вы разметили эталон, должны совпадать.
- Замер эмбеддингов на длинных окнах. На минутном фрагменте созвона говорят несколько человек. Вектор минутного окна не представляет ни одного из них. Берите только чистые сегменты речи.
- Тестирование библиотеки напрямую вместо своего пайплайна. Если в продакшен-коде есть пост-обработка (склейка осколков, фильтрация тихих сегментов), а вы её пропустили при тестировании, результат покажет проблему, которой в реальной системе нет.
- Использование публичных бенчмарков как финального аргумента. Подкаст-корпуса не содержат кодеков ВКС, перебивающих друг друга коллег и отсутствующего в канале собственного голоса. Мерить надо на своём материале.
Что с этим делать по ролям?
Авторам Дзена и контент-мейкерам. Если вы записываете интервью через Zoom или Google Meet и потом расшифровываете, собрать локальный AI ассистент для диаризации реально. Но не доверяйте первой стенограмме: проверьте на своём 20-минутном куске, правильно ли система различает голоса именно на вашем оборудовании и вашем кодеке.
Маркетологам и продуктовым менеджерам. Локальный AI ассистент для встреч, где данные не уходят в облако, это аргумент для компаний с жёсткими требованиями к конфиденциальности. Но ожидания нужно калибровать: даже хорошая модель ломается на специфике ВКС, и пост-обработка (склейка кластеров, фильтрация тихих сегментов) часто важнее выбора модели.
Предпринимателям и техлидам в РФ. Все описанные компоненты (sherpa-onnx, pyannote, ERes2Net) доступны как открытые модели, санкционных ограничений нет. Из российских инструментов распознавания речи для локальной работы можно смотреть на Vosk. Но главный вывод этого кейса нетехнический: прежде чем сравнивать модели, убедитесь, что ваш стенд корректен.
По моим наблюдениям, большинство публикаций о диаризации тестируют модели на чистых подкастах, и это создаёт ложное ощущение зрелости технологии. Реальный рабочий созвон, это другой мир: сжатый кодеком звук, наложения голосов, отсутствие собственного голоса в одном из каналов.
Самый ценный урок этого кейса не про конкретную модель, а про методологию: автор потратил день и трижды получил неверный вердикт, потому что мерил не то, не тем и не там. В нашей практике на dzen.guru мы видим то же самое в текстовых нейросетях: люди сравнивают модели на синтетических промптах и удивляются, что в продакшене результат другой.
Честная оговорка: весь описанный замер сделан на одном 20-минутном фрагменте одной встречи с разметкой 55% времени. Это не бенчмарк, а инструмент принятия решения для конкретного продукта. Воспроизводить стоит на своих записях.
Главный вывод прозвучит банально, но стоил дня работы: прежде чем сравнивать что-то с чем-то, убедитесь, что мерите тот самый код, который работает в продакшене, и что эталон снят с того самого материала, по которому идёт прогон. Для локального ИИ-ассистента на видеозвонках это правило номер один, потому что ваш аудиоматериал не похож ни на один публичный корпус.

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».
Читайте также
Искусственный интеллект в медицине: Profluent ищет антибиотики за недели вместо лет
Компания Profluent, основанная выходцами из Salesforce Research, представила в июне 2025 года открытую платформу ProSAR-2, которая использует искусственный…

Gemini в Google Таблицах: параллельные запросы экономят до 80 секунд на пачку
Google Таблица, скрипт на Google Apps Script и модель Gemini позволяют собрать автономный анализатор новостей без выделенного сервера, и ключевой приём здесь в…

MCP-протокол перегружает контекст модели: toolhub заменяет JSON-схемы деревом навигации
MCP протокол (Model Context Protocol, протокол контекста модели) обещает стандартизировать подключение инструментов к языковым моделям, но на практике…
Комментарии