본문으로 건너뛰기

whisper-diarization: 누가 언제 말했는지까지 구분하는 Whisper 기반 화자 분리 ASR

정석

음성 인식(ASR)은 이제 흔해졌다. OpenAI Whisper, Faster Whisper, 인사이트팩트 Whisper 같은 고품질 STT 엔진이 많아지면서 “음성을 텍스트로 바꾸는 것” 자체는 어렵지 않다. 하지만 누가 언제 말했는지까지 구분하는 것은 완전히 다른 난이도의 문제다.

whisper-diarization은 이 문제를 해결하는 오픈소스 파이프라인이다. OpenAI Whisper의 전사 능력과 NVIDIA NeMo의 화자 인식 기술을 결합해, 회의록 전사, 인터뷰 분석, 팟캐스트 자막 등 실제 프로덕션 유즈케이스에서 필요한 화자 분리(Speaker Diarization) 를 구현한다. GitHub에서 5,530개의 스타를 받은 프로젝트로, BSD-2-Clause 라이선스로 공개되어 있다.

이 글에서는 whisper-diarization의 파이프라인, 기술 스택, 실제 사용법, 그리고 한계점까지 살펴본다.

6단계 파이프라인: 단순 전사를 넘어서

whisper-diarization의 가장 큰 강점은 6단계의 조율된 파이프라인이다. 단순히 Whisper를 돌리고 NeMo를 붙이는 수준이 아니라, 각 단계가 이전 단계의 한계를 보완하도록 설계되어 있다.

whisper-diarization 파이프라인 다이어그램

① 음원 분리 — Demucs

Facebook Research의 Demucs를 사용해 배경음악과 노이즈를 제거하고 보컬만 분리한다. 화자 임베딩(Speaker Embedding)의 정확도는 배경 노이즈에 민감하기 때문에, 이 전처리 단계가 전체 파이프라인의 품질을 좌우한다. --no-stem 플래그로 이 단계를 건너뛸 수 있다.

② Whisper ASR

Faster Whisper 기반으로 음성을 텍스트로 전사한다. 기본 모델은 medium.en이지만, --whisper-model 옵션으로 다른 크기의 모델을 선택할 수 있다. GPU 메모리에 따라 large-v3 같은 더 정확한 모델도 사용 가능하다.

③ 타임스탬프 보정 — ctc-forced-aligner

Whisper의 타임스탬프는 생각보다 정확하지 않다. 화자 전환 시점이 Whisper가 출력한 타임스탬프와 실제 발화 시점 사이에 미세한 차이가 발생하는데, 이 차이가 화자 분리 오류로 이어질 수 있다. ctc-forced-aligner가 이 차이를 보정해 준다.

④ VAD & 분할 — MarbleNet

NVIDIA NeMo의 MarbleNet으로 Voice Activity Detection(VAD)을 수행한다. 묵음 구간을 제거하고 발화 구간을 분할해, 화자 식별이 필요한 세그먼트만 남긴다.

⑤ 화자 임베딩 — TitaNet

같은 NeMo 제품군의 TitaNet이 각 세그먼트의 화자 임베딩을 추출한다. 이 임베딩을 바탕으로 “이 세그먼트는 화자 A, 이 세그먼트는 화자 B”라는 식의 식별이 이루어진다.

⑥ 매칭 & 재정렬

보정된 타임스탬프와 화자 정보를 매칭하고, 구두점 모델(Punctuation Model)로 최종 전사문을 재정렬한다. 최종 출력은 “화자 A: 내용… [00:01:23]” 형태의 타임스탬프가 포함된 구조화된 전사문이다.

설치와 사용

설치는 비교적 간단하다. Python 3.10 이상, FFMPEG, Cython이 선행 조건이다.

pip install cython
pip install -c constraints.txt -r requirements.txt

실행:

python diarize.py -a audio_file.wav

VRAM이 10GB 이상이면 diarize_parallel.py를 사용해 Whisper와 NeMo를 병렬로 실행할 수 있다. 두 모델이 서로 독립적이기 때문에 가능한 방식으로, 처리 시간을 크게 단축시킨다.

주요 CLI 옵션:

옵션설명
-a AUDIO_FILE_NAME처리할 오디오 파일
--no-stem음원 분리 비활성화
--whisper-modelASR 모델 선택 (기본: medium.en)
--suppress_numerals숫자를 문자로 표기 (정렬 정확도 향상)
--device사용할 디바이스 (기본: CUDA)
--language언어 수동 지정
--batch-size배치 추론 크기

왜 이 조합인가: 기술적 판단의 이해

whisper-diarization의 기술 스택은 각 구성요소가 시장에서 검증된 것들이다:

각 구성요소가 단일 공급업체에 종속되지 않고 최고의 조합을 선택한 점이 인상적이다.

한계점

가장 큰 기술적 한계는 중첩 발화(Overlapping Speakers) 다. 여러 사람이 동시에 말하는 상황에서는 현재로썸 해결되지 않았다. README에서도 “오디오를 분리해 한 화자만 남긴 후 파이프라인에 다시 입력하는 방식”을 제안하지만, 이는 계산 비용이 크게 증가한다.

또한 GPU 메모리 요구사항이 상당하다. 병렬 모드를 사용하려면 최소 10GB VRAM이 필요하고, 실제로는 16GB 이상을 권장한다. CPU-only 환경에서는 제한적으로만 사용 가능하다.

마치며

whisper-diarization은 “ASR + 화자 분리”라는 구체적인 문제에 대한 실용적인 해법을 제공한다. 단순히 여러 모델을 붙여놓은 것이 아니라, 각 단계의 한계를 인식하고 보정하는 구조로 설계된 점이 돋보인다. 5.5K 스타와 500개 이상의 포크는 이 접근법이 실무에서 유효하다는 증거다.

회의록 자동 전사, 팟캐스트 자막 생성, 인터뷰 분석 등 화자 구분이 필요한 ASR 작업이 있다면, whisper-diarization은 가장 쉬운 출발점이 될 것이다.

참고: Colab 노트북도 제공되므로, GPU가 없는 환경에서도 일단 체험해볼 수 있다.

참고 자료

이전
GitHub Trending Daily: 코드 이해·스킬 패키징·컨텍스트 유지가 다시 전면에 섰다
다음
GitHub Trending Daily — 2026-05-26: 코드 이해와 스킬 파일이 차트를 다시 밀어올렸다