Реализация диаризации говорящих (Speaker Diarization)

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Реализация диаризации говорящих (Speaker Diarization)
Средняя
от 1 рабочего дня до 3 рабочих дней
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    853
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

Реализация диаризации говорящих (Speaker Diarization)

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

Современный стек

pyannote.audio 3.x — state-of-the-art open-source решение с DER (Diarization Error Rate) 7–12% на стандартных датасетах:

from pyannote.audio import Pipeline
import torch

pipeline = Pipeline.from_pretrained(
    "pyannote/speaker-diarization-3.1",
    use_auth_token="HF_TOKEN"
)
pipeline.to(torch.device("cuda"))

diarization = pipeline(
    "meeting.wav",
    min_speakers=2,
    max_speakers=6
)

for segment, track, speaker in diarization.itertracks(yield_label=True):
    print(f"[{segment.start:.2f}s → {segment.end:.2f}s] {speaker}")

Слияние диаризации с транскрипцией

from faster_whisper import WhisperModel

def transcribe_with_diarization(audio_path: str) -> list[dict]:
    # 1. Транскрибируем
    whisper = WhisperModel("large-v3", device="cuda")
    segments, _ = whisper.transcribe(audio_path, word_timestamps=True)

    # 2. Диаризуем
    diarization = pipeline(audio_path)

    # 3. Сопоставляем по временным меткам
    result = []
    for seg in segments:
        seg_midpoint = (seg.start + seg.end) / 2
        speaker = "UNKNOWN"
        for turn, _, spk in diarization.itertracks(yield_label=True):
            if turn.start <= seg_midpoint <= turn.end:
                speaker = spk
                break
        result.append({
            "speaker": speaker,
            "start": seg.start,
            "end": seg.end,
            "text": seg.text
        })
    return result

Качество по числу говорящих

Число говорящих DER (pyannote 3.1)
2 5–8%
4 8–12%
6 12–18%
8+ 15–25%

Облачные альтернативы

  • AssemblyAI Diarization: $0.012/мин, до 10 спикеров
  • Google STT: $0.008/мин, до 6 спикеров
  • AWS Transcribe: $0.029/мин, до 10 спикеров

Сроки: интеграция pyannote + Whisper — 3–5 дней. Оптимизация под конкретный тип записи — до 2 недель.