Игорь Градов
Игорь Градов
6 мин
ai

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

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

Локальный AI ассистент для видеозвонков: почему бенчмарки врут на реальных созвонах
Почему это важно

Публичные тесты диаризации (разделения записи по говорящим) снимают на подкастах и телефонных корпусах, а рабочий видеозвонок устроен иначе: кодеки давят частоты, участники говорят одновременно, а ваш голос вообще отсутствует в системном аудиоканале. Без понимания этих ловушек любой замер покажет ложную картину.

Автор проекта локального ИИ-ассистента для встреч провёл день, сравнивая модели диаризации на реальном 20-минутном фрагменте рабочего созвона, и получил результат, который назвал «самым обидным из возможных»: менять в системе нечего. Все три найденных дефекта оказались ошибками не моделей, а измерительного стенда. Материал опубликован как третья часть серии о полностью локальной записи и обработке видеозвонков на Mac с чипом M1 Max, без облака.

Как устроена запись и почему стандартные тесты не работают?

Mac пишет два аудиопотока: системный звук (всё, что приходит из видеоконференции в динамики) и микрофон. Дальше цепочка: распознавание речи, диаризация (разбиение записи на фрагменты по говорящим), склейка в стенограмму и запись встречи в граф знаний в Obsidian. Всё работает локально.

Диаризация собрана из двух компонентов в sherpa-onnx:

  • Сегментация pyannote 3.0 (6 МБ) размечает, где есть речь и где границы фрагментов.
  • Эмбеддер ERes2Net выдаёт на каждый фрагмент вектор из 512 чисел, это «отпечаток голоса». Близкие векторы кластеризуются в одного человека.

На подкасте или телефонном корпусе это работает предсказуемо. На рабочем созвоне всё сложнее, и вот почему.

Четыре проблемы реального созвона

  1. Четверо-пятеро участников приходят одним смешанным потоком из ВКС: кто-то через ноутбучный микрофон в трёх метрах, кто-то через гарнитуру, кто-то с телефона из машины.
  2. Поток уже прошёл через кодек (алгоритм сжатия звука) с подавлением шума, который «жуёт» именно те высокие частоты, по которым эмбеддеры различают людей.
  3. Участники перебивают друг друга, поддакивают, кашляют и говорят одновременно.
  4. В системном канале нет вашего собственного голоса. ВКС не возвращает участнику его аудио обратно. Ваш голос есть только в микрофоне, вместе с эхом чужих голосов из динамиков.

Последний пункт стал причиной самой грубой ошибки замера.

Что понадобится

  • Mac на Apple Silicon (в описанном кейсе M1 Max) или аналогичная машина с достаточной производительностью для локального инференса (вычисления модели на устройстве без облака).
  • Библиотека sherpa-onnx с моделями pyannote 3.0 и ERes2Net.
  • Утилита записи двух аудиопотоков (системный звук и микрофон) на Mac.
  • Obsidian для графа встреч (по желанию).
  • Около 2 часов на подготовку эталонной разметки 20-минутного фрагмента.

Пошаговая инструкция: как честно замерить диаризацию

  1. Запишите два раздельных потока (системный звук и микрофон) с реального созвона. Не используйте готовые подкаст-корпуса: результат будет нерелевантным для вашей задачи.

  2. Подготовьте эталон вручную. Прогоните сегментацию, получите фрагменты речи с временными метками и прослушайте каждый, проставив имя говорящего. Фрагменты, где говорят двое одновременно или вся реплика состоит из одного «угу», пометьте как неопределённые.

  3. Убедитесь, что эталон и прогон используют один и тот же входной файл. Это критический шаг. Если эталон собран по сведённой стенограмме (микрофон плюс системный канал), а прогон идёт только по системному каналу, вы получите ложные штрафы за реплики, которых во входных данных модели физически нет.

  4. Выберите метрику, которая отвечает на ваш вопрос. Классический DER (Diarization Error Rate, общая ошибка диаризации) смешивает три разные проблемы: пропущенную речь, ложную речь и путаницу говорящих. Если вас интересует именно путаница, считайте отдельно: какая доля речи каждого человека (в секундах) попала в его основную метку.

  5. Проверяйте эмбеддинги на реальных сегментах, а не на минутных окнах. На минутном окне рабочего созвона говорят несколько человек. Сравнивая векторы минутных окон, вы сравниваете не голоса, а «средние по палате», смеси, которые похожи по построению.

  6. Проверьте, что запускаете тот самый код, который работает в продакшене. Если в вашем скрипте есть второй проход (склейка осколков кластеров), а вы вызвали библиотеку напрямую без него, вы тестируете не свою систему, а сырой выход кластеризатора.

Как это выглядит на практике

