Размеченная расшифровка верна, только если верны оба ответа. Поскольку метки лежат поверх слов, ошибочную метку можно исправить, не трогая текст.
Расшифровка совещания отвечает сразу на два вопроса: что было сказано и кто это сказал. Читатель видит одну задачу — имя рядом с репликой. Но под ней скрываются две проблемы, у каждой из которых свои входные данные и свои способы давать сбой.
Распознавание речи слушает слова. Оно превращает аудио в текст и, при хорошей работе, даёт время начала и конца каждого слова. Его не волнует, сменился ли голос посреди предложения: его задача — правильно передать предложение.
Диаризация говорящих слушает голоса. Слов она не знает. Её задача — разбить временную шкалу на реплики и определить, какие реплики принадлежат одному и тому же человеку: Говорящий 1, Говорящий 2. Термин происходит от слова «diary» (дневник), и это хорошо описывает результат: журнал того, кто держал слово и когда.
С ней часто путают три близких понятия. Диаризация отвечает на вопрос, кто говорил когда, не зная самих людей. Идентификация говорящего определяет, какому из заранее зарегистрированных голосов принадлежит фрагмент речи. Верификация говорящего отвечает на вопрос «да или нет»: действительно ли этот голос принадлежит человеку X? Заявления поставщиков легче понять, когда эти три вещи разделены, потому что «метки говорящих» могут означать что угодно: от грубой оценки границ реплик до имён, которые переходят с одной записи на следующую. Чтобы понять, что эти метки могут и чего не могут обещать, нужно заглянуть внутрь диаризатора.
Большинство систем диаризации работают в три шага, и ни один из них не связан с языком.
Каждый шаг может ошибиться сам по себе. Тихий говорящий пропускается. Два похожих голоса сливаются. Один человек, который переходит от спокойной речи к оживлённой, делится на двоих.
Для оценки всего этого в области используют диаризационную ошибку, DER: долю времени речи, которую пропустили, ошибочно сочли речью или приписали не тому говорящему. При подсчёте обычно допускают отклонение (forgiveness collar) около четверти секунды вокруг каждой границы. Оно нужно потому, что никто — ни человек, ни машина — не способен поставить смену говорящего с точностью до миллисекунды. Такая поправка подходит для оценки самого диаризатора, но не для расшифровки, где граница, сдвинутая на четверть секунды, попадает на слово.
Здесь сходятся две задачи, и именно здесь решается качество размеченной расшифровки. Диаризатор ставит границы с некоторой погрешностью, часто в долю секунды в ту или другую сторону. Распознаватель размещает слова на той же временной шкале. Если наложить одно на другое без обработки, граница попадёт внутрь слова, и половина слова «завтра» окажется у Говорящего 1, а другая половина — у Говорящего 2.
Метки также могут какое-то время быть неверными, прежде чем станут верными. Диаризатор становится увереннее в своих группах по мере того, как слышит больше аудио, поэтому ранняя метка может выглядеть ошибочной по меркам того, что будет позже. В живой расшифровке метку можно пересмотреть уже после показа строки: realtime API VocalStack отправляет кадр transcript.amended, который исправляет текст или говорящего у зафиксированной строки на месте, так что читатель видит исправление, а не противоречие.
Даже идеально поставленная и стабильная метка остаётся всего лишь числом. Число достаточно, чтобы следить за разговором, а читателю нужно имя.
Метка превращается в имя двумя способами, и они опираются друг на друга.
Первый — назначение имени внутри одной записи. Каждому говорящему, которого нашла расшифровка, присваивается индекс, начиная с 0. Любой, у кого есть доступ, может назвать каждого говорящего во время записи или после неё. Имя — это слой поверх слов, поэтому его можно задать, изменить или очистить, не трогая текст. Через API это PUT /v1/recordings/{id}/speakers/{idx} с полем name; пустое имя очищает метку. Строка, у которой speaker равен -1, не имеет метки: либо метки были выключены, либо, в живом черновике, строке ещё не присвоен говорящий.
Второй — распознавание между записями, та самая задача идентификации из первого раздела. Диаризатор может сказать только, что два голоса различны, но не то, кто они. Чтобы перейти от «различны» к «это Ана», системе нужен эталон: сохранённый голос, взятый из записи этого человека. Минимум — тридцать секунд чистой речи, лучше несколько минут. Образец также должен звучать похоже на записи, с которыми его будут сравнивать: один и тот же человек с ноутбучного микрофона и со сценического микрофона может звучать для машины менее похоже, чем два незнакомца, записанные одинаково. Как только голос сохранён, каждый говорящий в транскрипции сравнивается с ним, и совпадение переносит имя в расшифровку. В VocalStack это находится в разделе Голоса: файловые транскрипции и живые сессии в панели управления автоматически сопоставляют сохранённые голоса, а сессия realtime API распознаёт только те голоса, которые вы перечислите в identifyVoices.
Сохранённый голос — это биометрические данные: с его помощью можно узнать человека в любой записи, а в VocalStack он также служит клоном, который может озвучивать его реплики. Панель управления просит подтвердить, что у вас есть разрешение этого человека, прежде чем сохранить голос, а голос можно удалить в любой момент.
Всё это предполагает, что вам вообще нужны метки. Часто они не нужны.
Один человек, читающий лекцию, не нуждается в «Говорящий 1» перед каждой строкой. Аудитория и так знает, у кого микрофон. Поэтому настройка меток говорящих имеет три положения, и они одинаковы для realtime-сессии, трансляции, транскрипции и записи.
auto в API). Строки помечаются говорящими, как только слышно больше одного голоса; запись с одним говорящим остаётся обычным текстом, а второй голос, который присоединяется позже, всё равно будет замечен. С этого положения начинается новая форма живой транскрипции в панели управления.Файловая загрузка принимает ту же опцию speakerLabels, а realtime API позволяет менять её прямо во время потока; подробности — в справочнике API. Разделение и назначение имён говорящих никогда не добавляют к счёту (в прайс-листе есть тарифная сетка), так что выбор зависит от того, что должен видеть читатель, а не от того, сколько это стоит.
Когда диаризация включена, она работает хорошо, но не творит чудес. С двумя ситуациями она всё равно не справляется.
Первая ситуация — перекрытие. Когда два человека говорят одновременно, один отрезок аудио содержит два голоса. Диаризаторы с учётом перекрытия существуют в исследованиях и всё чаще в продуктах: например, сквозная нейросетевая диаризация (EEND) рассматривает вопрос «кто говорит» как набор одновременных вопросов «да или нет», а не как один ответ. Однако большинство промышленных систем всё ещё назначают один голос на отрезок, а распознаватель поверх них транскрибирует по одному голосу за раз. Одновременная речь в горячей дискуссии — самое трудное аудио в этой области, и разметка каждого поставщика там ухудшается. Это также, неизменно, та часть, которую все потом хотят цитировать.
Вторая — очень похожие голоса. Братья и сёстры могут давать эмбеддинги, слишком близкие для надёжного разделения, тем более когда они обмениваются короткими репликами в течение часа. Телефонное аудио ухудшает это для всех: узкополосная линия оцифровывается с частотой 8 кГц и не передаёт ничего выше примерно 3,4 кГц, хотя многое из того, что отличает один голос от другого, лежит выше этой границы. Два человека на одной телефонной линии звучат для диаризатора более похоже, чем для вас.
Самое практичное средство против обоих случаев находится выше любой модели: дайте каждому человеку собственный микрофон. При одном канале на каждого говорящего диаризация сводится к вопросу, какой канал громче; перекрытие превращается в две чистые дорожки вместо одной мутной, а эмбеддингам никогда не приходится делать трудную часть работы. Один настольный микрофон дешевле и почти всегда именно то, что у вас есть, поэтому остальная часть этой статьи и существует.
Ни одно из ограничений не обязано доходить до читателя без изменений. Поскольку метки — это слой поверх слов, неверная метка никогда не стоит вам текста: имена говорящих можно задать или очистить для записи в любой момент, а в живой транскрипции ведущий может переписать любое слово или строку, пока она ещё идёт, причём каждое исправление отмечается и может быть отменено.
Что касается слов, что измеряет частота ошибок в словах и что она упускает, подробно описано в статье о слоях исправлений. WER для распознавателя — то же, что DER для диаризатора, и для хорошей расшифровки нужны оба показателя низкими.