← Blog

What is diarization and why you need it for call transcription

Picture a fifteen-minute support call: the customer is in a hurry, the agent clarifies details, and a couple of times they talk over each other. You run the recording through speech-to-text and get neat text — but seamless, like a wall: “Hello, I'd like to ask, my order hasn't arrived… yes, let me check… tell me the waybill number.” Which is the customer's question and which is the agent's answer? Speech-to-text honestly answers what was said. The question of who said it is answered by a different technology — diarization. Let's look at how it works, why call analysis can't do without it, and how to turn it on with two lines of code.

You have the transcript, but not “who said what”

Let's start with a non-obvious thought: speech recognition and diarization are two different tasks solved by different models. STT listens to audio and turns sound into words. It doesn't care that there may be several voices in a recording — for it, the whole file is one continuous stream of speech. So the output is a monolith: the text is there, the structure of the dialog is not.

On a short recording that's tolerable. On a forty-minute call between a manager and a customer, where people interrupt each other, add “uh-huh” and finish each other's sentences, the continuous text becomes a puzzle. You can't tell who asked the question and who answered it, who made a commitment and who declined. Which means you can neither evaluate the agent's work nor find the right moment nor write a correct transcript.

That's why diarization is almost always turned on where attribution matters — who a line belongs to: call-center quality control, interview and podcast transcripts, meeting minutes, legal and medical recordings. Everywhere that text without an author is half the meaning.

What diarization is, in plain words

Diarization (from English diarize — to keep a diary, to record who speaks) is the task of marking audio into turns: who spoke and when. The output is not just text but a sequence of segments with speaker labels.

Formally the task splits into two steps. Segmentation — finding the boundaries of speech: where one turn ends and another begins, where there's a pause, and where there's a continuous monologue. Clustering — realizing that all these pieces belong to the same person and assigning them a shared label: Speaker 0, Speaker 1, and so on.

Important: diarization doesn't know names. It won't say “this is Ivan Petrovich”; it will say “this is speaker number one, and he also spoke in these five places.” Matching Speaker 1 to a specific person is a separate step. And don't confuse diarization with voice identification: diarization answers how many speakers there are and who speaks when, without knowing in advance who these people are. In 95% of business tasks, diarization alone is enough.

How it works under the hood

The modern approach works like this. The system slices audio into short segments and builds an embedding for each — a compact numeric vector, a kind of “voice fingerprint.” Two segments spoken by the same person give close embeddings; segments from different people give distant ones. Then a clustering algorithm gathers similar fingerprints into groups: each group is one speaker.

The key nuance is how many speakers to look for. You can hint the exact number (“there are exactly two people in the recording”) or leave it unknown. The second option is more flexible but errs more often: with similar voices, clustering may glue two people into one or, conversely, split one person into two. That's why APIs usually have a parameter to fix the speaker count when it's known.

One more layer is overlap — speech on top of speech. When two people talk simultaneously, STT produces mush, and diarization can't always honestly separate who said what. Advanced systems mark such segments separately. In practice overlap is fought like this: in a call-center recording, the agent's and the customer's speech are physically separated into channels, so overlap barely occurs.

Why call centers need it: the main scenario

If diarization existed for one application, it would be call analysis. A call center generates hundreds or thousands of recordings a day, and listening to them by hand is physically impossible. Usually a sample is checked — 3–5% of calls per agent. Diarization combined with STT changes the game: every call becomes structured text with attributed turns, and it can be analyzed automatically.

What it gives in practice. Quality and script control: the system checks whether the agent introduced themselves, warned about recording, and said goodbye correctly — across all calls, not a sample. Compliance: who exactly broke the rules is visible from the speaker labels. Training: you can pull the best dialogs of experienced agents and review them in a workshop. And conflict resolution: “the customer says they were insulted” turns from he-said-she-said into text with attribution.

A concrete example. The agent was supposed to say: “Romashka company, my name is Anna, this call is being recorded.” STT returns this phrase as part of the continuous text, and formally it's there. But diarization shows that half the phrase was spoken by the agent and half by the customer, who interrupted. Without attribution the call would be counted as “script followed,” when in fact the agent never introduced themselves.

Diarization beyond the call center

Interviews and journalism. Transcribing interviews with timestamps is a standard pain for journalists and researchers. Diarization immediately splits the text into “question — answer,” so you don't mix up the interviewee's quote and the interviewer's line. It's especially valuable when three people are talking: a host and two guests.

Podcasts and meetings. A podcast transcript without speaker labels is almost useless to a reader; with diarization you get ready material for an article, timestamps for show notes, and search across episodes. A recording of a ten-person call without labels is chaos; diarization sorts it out: who proposed, who objected, who took the task.

