Реалізація діаризації розмовляючих (Speaker Diarization) Діаризація — завдання «хто говорив колись» без попереднього знання голосів. Необхідна для транскрипції нарад, інтерв'ю, судових засідань — скрізь, де потрібно атрибутувати кожну репліку конкретному, хто говорить. ### Сучасний стек pyannote.audio 3.x - state-of-the-art open-source рішення з DER (Diarization Error Rate) 7-12% на стандартних датасетах:```python
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}")
### Злиття діаризації з транскрипцієюpython
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
- AWS Transcribe: $0.029/хв, до 10 спікерів Терміни: інтеграція pyannote + Whisper - 3-5 днів. Оптимізація під конкретний тип запису – до 2 тижнів.







