← БлогБлог · Что умеет бот

Транскрибация аудио в текст с разделением по спикерам: кто что сказал

Если в записи говорят несколько человек, обычная транскрибация даёт стену текста, где не разобрать, кто что произнёс. Бот умеет иначе. Ниже — записи, которые можно послушать прямо здесь, и честный замер точности.

Опубликовано Автор: Stanislav Shupilkin6 мин чтения

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

Разделение по спикерам называется диаризацией. В боте оно включается одним переключателем и работает на любых загруженных файлах. Дальше — как это выглядит на слух и в тексте.

Послушайте запись

Одиннадцать секунд, три человека договариваются о переносе созвона. Попробуйте на слух удержать, кто из них что предложил.

Разговор трёх человек
11.6 секунды · 3 голоса · 6 реплик

Что даёт обычная расшифровка

Слова распознаны верно, все до единого. Но восстановить, кто на что согласился, по этому тексту невозможно:

Давай перенесём созвон на вторник. Не выйдет. Во вторник я в Ереване. Тогда среда… В среду у нас демо для клиента… Значит, четверг утром… Четверг 11. Записал.

А что даёт разделение по спикерам

  • Спикер 1: Давай перенесём созвон на вторник.
  • Спикер 2: Не выйдет, во вторник я в Ереване.
  • Спикер 1: Тогда среда?
  • Спикер 3: В среду у нас демо для клиента.
  • Спикер 2: Значит четверг, утром.
  • Спикер 1: Четверг, одиннадцать. Записал.

Тот же файл, то же распознавание. Разница только в том, что рядом отработала вторая система — та, что различает голоса.

Что приходит на самом деле

Метка говорящего ставится не на реплику, а на каждое слово — со своими таймкодами:

{ "text": "Давай",     "start": 0.08, "end": 0.31, "speaker_id": "speaker_0" }
{ "text": "перенесём", "start": 0.35, "end": 0.79, "speaker_id": "speaker_0" }
{ "text": "Не",        "start": 2.11, "end": 2.24, "speaker_id": "speaker_1" }

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

Насколько точно

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

Теперь сложный случай

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

Перебивают друг друга
8.9 секунды · 2 похожих голоса · наложение речи

Без разметки: «Смета выросла на 20%. Подожди Основное — это логистика. А склад мы считали? Нет. Тогда пересчитываем все заново.» Перебивание здесь исчезает вовсе — «Подожди» слипается со следующей фразой в одно предложение.

С разметкой все шесть реплик ушли к правильным людям, включая перебивание и односложное «Нет»: 2 из 2 голосов, 6 из 6 реплик.

Какова точность разметки

Первый вопрос любого, кто выбирает инструмент. Я свёл все четыре записи в один замер — не по репликам, а по каждому слову: тому ли говорящему оно приписано.

ЗаписьСловВерноРеплики
Три голоса, по очереди27100%6/6
Два похожих голоса, перебивание1894.4%6/6
Три голоса, английский29100%6/6
Перебивание, английский2391.3%5/6

Суммарно 96.9% слов приписаны верно — 94 из 97, и 23 реплики из 24. Отраслевая метрика для этого называется DER, ошибка диаризации; мой замер — её упрощённый вариант, без учёта пауз и наложений как отдельных категорий.

Важнее среднего то, где ошибки. Все до единой — в записях с перебиванием. Там, где люди говорят по очереди, обе записи дали ровно 100%. То есть точность определяет не язык и не число говорящих, а то, накладываются ли голоса друг на друга.

Насколько этим числам верить. 97 слов — маленькая выборка, записи короткие и сделаны синтезом речи. Это лучший случай, а не бенчмарк. Точность падает от наложения речи, похожих тембров, числа участников больше четырёх, шума и длины записи. На часовом совещании ждите заметно хуже — и проверяйте на своём файле.

Почему одни модели это умеют, а другие нет

Это не забытая галочка в настройках. Модель распознавания речи превращает звук в буквы и оптимизирована ровно на одно — угадать слова. Тембр, высота, манера для неё помеха, от которой надо избавиться, чтобы «привет» басом и «привет» дискантом дали одинаковый ответ.

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

Разделение по спикерам делает вторая система, которая работает параллельно с распознаванием: она считает «отпечаток» голоса на каждом отрезке — что-то вроде отпечатка пальца, только для звука — и группирует похожие. Сколько получилось групп, столько и говорящих. Есть она у провайдера — есть разметка. Нет — нет.

Какие движки в боте это умеют

Движок в ботеСпикерыПочему
🎯 ТочнаяЕстьМодель отдаёт метку говорящего на каждое слово: рядом с распознаванием работает система различения голосов
🚀 БыстраяНетМодель не различает голоса вовсе — тембр для неё мешающий признак. Зато это самый быстрый и дешёвый вариант
🪄 ЭксклюзивнаяНетМодель отдаёт только текст, без меток говорящих и таймкодов

Поэтому переключатель «Диаризация» появляется только при выбранной «Точной»: это не наша экономия, а свойство моделей.

Как проверить качество на своей записи

Не верьте чужим процентам, включая мои — проверить можно за десять минут и без единого инструмента.

  1. Возьмите запись, где вы точно знаете, кто говорит. Годится любая: планёрка, звонок, интервью, которое вы вели сами.
  2. Расшифруйте её с включённой диаризацией.
  3. Пройдите по репликам и отметьте те, где метка неверная. Простая оценка — доля ошибочных реплик от всех. Точнее считать по словам: разметка ставится на каждое слово, поэтому перебивание может быть разрезано в середине фразы.

Берите не удобный пример, а худший из своих: там, где перебивают, где голоса похожи, где шумно. По простому диалогу вы получите свои 100% и ничего не узнаете — а по трудному сразу поймёте, годится ли инструмент для вашей задачи.

Отраслевая метрика называется DER — diarization error rate. Она строже: считает не только неверно приписанную речь, но и пропущенную, и придуманную, и отдельно наказывает за наложения. Для выбора инструмента хватает простого счёта по репликам.

Кому это нужно на практике

  • Журналистам. Расшифровали интервью — и сразу видно, где ваш вопрос, а где ответ собеседника. Не нужно переслушивать запись, чтобы понять, чью фразу вы цитируете.
  • Тем, кто ведёт совещания. Кто что пообещал и к какому сроку — это и есть содержание протокола. В сплошном тексте оно теряется.
  • Исследователям и рекрутерам. Десяток интервью подряд, из каждого нужны реплики собеседника, а не свои.
  • Юристам и врачам. Там, где важно не только что сказано, но и кем.

Как включить

  1. Откройте настройки бота и нажмите «Распознавание».
  2. Выберите «🎯 Точная» — на кнопке видно и цену за минуту.
  3. Рядом появится переключатель «Диаризация» — включите его.
  4. Пришлите файл: аудио, видео или голосовое. Расшифровка придёт уже разбитой на реплики.

Работает с загруженными файлами любой длины, а не только с голосовыми в чате. Формат значения не имеет: mp3, wav, m4a, ogg, видео. Открыть бота — 200 кредитов каждый месяц бесплатно.

Честно про ограничения

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

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