Zettelkasten

WhisperX는 VAD로 청크 의존성을 제거해 배치 추론을 가능하게 한다

·수정 2026.05.04·수정 1

요약

  • WhisperX의 속도 이득은 단순한 "침묵 스킵"이 아니라 청크 간 의존성 제거로 인한 배치 추론 가능이 핵심이다
  • Vanilla Whisper는 이전 청크 텍스트를 다음 청크 prompt로 넘기기 때문에 순차 처리에 묶여 있다
  • VAD가 음성 구간을 미리 다 찾아두면 각 세그먼트는 독립 발화가 되어 GPU에 batch로 쌓을 수 있다

본문

Vanilla Whisper의 병렬화 제약

  • 오디오를 30초씩 슬라이딩 윈도우로 처리
  • 각 청크의 출력 텍스트가 다음 청크의 initial_prompt로 들어감 (condition_on_previous_text=True)
  • 청크 N+1의 입력이 청크 N의 출력에 의존 → 순차 의존성
  • 그래서 batch_size를 키울 수 없음

WhisperX가 병렬화되는 메커니즘

  1. VAD가 먼저 음성 구간을 다 찾음 → 처리할 청크 목록이 사전에 확정
  2. 각 VAD 세그먼트는 침묵으로 끊긴 독립 발화
  3. condition_on_previous_text=False로 청크 간 컨텍스트 전달 차단
  4. N개 세그먼트를 한 batch로 GPU에 올려 동시 forward (batch_size=16, 32...)

속도 이득의 출처 분해

순수 batching 효과            : GPU 활용률 ↑ (가장 큼)
침묵 스킵                    : 처리할 오디오 총량 감소
condition_on_previous=False  : 청크 간 독립성 확보 (배치의 전제조건)

large-v2 기준 70x 속도 보고는 이 세 가지의 합산 효과다. 단순히 VAD로 무음을 자른 것만으로는 이 정도 속도가 안 나온다.

트레이드오프

  • 청크 간 컨텍스트가 사라져 대명사 해석이나 30초 경계에 걸친 문장에서 약간 불리할 수 있음
  • 대신 wav2vec2 forced alignment로 단어 단위 타임스탬프 정밀 보정이 가능해 실용적 손실은 작음
  • VAD가 짧은 발화/속삭임을 놓치면 그 구간은 STT 자체가 누락됨

참고