Open-source транскрипция на стероидах: встречайте апдейт
Cohere Transcribe — 2-миллиардный монстр для транскрипции, который не стесняется работать локально (вот наш обзор). Но был нюанс: модель выдавала чистый текст без информации о том, кто и когда говорит. Для реальных сценариев — встречи, интервью, подкасты — это как чай без сахара. Некто (назовём его безымянным героем) взял и дообучил Cohere Transcribe, добавив диаризацию и временные метки. Готовая модель уже на Hugging Face. Давайте разберем, как это сделано, с чем его едят и почему это меняет правила игры.
Под диаризацией понимается определение того, какой участник разговора говорит в каждый момент времени. Таймстампы — привязка каждого слова к точному моменту на временной шкале.
Почему стандартный Cohere Transcribe — не финал
Оригинальная модель, при всей своей мощи (2B параметров, обучена на 500k часов речи), генерирует плоскую расшифровку. Вы получаете текст, но не знаете: «Это сказал Петя или Вася? А в какой секунде?». Для продакшена — беда. Приходится навешивать внешние решения вроде pyannote-audio для диаризации, а таймстампы выковыривать из CTC-логарифмов. Это адский велосипед, который ломается на шумах и наложениях голосов.
Решение из статьи — дообучить модель так, чтобы она сама предсказывала метки спикеров и временные отрезки. По сути, сделать multitask learning: основной таск — транскрипция, побочные — диаризация и регрессия времени.
Анатомия дообучения: архитектура и данные
Исходная архитектура Cohere Transcribe — encoder-decoder на базе Transformer. Для диаризации авторы добавили дополнительную голову (head), которая для каждого токена выдаёт эмбеддинг спикера (номер говорящего). Таймстампы предсказываются как смещение от начала аудио — простой линейный слой поверх энкодера. Звучит логично, но есть нюанс: нужны размеченные данные с метками спикеров и временными метками.
Где их взять? Синтез! Авторы нагенерировали 10 000 часов синтетических диалогов, склеивая короткие аудиофрагменты из LibriSpeech, VoxPopuli и Common Voice, добавляя случайные паузы и перебивания. Для каждого синтетического диалога известны границы спикеров и время. Это дешевле и быстрее ручной разметки. Плюс использовался чанкинг, чтобы модель не захлебнулась на длинных записях.
Сравнение с альтернативами: Whisper, Picovoice, облачные решения
| Модель | Диаризация | Таймстампы | Локальность | Качество |
|---|---|---|---|---|
| Cohere Transcribe (доработанная) | Встроенная | Пословные | Да | Высокое (WER ~8% на LibriSpeech) |
| Whisper (large-v3) | Нет (только через pyannote) | Секционные (по умолчанию плохие) | Да | Высокое, но хуже на диалектах |
| Google STT | Есть (платная) | Пословные | Нет (облако) | Очень высокое |
| Amazon Transcribe | Есть (платная) | Пословные | Нет (облако) | Высокое |
Главный плюс доработанной Cohere — всё в одном корпусе и работает локально. Никаких двойных интеграций, никаких account keys. Загрузил аудио — получил {'speaker_A', 'text': '…', 'start_time': 12.3, 'end_time': 14.1}. По качеству на синтетических тестах модель не уступает облачным гигантам, а на специфических доменах (например, IT-термины, русская речь) может быть лучше — достаточно дообучить на своем датасете, как это делали с Whisper для распознавания русской IT-речи (читайте опыт).
Как это использовать: пример кода за 5 минут
В репозитории на Hugging Face лежит пайплайн, совместимый с transformers. Вот минимальный рабочий пример:
from transformers import pipeline
pipe = pipeline('automatic-speech-recognition', model='username/cohere-transcribe-diariation')
result = pipe('meeting.mp3', return_timestamps='word', diarization=True)
print(result['chunks'])
# Вывод:
# [
# {'text': 'Hello', 'speaker': 0, 'timestamp': (0.2, 0.4)},
# {'text': 'Hi', 'speaker': 1, 'timestamp': (0.5, 0.7)},
# ...
# ]Обратите внимание: return_timestamps='word' даёт пословные таймстампы, diarization=True включает идентификацию спикеров. Если нужно сегментировать по фразам — используйте return_timestamps='segment'.
На GPU модель занимает ~6 ГБ памяти (при batch size 1). На CPU — 12 ГБ RAM, но медленно: минута аудио обрабатывается за 30–40 секунд. Рекомендуется хотя бы T4/2080 Ti.
Кому реально нужно это всё?
- Разработчикам ботов для встреч — автоматическая расшифровка совещаний с определением кто и когда сказал.
- Исследователям речи — модель отлично подходит как основа для дальнейшего дообучения под специфические домены (медицина, юриспруденция).
- Компаниям с регламентами приватности — никакие данные не покидают периметр.
- Подкастерам — автоматическая разметка таймкодов для шоу-нот.
Если вы пилите стартап в области ASR и не хотите зависеть от облачных провайдеров — берите эту модель, дообучайте под свой язык и наслаждайтесь. Архитектура позволяет вставлять аудиомодальность в LLM (как в SLAY-ASR) — а это уже почти AGI для голосовых интерфейсов.
Не очевидный совет (вместо заключения)
Если вы планируете дообучать модель на своём датасете, не повторяйте грабли из кейса по русификации Mistral 7B (LoRA не сработала). Для Cohere Transcribe лучше использовать full fine-tune с аккуратным выбором learning rate (1e-5, cosine scheduler). LoRA может убить точность таймстампов, потому что низкоранговая адаптация плохо учит регрессионные задачи. Либо применяйте (IA)3 — но это отдельная история.
Прогноз: к концу 2026 года open-source ASR с встроенной диаризацией станет мейнстримом. Cohere Transcribe подрезала хвосты облачным сервисам. Вопрос только, насколько быстро сообщество наклепает качественных датасетов для новых языков и доменов.