
화자 분리에서 정말 중요한 것은 '모델의 성능'이 아니라 'ASR의 발화 입도'였다 (SpeechAnalyzer의 일본어에서는 발화의 71%가
요약
화자 분리(Speaker Diarization)의 정밀도는 모델 성능보다 ASR(음성 인식)이 반환하는 발화의 입도(Granularity)에 더 큰 영향을 받습니다. ASR이 여러 화자의 발언을 하나의 발화로 묶어버리면 모델 성능과 관계없이 구조적 오귀속이 발생함을 실험으로 증명합니다.
핵심 포인트
- 화자 분리 정밀도는 ASR의 발화 구분 방식에 크게 의존함
- ASR이 발화를 뭉뚱그려 반환하면 모델 성능과 무관하게 오귀속 발생
- Apple SpeechAnalyzer 일본어 출력의 경우 발화의 71%가 복수 화자 포함
- ASR 교체만으로 화자 경계 분할 효과를 크게 개선 가능
결론
많은 사람은 화자 분리(Speaker Diarization)의 정밀도가 '모델의 성능'에 의해 결정된다고 생각합니다. 실제로 일본어 회의 음성으로 측정해 본 결과, 그 이상으로 효과가 있었던 요인이 따로 있었습니다. 바로 **음성 인식 (ASR)이 반환하는 발화의 입도(Granularity)**입니다.
ASR이 화자 교체를 가로질러 여러 발언을 하나의 발화로 묶어버리면, 화자 분리 모델이 아무리 우수하더라도 해당 발화의 소수파 화자는 구조적으로 오귀속(Misattribution)됩니다. 실측 결과, 이 기사의 온디바이스 ASR (Apple SpeechAnalyzer)의 일본어 출력에서는 발화 시간의 15.2%가 모델의 성능과 관계없이 구조적으로 오귀속되고 있었습니다.
그리고 중요한 점은, 이것이 '일본어라서' 발생하는 문제가 아니라 'ASR의 구분 방식'의 문제라는 점입니다. 동일한 음성을 faster-whisper에 통과시키면 이 구조적 오귀속은 1.0%까지 낮아집니다. 나아가 화자 분리 모델과 분할 알고리즘을 전혀 바꾸지 않고 ASR만 교체했을 때, 화자 경계에서의 발화 분할 효과는 +9.2pt에서 −0.9pt로 반전되었습니다. 분할이라는 후처리가 효과가 있을지는 분리 모델이 아니라 ASR의 발화 입도가 결정하는 것입니다.
이 기사에서는 이러한 발견에 이르게 된 경위와, 기존의 분할 기법(단어 간격 기준)이 왜 SpeechAnalyzer의 일본어에서는 기능하지 않았는지에 대해 설명합니다.
1. 「이 발화는 누가 말했는가」라는 질문이 ASR의 구분 방식에 따라 성립하지 않을 수 있다
화자 분리 태스크는 일반적으로 「이 시간대에 말하고 있는 사람은 누구인가」를 맞히는 문제로 설계되어 있습니다. 많은 벤치마크나 OSS (pyannote 계열 라이브러리 등)도 이 프레임워크 안에서 정밀도를 경쟁하고 있습니다.
여기서 암묵적인 전제가 되고 있는 것은 음성 인식 (ASR)이 반환하는 발화의 구분은 화자의 교체와 대략 일치한다는 점입니다. ASR이 발화를 세밀하게 구분하는 경우, 이는 대체로 성립합니다.
A: OK.
B: Let's start.
과 같은 대화를 ASR이 성실하게
발화 1: "OK."
발화 2: "Let's start."
라고 나누어 반환해 준다면, '하나의 발화에는 한 명의 화자'라는 전제가 무너지지 않습니다. 화자 분리 모델은 「이 발화는 누구인가」만을 생각하면 되며, 모델의 임베딩(Embedding) 정밀도나 클러스터링(Clustering) 정밀도를 개선하면 그대로 제품의 정밀도 개선으로 직결됩니다.
하지만 ASR에 따라서는 그렇지 않습니다. 이번에 이 앱이 사용하고 있는 온디바이스 ASR (Apple SpeechAnalyzer)의 일본어 출력에서는,
A: 그럼 부탁드립니다.
B: 네.
A: 다음은...
과 같은 짧은 주고받기가 하나의 발화로 묶여버리는 일이 빈번하게 발생합니다. 이 경우 화자 분리 모델이 아무리 우수하더라도, 「이 발화는 누구인가」라는 질문 자체가 여러 개의 정답을 가지게 되어 성립하지 않게 됩니다.
2. 실제로 측정해 본 결과: 발화의 입도를 결정하는 것은 '언어'가 아니라 'ASR'이다
먼저 SpeechAnalyzer의 일본어 출력을 측정해 보았습니다. 일본어 회의 음성 (4명 화자, 19분, 정답 발화 수 161개)을 적용한 결과, 반환된 발화 수는 불과 93개였습니다.
복수 화자를 포함하는 ASR 발화: 66/93 = 71%
- ASR 발화 1개당 평균 화자 수: 1.78명
예를 들어, 다음과 같은 발화가 묶여서 하나로 취급되고 있었습니다.
「…이 방향성으로 진행합시다. 알겠습니다.」→ 실제로는 3명의 발언
「…끌려가 버린 사례입니다. 그렇군요…」→ 실제로는 2명의 발언
분할하지 않고 「시간적 중첩이 가장 큰 화자를 하나만 할당하는」 방식으로 처리하면, 이 혼재된 발화의 소수파 측 화자는 구조적으로 반드시 오귀속됩니다. 실측 결과, 발화 시간 전체의 15.2%가 오귀속된다는 결과가 나왔습니다.
이것은 「일본어라서」가 아니라 「이 ASR라서」 발생하는 문제
여기서 중요한 것은 이 거친 정도가 언어의 특성이 아니라 ASR의 구분 방식의 특성이라는 점입니다. 완전히 동일한 일본어 음성을 다른 ASR (faster-whisper)에 통과시키자 결과가 크게 바뀌었습니다.
| ASR / 언어 | ASR 발화 수 | 복수 화자 혼재 | 분할 없는 구조적 오귀속 |
|---|---|---|---|
| SpeechAnalyzer / 일본어 | 93 | 71% | 15.2% |
| SpeechAnalyzer / 영어 | 205 | 47% | 5.1% |
| faster-whisper / 일본어 | 278 | 12% | 1.0% |
동일한 일본어 음성이라도, SpeechAnalyzer에서는 15.2%, faster-whisper에서는 1.0%로, 화자 분리 모델을 전혀 바꾸지 않고 ASR만 변경했을 뿐인데 구조적 오차가 15배 차이 났습니다. 즉, "일본어 발화가 거친 것"이 아니라, **"SpeechAnalyzer의 일본어 출력이 거친 것"**이 정확한 표현입니다. faster-whisper는 일본어에서도 발화를 세밀하게 나누기 때문에 이 문제는 거의 발생하지 않습니다.
(참고로 영어에서는 SpeechAnalyzer도 세밀하게 나누기 때문에, 복수 화자 혼재가 47% 있더라도 그 대부분은 경계가 짧은 맞장구(backchannel)를 포함하는 정도에 그치며, 오귀속(misattribution)은 5.1%입니다.)
분할이 효과가 있는지도 ASR이 결정한다
더 깊이 들어가서, 화자 분리 모델과 분할 알고리즘도 고정한 채 ASR만 교체해 보았습니다. 분리 모델은 최신 pyannote community-1, 분할은 "화자 경계에서 나누는" 방식으로 고정했습니다.
| ASR (분리 모델·분할 방식 고정) | 분할 없음 | 분할 있음 | 분할 효과 |
|---|---|---|---|
| SpeechAnalyzer (거침) | 15.15% | 5.93% | +9.2pt |
| faster-whisper (세밀함) | 3.10% | 4.00% | −0.9pt |
동일한 모델과 동일한 분할 알고리즘임에도 불구하고, ASR을 바꾸는 것만으로 분할이 "거의 필수(+9.2pt)"인 세계와 "해도 무의미(−0.9pt)"인 세계로 나뉘었습니다.
이것이 이번의 가장 큰 발견입니다. 화자 경계에서의 발화 분할이라는 후처리가 효과가 있을지는 화자 분리 모델이 아니라, 그 전 단계인 ASR이 얼마나 세밀하게 발화를 나누느냐에 따라 결정됩니다. ASR이 거친 시스템(즉, 이 앱의 SpeechAnalyzer)에서는 분할이 본질적으로 효과가 있고, ASR이 세밀한 시스템에서는 분할이 나설 차례가 없는 것입니다.
이 15.2%(또는 분할로 회복 가능한 +9.2pt)라는 숫자는 화자 분리 모델 간의 정밀도 차이(수 % 정도)를 가볍게 상회하는 규모입니다. 모델을 아무리 개선해도 ASR이 거친 상태라면 이 오차는 사라지지 않습니다.
3. "분할"이라는 발상 자체는 사실 새롭지 않다
여기서 솔직하게 보충해 두고 싶은 점이 있습니다. "ASR 발화를 화자 경계로 분할한다"는 발상 자체는 사실 새로운 것이 아닙니다.
이 기사에서 사용 중인 베이스 분리 엔진인 SpeakerKit(Argmax사의 WhisperKit에 포함된 컴포넌트)에는 화자 분리 결과를 전사(transcription)에 할당하는 표준 전략으로서 .subsegment (기본 설정)라는 모드가 이미 마련되어 있습니다. 이는 "단어 사이의 무음 간격(silence gap)으로 발화를 분할한 뒤, 각각에 화자를 할당하는" 전략입니다. 유사한 개념은 WhisperX의 assign_word_speakers (단어 단위로 화자를 할당하는 기능) 등 다른 도구에서도 찾아볼 수 있습니다. 즉, "분할한다"는 발상 그 자체는 업계에서 이미 알려진 표준적인 수법입니다.
문제는 이 표준적인 분할 방법이 SpeechAnalyzer의 일본어 출력에서는 작동하지 않는다는 점이었습니다.
이를 확인하기 위해, 동일한 SpeakerKit의 원시 분리 결과에 대해 세 가지 처리 방식을 적용하여 비교했습니다.
| 방식 (동일한 SpeakerKit 원시 분리 결과에 적용) | WDER | 분할 발생 횟수 |
|---|---|---|
| ① 분할 없음 (발화 단위 다수결) | 15.36% | — |
② 표준 .subsegment (단어 간격 기준) | 15.53% | 0회 |
| ③ 화자 경계 (임베딩) 기반 분할 | 4.06% | — |
결과는 명확했습니다. 표준 .subsegment 전략은 이 회의 음성에서 단 한 번도 분할을 일으키지 못했습니다. 정밀도 또한 분할 없음과 거의 비슷했습니다(오히려 약간 악화되었습니다).
이유는 이 전략이 전제로 하는 "단어와 단어 사이의 무음 간격" 자체가 SpeechAnalyzer의 일본어 출력에는 존재하지 않기 때문입니다. SpeechAnalyzer가 반환하는 일본어 단어(형태소 미만의 문자 단위)는 거의 틈새 없이 연속되어 있으며, 게다가 화자가 교체되는 순간 그 자체에 무음이 없는 경우가 많습니다(이것이야말로 애초에 ASR 발화가 복수 화자에 걸쳐 버리는 원인이었습니다). "무음 간격을 찾는다"는 설계는 찾아야 할 간격이 존재하지 않는 출력에 대해서는 원리적으로 작동하지 않습니다.
반면, 단어 간격(word gap)이 아니라 화자 분리 모델의 임베딩(embedding)이 나타내는 화자 경계 그 자체를 분할 기준으로 전환하자, WDER은 4.06%까지 개선되었습니다. 표준 전략 대비 약 11포인트 개선된 수치입니다. 여기에 파이프라인 설계의 실질적인 가치가 있습니다.
즉 정확히 말하자면, "기존 OSS가 이 문제를 방치하고 있었다"가 아니라, **"기존의 표준적인 분할 기법이 의존하는 신호(음향적인 무음 간격)가, 거친 ASR의 일본어 출력에서는 성립하지 않는다"**는 것입니다. 분할 그 자체가 아니라, 무엇을 단서로 분할할 것인가가 결정적으로 중요했습니다.
4. 「분할의 효과」를 모델의 정밀도와 분리하여 측정하기
이 "발화를 분할한다"는 설계의 효과를 화자 분리 모델 자체의 정밀도와는 분리하여 측정했습니다. 단어(토큰)마다 올바른 화자가 할당되어 있는지를 보는 **WDER (Word Diarization Error Rate)**이라는 지표를 사용하여, "분할이 있을 때의 정밀도"와 "분할이 없을 때(발화 단위로 다수결)의 정밀도"를 비교했습니다 (ASR은 모두 SpeechAnalyzer).
| 기법 | 분할 있음 | 분할 없음 | 분할의 효과 |
|---|---|---|---|
| 발화 분할이 포함된 파이프라인 | 2.12% | 15.36% | +13.2pt |
| FluidAudio | 11.43% | 21.00% | +9.6pt |
둘 다 발화를 분할하는 것만으로 크게 개선되었습니다 (+13.2pt / +9.6pt). SpeechAnalyzer의 일본어의 경우, ASR 발화를 그대로 처리 단위로 삼으면 모델의 성능과 관계없이 1할 이상의 오귀속(misattribution)이 발생하기 때문에, 그만큼이 통째로 회복되는 형태입니다.
한편, 분할만 하면 된다는 뜻은 아닙니다. 마찬가지로 분할을 하더라도 FluidAudio는 11.43%에 그쳐, 발화 분할이 포함된 파이프라인(2.12%)에는 미치지 못합니다. 다만 이 두 행은 사실 베이스가 되는 분리 모델이 다릅니다 (이 기사의 파이프라인과 FluidAudio). 차이를 분석하면 다음 두 가지 요인으로 나뉩니다.
- 베이스 분리 품질의 차이: 완전히 동일한 "임베딩 경계에서의 분할"을 적용해도, 이 기사의 베이스는 4.06%, FluidAudio는 11.43%로 차이가 납니다 (동일 카테고리 내에서도 구현 및 벤더에 따라 품질 차이가 있음).
- 그 이후 후처리(post-processing)의 차이: 이 기사의 파이프라인은 여기에 미검출 구간의 재탐색 등을 더하여 4.06% → 2.12%까지 낮추었습니다.
즉 분할은 효과가 큰 한 수이지만, 그것 단독이 아니라 베이스 분리 품질 · 분할 · 후처리가 맞물려야 비로소 효과를 발휘한다는 것입니다.
5. 사용 중인 분리 모델 자체는 사실 기성 제품
여기서 솔직하게 보충해 두고 싶은 점이 있습니다. 위 비교에서 사용한 화자 분리의 베이스 모델은 독자적으로 개발한 것이 아닙니다. 실체는 SpeakerKit (Argmax사의 WhisperKit에 포함된 컴포넌트)로, "pyannote의 음성 구간 검출(VAD) + WeSpeaker의 화자 임베딩"이라는 온디바이스(on-device) 구현입니다. 비교 대상으로 사용한 FluidAudio (FluidInference사) 역시 CoreML을 이용한 온디바이스 구현입니다. 양자 모두 동일한 기술 카테고리 (pyannote 계열의 화자 구간 검출 + 화자 임베딩)에 속하는 구현입니다. 다만 모델의 세대나 구현의 세부 사항은 다르며, 이것이 4장에서 본 베이스 분리 품질의 차이로 이어지고 있습니다.
즉, 이 기사에서 보여준 우위의 정체는 "독자적인 우수한 모델을 개발했다"는 것도, "분할이라는 발상을 독자적으로 생각해냈다"는 것도 아닙니다. 분할의 기준을 기존의 표준 기법이 사용하는 "음향적인 무음 간격"에서 "화자 분리 모델의 임베딩이 나타내는 화자 경계"로 전환한 것에 있습니다. 이 설계는 실제로 iPhone용 받아쓰기 앱인 「폭속 문자 받아쓰기(爆速文字おこし)」 내에서 음성 데이터를 전혀 서버로 보내지 않고 단말기 상에서 동작하고 있습니다.
6. 요약: 효과를 결정짓는 것은 모델이 아니라 ASR의 발화 입도
이번 검증을 통해 알 수 있었던 것은, 화자 분리 제품의 정밀도는 "모델의 정밀도"만으로 결정되지 않으며, 그 전 단계인 ASR이 얼마나 세밀하게 발화를 나누느냐에 강하게 의존한다는 것입니다.
ASR이 발화를 세밀하게 나누는 시스템(영어의 SpeechAnalyzer, 일본어의 faster-whisper 등)에서는 '1발화 1화자'라는 전제가 거의 유지되기 때문에, 화자 분리 (Speaker Diarization) 모델 단체만으로도 높은 성능을 얻을 수 있으며 화자 경계에서의 분할은 거의 쓰일 일이 없습니다. 반면, ASR이 여러 화자의 발화를 하나로 묶어버리는 시스템(이 앱이 단말기 상에서 사용하는 일본어 SpeechAnalyzer)에서는 그러한 오귀속(Misattribution) 문제를 모델만으로는 해결할 수 없으며, 화자 경계에서의 분할이 본질적으로 효과를 발휘하게 됩니다.
따라서 실무적인 교훈은 다음과 같습니다. 화자 분리 모델을 개선하기 전에, 먼저 자신의 ASR이 어느 정도의 입도 (Granularity)로 발화를 반환하고 있는지 확인해야 합니다. ASR이 충분히 세밀하게 나누는 시스템에서는 화자 경계에서의 발화 분할이 거의 효과가 없습니다. 반면, 거친 발화를 반환하는 시스템에서는 동일한 분리 모델을 사용하더라도 10포인트 가까운 개선 여지가 생깁니다. 즉, 분할이라는 후처리 (Post-processing)를 채택할지 여부는 화자 분리 모델이 아니라 ASR의 설계에 의해 결정된다——이것이 이번에 얻은 설계상의 교훈입니다.
그리고 막상 분할을 수행할 때도, 업계 표준인 '단어 간의 무음 간격 (Silence gap)'을 기준으로 하는 방식은 SpeechAnalyzer의 일본어처럼 틈 없이 연속되는 출력에서는 작동하지 않습니다. 무음 간격이 아니라 화자 경계 (Embedding)를 기준으로 한 분할이 그곳에서는 결정적으로 중요해집니다.
참고로, 당초 이 검증에서 비교 대상으로 사용했던 WhisperX는 일본어에서 크게 무너졌습니다 (화자 할당률 62.8%). 이후 그 원인을 분석해 본 결과, 주된 원인은 WhisperX 자체도, 화자 분리 모델도, faster-whisper도 아닌, 화자를 '약 26초의 ASR 세그먼트 단위'라는 거친 입도로 할당하고 있었다는 점이었습니다. 이는 정확히 본 기사의 '할당 입도가 지배한다'는 주장의 실례이며, 단어 단위로 읽으면 화자 할당률은 ~96% (이 파이프라인과 거의 동등한 수준)까지 회복됩니다. 이 원인 규명에 대해서는 별도의 기사에 정리했습니다.
이 설계에 이르기까지의 시행착오(무음 간격으로의 스냅, 형태소 단위 분할, 짧은 파편의 흡수, 클러스터 통합 등)와 평가 지표의 선택 방법, 측정 방법 자체의 실패담에 대해서는 구현 편에서 정리할 계획입니다.
관련 기사
화자 분리는 '어느 입도로 화자를 할당할 것인가'가 정밀도를 결정한다——WhisperX 일본어 검증에서 보인 것 (OSS 검증 편) -
【구현 편】ASR 발화를 화자 경계로 분할하는 파이프라인 구축 방법과 검증 수법 (구현 및 평가 방법의 상세)
Discussion

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기