Who
녹음 속 화자에 라벨을 붙이고, 각 사람이 언제 말을 시작하고 멈추는지 정확히 확인하세요. 처리는 전부 기기에서 이뤄집니다.

오디오와 동영상에서 누가 무엇을 말했는지 표시합니다.
Who는 팟캐스트, 인터뷰, 통화, 회의를 위해 만들어졌고, 길이에 관계없이 어떤 녹음이든 처리합니다. MacBook Pro에서 50분짜리 인터뷰가 3초면 끝나며, 처리는 전부 기기에서 이뤄집니다. 타임스탬프로 전사본에 화자를 표시하거나, 게스트가 다음에 말하는 지점으로 건너뛰거나, 화자가 바뀔 때마다 컷을 나눌 수 있습니다.
Who는 처음 말한 순서대로 화자에게 번호를 매기고, 두 사람이 동시에 말하면 둘 다 표시합니다. 녹음은 5분 구간마다 한 번에 처리하고, 구간을 넘나들며 목소리를 대조해 같은 화자로 묶습니다.
AMI 회의 녹음에서 Who는 12.6%의 오류율로 화자를 라벨링하며, 이는 서버 GPU에서 실행한 pyannote의 13.1%, 같은 Mac에서 실행한 FluidAudio의 19.4%보다 낮습니다. 속도도 FluidAudio보다 두 배 빠릅니다.
한 시간 분량 오디오를 4초에.
Who는 SDK를 통해 M5 Pro 탑재 MacBook Pro에서 실시간의 950배로 실행됩니다. AMI 회의에서 Who의 화자 분리 오류율은 12.6%로, pyannote는 13.1%, FluidAudio는 19.4%입니다.
MacBook Pro (M5 Pro) 한 대에서 테스트 세트 전체를 녹음 하나씩 차례로 처리했습니다. Who의 시간에는 모델 로드가 포함됩니다. AMI에서 FluidAudio는 자체 측정으로 73초, 모델 로드를 포함하면 79초가 걸립니다.
| 테스트 세트 | Who 소요 시간 | Who 실시간 배속 | FluidAudio 실시간 배속 |
|---|---|---|---|
| AMI test, 544 minutes | 34s | 950x | 445x |
| VoxConverse test, 43.5 hours | 165s | 948x | 426x |
녹음 전체 기준 화자 분리 오류율, 낮을수록 좋음. 모든 행에 같은 녹음과 같은 채점 도구 사용
| 모델 | AMI | VoxConverse, 화자 최대 4명 | NOTSOFAR-1, 화자 최대 4명 | Earnings-21 | DiPCo |
|---|---|---|---|---|---|
| Who, on the Neural Engine | 12.6% | 8.4% | 16.2% | 27.7% | 41.1% |
| pyannote community-1, PyTorch | 13.1% | 7.3% | 18.7% | 7.3% | 33.4% |
| FluidAudio, Core ML | 19.4% | 9.6% | 32.7% | 12.0% | 42.7% |
Who는 두 회의 세트인 AMI와 NOTSOFAR-1에서 앞서고, 나머지 세 세트에서는 pyannote에 뒤집니다. Earnings-21 통화는 화자가 최대 20명이고, 화자가 9명 이상인 VoxConverse에서 Who는 24.7%를 기록합니다. pyannote는 서버 GPU에서, Who와 FluidAudio는 M5 Pro의 Neural Engine에서 실행했습니다. pyannote와 FluidAudio 점수는 우리가 직접 실행한 결과이며 모델 카드에는 없습니다.
활용 사례
오디오와 동영상에서 누가 무엇을 말했는지 표시합니다.
전사본에 화자 표시하기
Who를 Voz와 함께 쓰면 전사본의 줄마다 누가 말했는지 표시됩니다. 읽는 사람은 화자 구분 없는 텍스트 한 덩어리 대신 대화의 흐름을 따라갈 수 있습니다.
게스트가 다시 말하는 지점으로 건너뛰기
두 시간짜리 인터뷰나 회의를 한 화자로 걸러, 타임라인을 훑지 않고 그 사람의 발화 구간으로 바로 이동하세요. 녹음은 기기 밖으로 나가지 않습니다.
화자가 바뀔 때마다 컷 나누기
2카메라 인터뷰나 비디오 팟캐스트에서 화자가 바뀌는 곳마다 카메라 앵글을 전환하세요. 모든 발화 구간에 시작·종료 시각이 있으므로, 화자가 바뀌는 지점이 곧 컷 지점입니다.
웃음소리 빼기
관객의 웃음소리와 방 건너편에서 한마디 던진 목소리를 걸러 내세요. Who는 녹음에서 차지하는 비율이 정해 둔 값보다 낮은 화자를 모두 제외하고, 남은 화자의 번호를 다시 매깁니다.
모델이 하는 일
- Who는 5분 구간마다 최대 4명의 화자를 구분하며, 구간을 넘나들며 목소리를 대조하므로 녹음 전체에서는 그보다 많은 화자도 라벨링합니다.
- 각 발화 구간(turn)은 한 화자가 이어서 말한 부분으로, 화자 번호와 초 단위 시작·종료 시각(10ms 단위)을 담습니다. 여러 사람이 겹쳐 말하면 서로 다른 화자의 구간이 겹칩니다.
- SDK에서 Who는 처음 말한 순서대로 화자에게 0부터 번호를 매기며, 누구인지 이름으로 식별하지는 않습니다.
- Neural Engine에서 실행되는 두 Core ML 그래프인 인코더와 쿼리 그래프가 각 구간을 읽습니다. 세 번째 그래프는 혼자 말하는 순간들로 화자마다 목소리 지문(voice print)을 만들고, Who는 녹음 전체의 모든 화자를 한 번에 대조합니다.
- 혼자 말한 시간이 1초 미만인 화자는 자기 목소리 지문이 없어, 시간상 가장 가까운 화자에 합쳐집니다. 다른 사람의 발화 구간 안에 있는 1초짜리 웃음은 그 화자에게 돌아갑니다.
- SDK를 통해 M5 Pro 탑재 MacBook Pro에서 실시간의 950배: AMI 회의 544분을 34초에 처리합니다. 8-bit 빌드는 953배입니다.
- SDK 기준 메모리: 모델을 로드한 상태에서 275MB, 최대 사용량은 8분 녹음에서 336MB, 34분 녹음에서 437MB, 2.65시간 녹음에서 927MB입니다.
- Core ML 다운로드는 float16이 81MB, 8-bit 가중치가 42MB이며, 두 빌드의 AMI 회의 오류율은 12.6%로 같습니다. Neural Engine이 로드할 때 가중치의 압축을 풀기 때문에 8-bit 빌드로 메모리가 줄지는 않습니다.
- Who는 49MB LiteRT 빌드와 99MB ONNX 빌드로도 제공됩니다. LiteRT 빌드는 SDK를 통해 Android, Linux, Windows에서 실행되고, ONNX 빌드는 아직 어느 SDK에서도 실행되지 않습니다. SDK 밖에서 CPU만으로 측정했을 때 LiteRT 빌드는 오디오 544분을 M5 Pro에서 87초, 24코어 AMD EPYC 서버에서 191초에 처리합니다.
keepingSpeakers(minimumShare:)는 녹음에서 차지하는 비율이 기준보다 낮은 화자를 모두 빼고 나머지의 번호를 다시 매기므로, 웃음, 박수, 징글이 걸러집니다. 우리가 시험한 팟캐스트에서는 5%로 설정했을 때 웃음소리와 청중 소리가 깨끗이 빠졌습니다. 짧게 말하는 화자가 많은 뉴스 프로그램에서는 비율을 낮게 두거나 필터를 끄세요.- URL이나 경로로 지정한 오디오 파일에 화자 분리를 실행하거나, 샘플레이트에 관계없이 모노 샘플을 넘기세요. 샘플레이트 변환은 SDK가 알아서 합니다.
- SDK는 처음 쓸 때 Hugging Face에서 가중치를 내려받아 캐시합니다.
download(progress:)로 미리 받아 둘 수 있고,Who(directory:)는 직접 관리하는 폴더에서 오프라인으로 실행됩니다.
시작하기
누가 무엇을 말했는지을(를) 몇 줄의 코드로 iOS or macOS or Android 앱에 추가하세요. Who 문서.
// Swift Package Manager
.package(url: "https://github.com/Desert-Ant-Labs/desert-ant-core.git", from: "4.0.0")
// target dependency
.product(name: "Who", package: "desert-ant-core")
import Who
let who = Who() // downloads on first use
let result = try await who.diarize(contentsOf: url)
result.speakerCount // 3
for turn in result.turns {
print(turn.speaker, turn.start, turn.end) // 0 12.4 15.9
}
Add Who from Desert Ant Labs to this Swift project (iOS, macOS). What it does: 오디오와 동영상을 위한 온디바이스 화자 라벨링. SDK: Swift (iOS, macOS) Repo: https://github.com/Desert-Ant-Labs/desert-ant-core#readme // Swift Package Manager .package(url: "https://github.com/Desert-Ant-Labs/desert-ant-core.git", from: "4.0.0") // target dependency .product(name: "Who", package: "desert-ant-core") Reference: - Model page: https://desertant.com/models/who/ - Full catalog and other models: https://desertant.com/llms.txt Add the SDK, then follow its README for the exact API and current version. Do not invent API names or method signatures; confirm them against the README.
// build.gradle.kts (Maven Central)
implementation("ai.desertant:who:4.0.0")
import ai.desertant.who.Who
val who = Who(context) // downloads on first use
val result = who.diarize(samples, 16_000.0)
result.speakerCount // 3
for (turn in result.turns) {
println("${turn.speaker} ${turn.start} ${turn.end}") // 0 12.4 15.9
}
who.close()
Add Who from Desert Ant Labs to this Kotlin project (Android).
What it does: 오디오와 동영상을 위한 온디바이스 화자 라벨링.
SDK:
Kotlin (Android)
Repo: https://github.com/Desert-Ant-Labs/desert-ant-core#readme
// build.gradle.kts (Maven Central)
implementation("ai.desertant:who:4.0.0")
Reference:
- Model page: https://desertant.com/models/who/
- Full catalog and other models: https://desertant.com/llms.txt
Add the SDK, then follow its README for the exact API and current version. Do not invent API names or method signatures; confirm them against the README.
사양
- 속도
- MacBook Pro (M5 Pro)에서 실시간의 950배, 50분짜리 인터뷰를 3초에
- 정확도
- AMI 회의에서 화자 분리 오류율 12.6%; 화자 최대 4명인 VoxConverse에서 8.4%
- 화자 수
- 5분 구간마다 최대 4명, 길이에 관계없이 녹음 전체로는 그 이상
- 출력
- 화자별 발화 구간과 초 단위 시작·종료 시각(10ms 단위); 겹친 발화도 유지
- 온디바이스 크기
- Core ML 81MB (float16, 기본값); 8-bit 가중치는 42MB
- 메모리
- 모델 로드 시 275MB; 2.65시간 녹음에서 최대 927MB
- 플랫폼
- iOS 18+, macOS 15+, tvOS 18+, visionOS 2+ (Core ML); Android, Linux, Windows (LiteRT, CPU에서 실행)
Who는 팟캐스트, 인터뷰, 각자 마이크를 쓰는 원격 통화처럼 마이크를 가까이 대고 녹음한 오디오에서 가장 잘 동작합니다. 마이크에서 멀수록 Who가 놓치는 발화가 많아집니다.
방 건너편에서 녹음한 그룹 대화에서는 19~21%, 헤드셋을 쓴 회의에서는 8%입니다. Who가 발화를 가장 많이 놓치는 때는 두 사람이 동시에 말할 때입니다.
VoxConverse에서 오류율은 화자가 1~2명일 때 8%, 5~8명일 때 17%, 9명 이상일 때 25%입니다. 최대 20명이 짧게 발언하는 Earnings-21 실적 발표 통화에서는 Who가 발화의 16%를 다른 화자에게 잘못 배정합니다.
Who는 화자를 이름이 아닌 번호로 표시하며 전사는 하지 않습니다. 화자별로 표시된 전사본이 필요하면 Who를 Voz와 함께 쓰세요.
Android, Linux, Windows에서는 Who가 CPU로 실행되며, Neural Engine보다 3~7배 느립니다. 브라우저와 Node에서는 아직 실행되지 않습니다.
자주 묻는 질문
Who은(는) 무엇인가요?
녹음 속 화자에 라벨을 붙이고, 각 사람이 언제 말을 시작하고 멈추는지 정확히 확인하세요. 처리는 전부 기기에서 이뤄집니다.
Who은(는) 온디바이스로 실행되나요?
네. Who은(는) 서버 호출 없이 기기에서 실행되므로, 데이터는 사용자의 기기에 그대로 남습니다.
Who은(는) 어떤 플랫폼을 지원하나요?
Who은(는) Swift, Kotlin용 네이티브 온디바이스 SDK로 제공됩니다.
Who의 비용은 얼마인가요?
각 모델은 월간 활성 기기 10만 대까지 무료입니다. 추론은 무제한입니다. 맞춤 라이선스는 문의하기 바랍니다.
Who은(는) 얼마나 정확하고 빠른가요?
Who는 SDK를 통해 M5 Pro 탑재 MacBook Pro에서 실시간의 950배로 실행됩니다. AMI 회의에서 Who의 화자 분리 오류율은 12.6%로, pyannote는 13.1%, FluidAudio는 19.4%입니다.