Kezek turns a mono recording of two people into one track per person, with the original length and timing. Overlaps and quick “mm-hm”s stay on the track of whoever said them.
Kezek — “turn” in Kazakh, as in taking turns to speak.
Listen
Four 30-second excerpts from the public Open Yap 1K sample, from conversations Kezek never saw in training. Each has the mono input, the two Kezek tracks and the original channels, recorded with a headset per person, so you can compare. Switch tracks while it plays; shaded spans are moments when both people speak.
5 short replies over the other speaker · 5 kept
6 short replies over the other speaker · 6 kept
6 short replies over the other speaker · 6 kept
5 short replies over the other speaker · 5 kept
In Kazakh. A conversation we recorded ourselves on one microphone, between two brothers with similar voices. Kezek was trained and measured in English, so this one is for listening only.
Tracks are Kezek output with no editing; added together they equal the input. Open Yap audio is reproduced with the written consent of The Agentic Data Company.
The problem
Most conversational audio exists only as a mono mix. To turn it into training data for models that listen and speak at once, three failures matter more than any average score.
A stretch of one person’s speech lands on the other person’s track, and everything downstream learns the wrong turn-taking.
A quick “yeah” or “mm-hm” over the other speaker is short, quiet and easy to drop. It is also what a conversation model most needs to learn.
The other voice audible on a track. A model trained on it learns that its own channel holds both speakers.
How it works
Stage 1 listens to the whole recording and decides who speaks when. Stage 2 only carries out that decision. Three models, 41M parameters, all trained by us.
Finds the two voices once for the whole recording. Trained from scratch on 8,961 people, with near-identical “sibling” voices and phase changes it must learn to ignore.
Decides who is speaking at every 20 ms of the recording. Because the two voices are fixed for the whole recording, nobody has to be re-identified chunk by chunk.
A conditioned separator that only carries out that plan. Its two outputs always add up to the input: nothing is lost, it can only be put on the wrong track.
Track A + track B = the input. No voice samples, no labelling.
Results
Compared with pyannote → DialogueSidon, run as published, on Open Yap test and on CallHome English telephone calls that neither system saw in training.
of short replies kept on the right track, against 0.69 for pyannote → DialogueSidon
of every recording returned, with the original timing; the cascade returns 74%
of recordings with no channel swap, against 79%
faster: about 230 hours of audio per GPU-hour
121 conversations, as recorded
| Metric | pyannote → Sidon | Kezek |
|---|---|---|
| Short replies kept ↑ | 0.687 | 0.830 |
| Leak, dB ↓ | −10.1 | −13.9 |
| No channel swap ↑ | 0.793 | 0.934 |
| Coverage ↑ | 0.735 | 1.000 |
| Hours per GPU-hour ↑ | 51 | 231 |
128 telephone calls, unseen by both
| Metric | pyannote → Sidon | Kezek |
|---|---|---|
| Replies over speech ↑ | 0.711 | 0.796 |
| Replies in a pause ↑ | 0.798 | 0.907 |
| Leak, dB ↓ | −9.7 | −11.8 |
| No channel swap ↑ | 0.797 | 0.859 |
| Coverage ↑ | 0.816 | 1.000 |
| Hours per GPU-hour ↑ | 46 | 232 |
Not there yet
Made for
Two-channel conversations for training speech models that listen and talk at the same time, built from audio that only exists as a mono mix.
Per-speaker transcripts and talk-time analytics for calls, interviews and meetings recorded on one microphone.
Fix crosstalk and level each voice separately, without re-recording.
Open release
Method, metrics, comparison and negative results
MIT licence
Apache-2.0 licence
The earlier version is described in the Kezek prototype report.
Kezek is in early access. Tell us a little about your recordings and we will get back to you.
Also from Manifestro: Dauys, a compact spoken dialogue model →