Если бы у аудио был паспорт — он был бы в формате RTTM.
Предисловие
Совсем недавно, при подготовке данных для обучения модели диаризации я впервые всерьёз столкнулся с форматом RTTM, о котором прежде знал лишь поверхностно. Казалось бы, очередной текстовый формат, но именно он лежит в основе точной и структурированной разметки аудио: кто говорит, когда и как долго.
Именно тогда я понял, насколько ключевую роль играет RTTM в задачах автоматического анализа речи. Однако, попытавшись разобраться в его устройстве, я с удивлением обнаружил, что внятной и системной информации на русском языке практически нет. Ни подробного объяснения, ни примеров, ни тем более живых пояснений.
Этот про͏бел и с͏тал началом статьи͏, кото͏рую вы читаете в данный момент. Надеюсь она будет хорошим путев͏одите͏лем для тех, кто делает перв͏ы шаги в мире диаризации, распознавания речи и структурированной аудиоразметке.
Описание формата
RTTM (Rich Transcription Time Marked) — это текстовый формат разметки аудио, предназначенный для описания структуры и содержимого аудиозаписей. Он особенно важен в задачах распознавания речи и диаризации — когда необходимо определить, кто именно произнёс ту или иную фразу и в какой момент времени.

Каждая строка в RTTM-файле — это описание одного звукового события: речь, тишина, шум, слово и т. д. Каждая строка RTTM описывает событие во времени: его тип (речь, шум, слово и др.), временные границы, а также имя говорящего и другие параметры. Всё это — в виде обычного текста, который легко читать и обрабатывать программами.
RTTM широко используется в наборах данных и инструментах по диаризации и ASR. Например, множество корпусов от LDC сопровождаются разметкой RTTM, а соревнования по диаризации (например, DIHARD) и поиск по ключевым словам (OpenKWS) требуют вывод в RTTM-формате. Современные библиотеки – от академических (pyannote.audio, DScore) до промышленных (NVIDIA NeMo) – поддерживают этот формат для обмена аннотациями результатов.
Типы сегментов RTTM и их поля
RTTM определяет несколько видов объектов (сегментов), каждый из которых описывает определенный тип события или метаданных в аудиозапсиси. Все строки RTTM имеют фиксированный формат, который представляет из себя 10 полей. Однако в зависимости от типа сегмента некоторые поля содержат значения, а не используются (отмечаются как <NA>
– Not Applicable).
Ниже представлена таблица с основными типами сегментов, их назначением и заполнением полей (Таблица 1):
Таблица 1 – Типы RTTM-сегментов и их поля.
Тип (Type) | Назначение (объект) | Поля с данными | Поля без данных |
---|---|---|---|
SPEAKER | Сегмент речи от конкретного говорящего (для диаризации) | File, Chnl, Tbeg, Tdur, Name (ID говорящего) | Ortho, Stype, Conf, Slat всегда <NA> |
LEXEME | Слово в транскрипции речи | File, Chnl, Tbeg, Tdur, Ortho (текст слова), Stype (подтип) | Name обычно <NA>; поля Conf и Slat — по возможности, иначе <NA> |
NON-LEX | Несловесный вокализованный звук (например, смех, кашель) | File, Chnl, Tbeg, Tdur, Stype (категория звука) | Ortho <NA>; Name <NA>; Conf и Slat — опционально |
NON-SPEECH | Фоновая неречевая активность (шум, музыка и т. д.) | File, Chnl, Tbeg, Tdur, Stype (категория шума) | Ortho <NA>; Name <NA>; Conf и Slat — опционально |
SPKR-INFO | Метаданные о говорящем (пол, возраст и др.) | File, Chnl, Stype (категория), Name (ID), Conf (опц.) | Tbeg, Tdur, Ortho <NA>; Slat <NA> |
SEGMENT | Структурный сегмент (например, область оценки) | File, Chnl, Tbeg, Tdur; Stype (например, eval) | Ortho, Name, Conf, Slat обычно <NA> |
NOSCORE | Участок, исключённый из оценки | File, Chnl, Tbeg, Tdur (интервал исключения) | Все остальные поля <NA> |
NO_RT_METADATA | Область без метаданных реального времени | File, Chnl, Tbeg, Tdur (интервал) | Все остальные поля <NA> |
То есть, каждая строка RTTM файла состоит из следующих полей:
Type — Тип сегмента (например,
SPEAKER
,LEXEME
,NON-SPEECH
и др.).file — Имя аудиофайла без расширения.
chnl — Номер канала (1 — моно, 1/2 — для стерео). Всегда указывается.
tbeg — Время начала сегмента в секундах (число с плавающей точкой).
tdur — Продолжительность сегмента в секундах.
ortho — Орфографическое представление сегмента (например, слово для
LEXEME
). Если неприменимо —<NA>
.stype — Подтип сегмента (например, fp для паузы, laugh для смеха). Если не требуется —
<NA>
.name — Идентификатор говорящего или объекта (speaker_1, john_doe и т. п.). В некоторых типах —
<NA>
.conf — Уверенность системы (от 0.0 до 1.0) — например, для слов в ASR. Если нет —
<NA>.
slat — Look-ahead time — время, использованное системой «наперёд» для принятия решения. Обычно
<NA>
.
Дабы лучше понять структуру RTTM файлов, в следующем разделе рассмотрим небольшой пример.
Пример содержимого RTTM-файла
Представим, что у нас есть аудиофайл tech_podcast.wav
, в котором ведется разговор двух спикеров (мужчин): сначала начинает говорить Speaker_X
, затем его речь на мгновение перекрывается короткой музыкальной заставкой или любыми другими звуками, а после чего вступает второй спикер — Speaker_Y
.
В формате RTTM такая сцена может быть описана следующим образом:
SPEAKER tech_podcast 1 0.00 2.50 <NA> <NA> Speaker_X <NA> <NA>
LEXEME tech_podcast 1 0.00 0.70 welcome lex <NA> <NA> <NA>
NON-SPEECH tech_podcast 1 2.00 1.00 <NA> music <NA> <NA> <NA>
SPEAKER tech_podcast 1 3.00 2.00 <NA> <NA> Speaker_Y <NA> <NA>
SPKR-INFO tech_podcast 1 <NA> <NA> <NA> male Speaker_X <NA> <NA>
SPKR-INFO tech_podcast 1 <NA> <NA> <NA> male Speaker_Y <NA> <NA>
На первый взгляд — это просто набор непонятных строк. Давайте разберём, что означает каждая из них:
SPEAKER
(Speaker_X) — сегмент речи первого спикера, который начинается на отметке 0.00 секунды и длится 2.50 секунды.LEXEME
— в начале файла произносится слово welcome, продолжительностью 0.70 секунды.NON-SPEECH
— музыкальная вставка (или прочие звуки), звучащая с 2.00 до 3.00 секунд.SPEAKER
(Speaker_Y) — второй спикер начинает говорить с 3.00 и до 5.00 секунд.SPKR-INFO
— метаданные, указывающие, что оба спикера — мужчины. Временные поля здесь не заполняются (<NA>
), поскольку информация является глобальной.
Этот пример показывает, насколько гибким и удобным может быть формат RTTM. Он позволяет описывать не только речь и отдельные слова, но и фоновые события и различные характеристики участников разговора. Т
Такой подход помогает составить полную, структурированную картину происходящего в аудиофайле.
Особенности RTTM формата
Формат RTTM уже давно стал де-факто стандартом в задачах речевой разметки и диаризации. Он широко используется и вовсю поддерживается множеством инструментов и отлично подходит для систем, где нужно понимать, кто говорит, когда и что именно. Но, как и у любого формата, у RTTM есть не только сильные стороны, но и свои ограничения. Давайте разберёмся, за что его ценят — и с какими нюансами стоит быть осторожным.
Что хорошего в RTTM?
1. Его легко читать и редактировать вручную
RTTM — это обычный текстовый файл, который можно открыть в любом редакторе. Строки в нём логично структурированы, и даже без специального софта можно понять, где кто говорит, когда и что происходит. А если нужно — можно быстро что-то подправить прямо руками.
2. Один формат — много видов разметки
В RTTM можно описывать не только речь (SPEAKER
), но и слова (LEXEME
), паузы и шумы (NON-SPEECH
), вокализации (NON-LEX
), а также метаданные о говорящих (SPKR-INFO
). Это делает его удобным универсальным решением для комплексной аннотации аудио.
3. Поддержка одновременных событий
Формат позволяет корректно описывать ситуации, когда, например, говорят сразу два человека или кто-то говорит на фоне шума. Такие случаи поддерживаются большинством известных инструментов (вроде md-eval
или DScore
), что делает RTTM удобным даже для сложных сценариев.
4. Высокая детализация
Можно указывать не только тип события, но и его подтип — например, смех, запинка, обрыв слова. Есть даже поле conf
, где можно задать уровень уверенности системы. Всё это открывает возможности для тонкой настройки и анализа, например, при поиске ключевых слов.
5. Удобен для парсинга
Каждая строка — это ровно 10 полей, разделённых пробелами. Да, это жёсткое правило, но оно работает: никакой двусмысленности, удобно для скриптов и интеграции в пайплайны.
6. Совместим с основными метриками
Если вы оцениваете качество диаризации, скорее всего, используете md-eval
, pyannote.metrics
или DScore
. Все они работают с RTTM напрямую. Кроме того, RTTM можно конвертировать в CTM, чтобы посчитать WER и другие метрики.
Но не всё так гладко...
1. Нет прямой связи между словами и говорящими
Строки с аннотациями слов (LEXEME
) не содержат информации о том, кто их произнёс. Чтобы это выяснить, приходится сопоставлять времена вручную с сегментами SPEAKER
. Некоторые решают это, добавляя в LEXEME
поле name — но это уже не по стандарту.
2. Жёсткий, шумный формат
Даже если половина полей в строке не используется, они всё равно должны быть — в виде <NA>
. Это делает файлы более громоздкими и увеличивает риск ошибок, особенно если случайно забыть одно поле — сдвинется всё.
3. Нет вложенности или связей между сегментами
RTTM — это плоская временная разметка. Вы не сможете в нём выразить логику вроде «вопрос–ответ» или «ремарка к реплике». Это чисто временная шкала событий, без семантики.
4. Требуется ручная валидация
Формат никак не проверяет, не выходят ли сегменты за пределы аудио, не перекрываются ли у одного и того же говорящего и т.д. Эти проверки нужно делать отдельно — например, с помощью скриптов в DScore
.
5. Расширять формат сложно
Если вам вдруг захочется добавить, скажем, поле с эмоцией или указанием языка — увы, официально этого сделать нельзя. Придётся либо переопределять уже существующие поля, либо нарушать стандарт. И тогда совместимость с внешними инструментами может сломаться.
6. На практике встречается много «вольных» вариаций
Хотя формат вроде бы строго определён, в реальных проектах можно встретить RTTM-файлы с 9 полями, без SPKR-INFO
, или с добавленным name в LEXEME
. Некоторые инструменты это проглатывают без проблем, но если у вас строгий пайплайн — могут возникнуть ошибки.
Несмотря на свои особенности и ограничения, RTTM остаётся одним из самых надёжных и универсальных форматов для аннотации речи. Он строг, но понятен. Не гибок, зато предсказуем. Его поддерживает большинство инструментов для оценки диаризации, а его простота делает его удобным как для человека, так и для машины. Пусть не идеальный, но проверенный и рабочий инструмент.
Применение RTTM в современных инструментах и системах.
Как уже было сказано выше, формат RTTM остаётся широко используемым стандартом в задачах диаризации, аннотации речи и оценки качества распознавания. Благодаря простоте, читаемости и структурированности, он активно интегрирован в современные фреймворки и библиотеки.
Так где же используется формат RTTM?
Ответ на данный вопрос указан в таблице 2.
Таблица 2 – Использование формата RTTM в современных инструментах.
Инструмент / Библиотека | Описание | Как используется RTTM |
---|---|---|
Pyannote.audio | Фреймворк от Hugging Face для диаризации | Использует RTTM для ввода/вывода; поддержка 10 полей (по NIST); совместим с pyannote.metrics, DScore, GUI-аннотаторами |
NVIDIA NeMo | Фреймворк для ASR и диаризации | Требует RTTM с сегментами SPEAKER; поддерживает вывод в формате RTTM; полностью совместим с DScore |
DScore | Оценка DER от NIST | Поддерживает RTTM-гипотезы и ссылки; встроенная валидация validate_rttm.py; используется в DIHARD, VoxSRC |
Kaldi | Классический фреймворк для ASR | Скрипт make_rttm.py генерирует RTTM из внутреннего формата; удобно для оценки и преобразования |
ESPnet, WhisperX, SpeechBrain | Современные фреймворки для ASR и диаризации | Импорт/экспорт RTTM реализован для VAD и диаризации; легко интегрируются в внешние пайплайны |
GUI и редакторы | Инструменты визуальной разметки | RTTM редактируется в ELAN, Praat, Audacity (после конверсии); поддержка подсветки в VS Code (RTTM Syntax HL) |
Форматные конвертеры | Утилиты и скрипты для преобразования форматов | Поддержка преобразования RTTM ↔ CTM, CSV, ELAN, STM, JSON и др. |
Заключение
RTTM — это не просто формат, а целая система для описания того, что происходит в аудиофайле: кто говорит, когда именно, как долго, что звучит на фоне и что именно произносится. Он объединяет в себе диаризацию, транскрипцию, шумы, вокализации и метаданные, выстраивая их в единую временную картину.
RTTM по-прежнему остается основным стандартом алгоритмов диаризации и оценки речи и во многом именно благодаря своей скорости исполнения и читабельности его структуры, совместимости с множеством инструментов и способами интеграции в любые пайплайны.
На практике RTTM стабильно работает с большинством существующих библиотек и скриптов — часто без дополнительной настройки. Это значит, что при интеграции и анализе у вас будет меньше неожиданностей и больше предсказуемости.
А если вы только начинаете разбираться в мире работы с речевыми данными, знание RTTM — отличный старт. Это своего рода «базовый язык» для специалистов по речи: простой, понятный и поддерживаемый практически везде.