Автор взял 20-минутный фрагмент встречи, прогнал сегментацию и получил 55 фрагментов речи. Разметил вручную 55% времени (остальное, наложения и неопределённые реплики).

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

Потом выяснилось: эталон собран по сведённой стенограмме, где автор присутствует, а прогон шёл по системному каналу, где автора физически нет. Модель получала штрафы за реплики, которых не существовало в её входных данных. Три вердикта пришлось выбросить, два из них незаслуженно занизили оценку чужим моделям.

После исправления эталона и замера эмбеддингов на настоящих сегментах речи (а не на минутных окнах) картина перевернулась: метки чистые на 97-100%, эмбеддер различает людей хорошо.

Частые ошибки
  • Эталон снят не с того файла, что прогоняется. Самая грубая и самая незаметная ошибка. Проверьте дважды: входной файл для модели и файл, по которому вы разметили эталон, должны совпадать.
  • Замер эмбеддингов на длинных окнах. На минутном фрагменте созвона говорят несколько человек. Вектор минутного окна не представляет ни одного из них. Берите только чистые сегменты речи.
  • Тестирование библиотеки напрямую вместо своего пайплайна. Если в продакшен-коде есть пост-обработка (склейка осколков, фильтрация тихих сегментов), а вы её пропустили при тестировании, результат покажет проблему, которой в реальной системе нет.
  • Использование публичных бенчмарков как финального аргумента. Подкаст-корпуса не содержат кодеков ВКС, перебивающих друг друга коллег и отсутствующего в канале собственного голоса. Мерить надо на своём материале.

Что с этим делать по ролям?

Авторам Дзена и контент-мейкерам. Если вы записываете интервью через Zoom или Google Meet и потом расшифровываете, собрать локальный AI ассистент для диаризации реально. Но не доверяйте первой стенограмме: проверьте на своём 20-минутном куске, правильно ли система различает голоса именно на вашем оборудовании и вашем кодеке.

Маркетологам и продуктовым менеджерам. Локальный AI ассистент для встреч, где данные не уходят в облако, это аргумент для компаний с жёсткими требованиями к конфиденциальности. Но ожидания нужно калибровать: даже хорошая модель ломается на специфике ВКС, и пост-обработка (склейка кластеров, фильтрация тихих сегментов) часто важнее выбора модели.

Предпринимателям и техлидам в РФ. Все описанные компоненты (sherpa-onnx, pyannote, ERes2Net) доступны как открытые модели, санкционных ограничений нет. Из российских инструментов распознавания речи для локальной работы можно смотреть на Vosk. Но главный вывод этого кейса нетехнический: прежде чем сравнивать модели, убедитесь, что ваш стенд корректен.

Мнение редакции dzen.guru

По моим наблюдениям, большинство публикаций о диаризации тестируют модели на чистых подкастах, и это создаёт ложное ощущение зрелости технологии. Реальный рабочий созвон, это другой мир: сжатый кодеком звук, наложения голосов, отсутствие собственного голоса в одном из каналов.

Самый ценный урок этого кейса не про конкретную модель, а про методологию: автор потратил день и трижды получил неверный вердикт, потому что мерил не то, не тем и не там. В нашей практике на dzen.guru мы видим то же самое в текстовых нейросетях: люди сравнивают модели на синтетических промптах и удивляются, что в продакшене результат другой.

Честная оговорка: весь описанный замер сделан на одном 20-минутном фрагменте одной встречи с разметкой 55% времени. Это не бенчмарк, а инструмент принятия решения для конкретного продукта. Воспроизводить стоит на своих записях.

Главный вывод прозвучит банально, но стоил дня работы: прежде чем сравнивать что-то с чем-то, убедитесь, что мерите тот самый код, который работает в продакшене, и что эталон снят с того самого материала, по которому идёт прогон. Для локального ИИ-ассистента на видеозвонках это правило номер один, потому что ваш аудиоматериал не похож ни на один публичный корпус.

Поделиться:TelegramVK
Игорь Градов
Игорь Градов

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».

Комментарии

Читайте также

ai

Искусственный интеллект в медицине: Profluent ищет антибиотики за недели вместо лет

Компания Profluent, основанная выходцами из Salesforce Research, представила в июне 2025 года открытую платформу ProSAR-2, которая использует искусственный…

4 мин
Gemini в Google Таблицах: параллельные запросы экономят до 80 секунд на пачку
ai

Gemini в Google Таблицах: параллельные запросы экономят до 80 секунд на пачку

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

6 мин
MCP-протокол перегружает контекст модели: toolhub заменяет JSON-схемы деревом навигации
ai

MCP-протокол перегружает контекст модели: toolhub заменяет JSON-схемы деревом навигации

MCP протокол (Model Context Protocol, протокол контекста модели) обещает стандартизировать подключение инструментов к языковым моделям, но на практике…

6 мин