Medicine and law. Doctor consultations, interrogations, hearings — here accurate attribution is not a convenience but a requirement: a doctor's line must not be attributed to a patient in the record. The general rule is one: diarization makes a transcript usable for further processing — search, analytics, minutes, and reports.

Hard cases: where diarization errs

It would be dishonest to talk about the technology and not mention its limits. Similar voices: two people of the same gender with close timbre are a classic stress test, and clustering may glue them into one. The opposite error — one person who changes intonation may be split into two.

Overlapping speech: when people talk at the same time, both STT and diarization do worse. Unknown speaker count: if you don't hint that there are exactly two people and there are actually five, the labels may drift. And recording quality: noise, echo, and phone codecs eat the voice fingerprint — garbage in, garbage out, as with any recognition.

Diarization quality is measured with DER (diarization error rate) — the share of audio time labeled incorrectly: missed speech, false speech, and speech attributed to the wrong speaker. On clean phone recordings with two speakers, good systems score DER in the low single digits; on noisy multi-speaker recordings, noticeably higher. Ask a service for both WER and DER, and test on your own recording.

Diarization in the API: what it looks like

Enough theory — let's see how diarization looks in code. In VoiceKit it's turned on with one parameter in the transcription request:

Python
from voicekit import VoiceKitClient

client = VoiceKitClient(api_key="rtt_…")

result = client.transcribe(
    "call-2026-09-14.mp3",
    language="ru",
    diarization=True,
    speakers_count=2,
)

for segment in result.segments:
    print(f"[{segment.start:6.2f}–{segment.end:6.2f}] "
          f"{segment.speaker}: {segment.text}")
text
[  0.00–  2.14] Speaker 0: Здравствуйте, компания Ромашка, меня зовут Анна.
[  2.14–  2.40] Speaker 1: Да, добрый день. Подскажите, а мой заказ уже отправили?
[  2.40–  5.80] Speaker 0: Сейчас посмотрю. Назовите, пожалуйста, номер заказа.
[  5.80–  6.90] Speaker 1: Шестьсот сорок два.

The speakers_count parameter is optional. If you omit it, the system will try to determine the number of speakers itself. But if you know it in advance (and in a call-center call it's almost always two), the hint almost always improves the result.

Timestamps come at the segment level, and the text inside a segment can also be returned with word-level detail if you want to highlight individual uncertain words. The full response schema and parameters — see the docs.

How to improve diarization quality: 5 practical tips

Diarization is not a black box you can't influence. First: hint the speaker count — if you know there are two people, pass speakers_count=2. Second: separate the channels — in a stereo recording with the agent on the left and the customer on the right, diarization gets near-perfect separation almost for free; even simple volume normalization and noise reduction help.

Third: don't chop the recording into pieces — clustering needs to see the whole speaker to gather their turns under one label; a call cut into minutes may get different labels for the same person. Fourth: evaluate on your own data — run 10–20 real calls and count attribution errors; marketing DER numbers say nothing about your acoustics.

Fifth: don't expect names. Diarization gives Speaker 0 and Speaker 1, not “Anna” and “customer.” Matching labels to roles is a rule in your code: for example, the first speaker in a call-center call is usually the agent.

Diarization or plain STT: when you actually need it

A fair question at the end: aren't we overpaying for an extra technology? The answer depends on what you do with the text next. Diarization is unnecessary if you transcribe a monologue — a lecture, an audiobook, a single-speaker podcast — or if you just need text search without attribution. STT handles those on its own.

Diarization is needed when there is more than one voice and the meaning depends on who a line belongs to: call analysis, agent evaluation, interviews, meetings, minutes, conflict resolution. Here text without attribution is text with half the information taken out.

The good news: in modern APIs diarization is not a separate complex service but a flag in the same transcription request. Turn it on and you get labels; leave it off and you get plain text. So you don't have to choose “either STT or diarization” — you turn it on exactly where it pays off.

Conclusion

Diarization answers the question speech-to-text fundamentally doesn't ask: who is speaking. It splits audio into turns and assigns each a speaker label — Speaker 0, Speaker 1, and so on. Without names, but with precise attribution: enough to turn a seamless transcript into a structured dialog you can analyze, search, and turn into minutes.

The technology isn't perfect: similar voices, overlapping speech, and noise are its weak spots. But on typical call-center calls with two speakers and separated channels it works reliably, and the quality metric is DER — the share of time labeled incorrectly.

The main takeaway: diarization is not a checkbox feature but a way to extract the structure of a conversation. And structure is the whole point of transcribing calls. Upload your own call to the demo and watch the recording unfold into turns with speaker labels.

Test diarization

Upload your own call to the demo and watch the recording unfold into turns with speaker labels. The free limit is enough to judge quality on your data.

Upload your recording see pricing
← All articles