전사본은 무슨 말을 했는지 알려 줍니다. 인터뷰, 회의, 팟캐스트에서는 누가 말했는지도 알아야 합니다. 음성 연구에서는 이를 화자 분할(speaker diarization)이라고 부릅니다. iPhone 1.8.5, Mac App Store 1.3.2, 공식 사이트에서 직접 받는 Mac 버전 1.5.1부터 Whisper Notes는 이 작업을 전부 기기에서 실행합니다.
이 글에서는 작동 원리와 클라우드 정답 데이터를 기준으로 한 벤치마크를 공개합니다. 끝내 없애지 못한 실패 유형과, 그 대신 어떤 방법을 택했는지도 설명합니다.
무엇을 할 수 있나
녹음, 가져온 오디오나 동영상, 회의 녹음 등 노트를 열고 화자 버튼을 누릅니다. 몇 초 뒤 각 문단에 화자 라벨과 타임스탬프가 붙습니다.
Mac과 iPhone의 화자 라벨. 문장을 누르면 오디오가 그 시점으로 이동합니다.
처음에는 ‘화자 1’, ‘화자 2’로 표시됩니다. 한 번 이름을 바꾸면 전사본 전체에 반영됩니다. 어느 문장이든 누르면 오디오의 정확한 위치로 이동하므로 인용문을 실제 목소리와 확인하기 쉽습니다.
화자 이름을 바꾸면 노트의 모든 문단이 함께 업데이트됩니다.
회의 녹음은 통화가 끝난 뒤 화자 식별을 자동 실행합니다(설정에서 끌 수 있습니다). 라벨은 내보내기에도 남습니다. 화자 포함 전사본 복사는 클립보드에 화자를 함께 담고, SRT와 VTT 파일은 자막에 화자 정보를 유지합니다.
화자 분할은 단어가 아니라 목소리를 분석합니다. 따라서 앱이 전사하는 100개 이상의 언어에서 같은 방식으로 작동합니다.
Neural Engine에서 도는 19 MB 모델
화자 분할은 ‘누가 언제 말했는가’를 세 단계로 찾습니다. 오디오를 음성이 있는 구간으로 나누고, 각 구간을 성문으로 바꿉니다. 성문은 말의 내용이 아니라 목소리 자체를 설명하는 작은 벡터입니다. 마지막으로 성문을 군집화해 같은 군집의 구간에 같은 라벨을 붙입니다.
Whisper Notes는 pyannote community-1 파이프라인을 Core ML로 변환해 두 단계를 모두 Neural Engine에서 실행합니다. 한 번만 받는 모델은 19 MB이고, M 시리즈 Mac에서 5.7분 길이의 대화를 처리하는 데 2–4초가 걸립니다.
오디오 → 음성 구간 → 성문 → 군집 → 라벨
모든 단계가 기기 안에서 실행됩니다.
이 점은 전사보다 화자 분할에서 더 중요합니다. 성문은 지문처럼 사람을 식별하는 생체 정보입니다. 로컬 파이프라인을 쓰면 사용자, 동료, 인터뷰 대상자의 성문은 기기에서 계산되고, 군집화된 뒤 폐기됩니다. 외부로 전송되지 않습니다.
측정 방법과 결과
화자 분할에는 고정된 오디오 파일 두 개를 씁니다. 정답 데이터는 클라우드 ASR·화자 분할 서비스인 ElevenLabs에서 만들고 사람이 확인했습니다. 10 ms 단위의 음성을 한 화자에게 배정하고, 출력과 정답 사이에서 가장 잘 맞는 매핑으로 채점합니다. 두 파일은 작은 벤치마크이므로 수치는 경향을 보여 줄 뿐, 결정적인 결론은 아닙니다.
첫 파일은 일반적인 조건입니다. 목소리가 뚜렷이 다른 두 사람이 말하는 5분짜리 영어 팟캐스트입니다. 대부분의 인터뷰, 팟캐스트, 일대일 회의가 이 조건과 비슷합니다.
| 2인 영어 팟캐스트(5분) | 결과 |
|---|---|
| 프레임 단위 화자 배정(10 ms 해상도) | 96.7% |
| 문장 단위 정확도(화면에서 읽는 결과) | 99.1% |
| 처리 시간, M 시리즈 Neural Engine | 2–4초 |
남은 0.9%는 세 군데의 경계 흔들림으로, 합계 3.4초입니다. 정답 데이터 자체의 해상도와 비슷한 수준입니다. 이런 오디오에서는 온디바이스 결과가 정답을 만든 클라우드 서비스와 맞먹었습니다.
어려운 사례
두 번째 파일은 일부러 어렵게 골랐습니다. 방 울림 속에서 비슷한 남성 목소리 두 명이 말하고, 진행자가 평균 2.3초씩 19번 짧게 끼어듭니다. 게스트는 272초, 진행자는 43초 동안 말합니다. 비슷한 목소리가 짧은 발화를 주고받는 이 음향 조건은 언어와 관계없이 화자 분할을 무너뜨립니다.
자동 군집화는 여기서 무너집니다. 두 성문이 너무 가까워 알고리즘이 하나로 합치고, 대화 대부분을 한 화자로 지정합니다. 이 녹음은 마침 중국어 인터뷰여서, 언어에 특화된 모델이라면 더 나을 것이라는 당연한 가설을 시험할 수 있었습니다. 중국어 음성으로 훈련한 화자 모델 두 개를 CPU 파이프라인에서 비교했습니다.
| 모델 | 영어 팟캐스트 | 난례* | 시간(5.7분 오디오) |
|---|---|---|---|
| pyannote community-1(현재 사용, Neural Engine) | 96.7% | 81–82% | 2–4초 |
| CAM++(중국어 훈련, CPU) | 93.9% | 81.2% | 36–103초 |
| ERes2NetV2(중국어 훈련, CPU) | — | 80.5% | 220–290초 |
* 난례 파일에서 화자 수를 지정했을 때의 프레임 단위 배정 정확도입니다. 지정하지 않으면 모든 모델이 한 화자 쪽으로 무너집니다.
두 모델 모두 10~100배의 연산을 쓰면서 같은 방식으로 실패했습니다. 어려움은 언어가 아니라 음향에 있습니다. 현재의 화자 임베딩이 무엇까지 구분할 수 있느냐가 한계이며, 이는 어떤 언어든 같습니다.
그래서 모델을 바꾸는 대신 파이프라인이 추론할 수 없는 사실, 즉 방 안에 몇 명이 있는지를 알려 주기로 했습니다. 메뉴에서 2~6명을 지정하면 난례가 붕괴 상태에서 문장 정확도 89%로 올라갑니다. 일반적인 오디오에서는 맞게 작동하므로 자동 감지는 기본값으로 유지합니다.
정확한 화자 수를 지정해 다시 감지합니다. 같은 메뉴에서 화자 라벨이 포함된 SRT와 VTT도 내보낼 수 있습니다.
짧은 끼어들기 보정
화자 수를 고정한 뒤에도 남은 오류의 절반가량은 3초 미만의 끼어들기에 있었습니다. 2초짜리 음성은 임베딩 모델이 얻을 신호가 적고, 빠른 대화에서는 인접한 화자의 소리까지 성문에 섞입니다.
그래서 군집화 후 3.5초보다 짧은 문장을 다시 봅니다. 해당 문장의 프레임만 가리는 마스크로 성문을 다시 계산하고, 각 화자의 앵커—가장 긴 발화들의 평균—와 비교해 차이가 확실할 때만 라벨을 바꿉니다. 기존 모델을 재사용하므로 추가 다운로드는 없습니다.
| 최종 문장 정확도 | 보정 전 | 보정 후 |
|---|---|---|
| 난례(화자 수 지정) | 89.0% | 94.8% |
| 영어 팟캐스트(자동) | 98.5% | 99.1% |
판단 기준은 보수적입니다. 두 파일에서 라벨 21개를 바꿨고, 새 오류는 하나도 생기지 않았습니다.
한계
• 라벨은 통화 중이 아니라 녹음이 끝난 뒤 나타납니다. 회의 도중 화자 이름이 붙는 실시간 자막이 필요하다면 Otter나 Notta 같은 클라우드 서비스가 알맞습니다.
• 여러 사람이 겹쳐 말하면 문장 하나에는 라벨 하나만 붙습니다.
• 비슷한 목소리는 여전히 어렵습니다. 난례의 94.8%는 화자 수 힌트를 줬을 때의 현재 상한이며, 문제가 해결됐다는 뜻은 아닙니다.
지원 버전
화자 식별은 $6.99 일회성 구매에 포함됩니다. 앱의 세 가지 전사 엔진인 Parakeet V3, Whisper Large V3 Turbo, SenseVoice와 로컬 AI 편집도 함께 제공됩니다. 별도 요금제나 계정은 없습니다.
• iPhone: App Store, 버전 1.8.5 이상.
• Mac App Store: 버전 1.3.2 이상.
• Mac 직접 다운로드(DMG): 버전 1.5.1 이상. whispernotes.app에서 무료 체험판을 받을 수 있습니다.
회의 녹음 자체의 작동 방식은 오프라인 회의 전사 글에서 확인할 수 있습니다.