본문으로 건너뛰기

© 2026 Molayo

Zenn헤드라인2026. 05. 15. 03:00

Whisper에 HPF를 적용했더니 일본어 음성 인식 정밀도가 개선되었다

요약

본 기사는 Whisper를 이용한 일본어 음성 인식 시, 노이즈 환경에서 발생하는 정밀도 저하 문제를 해결하기 위한 다양한 전처리 기법들을 비교 분석한 실험 보고서입니다. 그 결과, 100Hz 고역 통과 필터(HPF) 적용이 가장 효과적이었으며, 단순 정규화나 VAD/청킹 방식은 오히려 성능을 악화시키는 것으로 나타났습니다. 특히 Whisper 모델 자체가 내부적으로 세그먼트 처리를 수행하기 때문에, 외부에서 강제로 청크를 분할하거나 음성 활동 감지(VAD)를 적용하는 것은 문맥 정보 단절을 초래하여 인식 성능 저하의 원인이 될 수 있음을 시사합니다.

핵심 포인트

  • 노이즈 환경에서의 Whisper 일본어 음성 인식 정밀도 개선에 100Hz HPF가 가장 효과적이었다.
  • 단순한 Normalization이나 VAD, 고정/중첩 청크 방식은 이 특정 조건에서 성능을 악화시켰다.
  • Whisper는 내부적으로 세그먼트 처리를 수행하므로, 외부적인 청킹(chunking) 전처리는 문맥 정보 단절로 인해 오히려 인식 성능 저하를 유발할 수 있다.

서론

Whisper를 사용하여 일본어 음성 인식을 시도하던 중, 노이즈 환경에서 인식 정밀도가 상당히 악화되었습니다.

그래서 이번에는 다음과 같은 전처리를 비교하여 CER (Character Error Rate)을 평가해 보았습니다.

  • Normalization (정규화)
  • HPF (High Pass Filter, 고역 통과 필터)
  • VAD (Voice Activity Detection, 음성 활동 감지)
  • fixed chunk (고정 청크)
  • overlap chunk (중첩 청크)

결론부터 말하자면, 이번에 가장 효과가 있었던 것은 100Hz HPF였습니다.

반면, VAD나 chunking은 이번 조건에서는 오히려 성능이 악화되었습니다.

"효과가 없었던 기법"을 포함하여 흥미로운 결과를 얻었기에 기록으로서 정리합니다.

실험 환경

  • Python 3.13
  • openai-whisper
  • librosa
  • scipy
  • jiwer
  • silero-vad

Whisper model은 small을 사용했습니다.

model = whisper.load_model("small")

평가 지표

평가에는 CER (Character Error Rate)을 사용했습니다.

from jiwer import cer
error = cer(reference, hypothesis)

실험 대상

이하 2종류의 음성을 사용했습니다.

  • clean 음성
  • noisy 음성 (0dB 노이즈 부가)

Baseline

먼저 그대로 Whisper에 입력.

MethodCER
Clean0.060
Noisy0.148

노이즈로 인해 CER이 크게 악화되었습니다.

Normalization

먼저 단순한 Normalization을 시도했습니다.

y = y / np.max(np.abs(y))

하지만 결과는 거의 변화가 없었습니다.

MethodCER
Normalization0.148

단순한 음량 차이가 아니라, 노이즈 대역 자체가 문제라고 생각했습니다.

FFT 확인

FFT를 확인하니 100Hz 이하에 강한 저주파 성분이 존재하고 있었습니다.

그래서 100Hz HPF를 적용했습니다.

HPF

구현

from scipy.signal import butter, filtfilt
def highpass_filter(y, sr, cutoff=100):
nyquist = 0.5 * sr
...

HPF 결과

MethodCER
HPF (100Hz)0.114

CER 개선을 확인했습니다.

cutoff sweep

cutoff 주파수도 비교해 보았습니다.

cutoffCER
50Hz0.148
...
100Hz 부근이 가장 좋은 결과가 되었습니다.

200Hz 이상에서는 음성 성분까지 깎아버려, 반대로 성능이 악화된 것으로 생각됩니다.

Spectrogram 확인

Spectrogram도 확인했습니다.

FFT에서는 100Hz 이하의 성분 감쇠를 확인할 수 있었지만, Spectrogram에서는 육안상의 차이가 그렇게 크지는 않았습니다.

하지만 CER 개선이 확인되었기 때문에,

  • 인간에게는 알기 어려운 저주파 노이즈
  • Whisper 내부 특징량 (feature)에 대한 영향

이 존재했을 가능성이 있습니다.

VAD

다음으로 Silero VAD를 시도했습니다.

from silero_vad import (
load_silero_vad,
get_speech_timestamps
...

VAD 결과

MethodCER
VAD0.304

크게 악화되었습니다.

왜 악화되었는가?

이번 결과로부터 Whisper는 상당히 긴 문맥 의존형 모델임을 알 수 있었습니다.

VAD에 의해 발화 구간을 세밀하게 잘라낸 결과,

  • 문맥 정보의 단절
  • 단어 중간 절단
  • segment 분단

이 발생하여 인식 성능이 악화되었을 가능성이 있습니다.

fixed chunk

고정 길이 chunk도 시도했습니다.

  • 5초 chunk
  • 10초 chunk

등을 비교.

하지만 이번 조건에서는 개선되지 않았습니다.

MethodCER
Fixed Chunk0.358

overlap chunk

다음으로 overlap chunk (중첩 청크)도 시도했습니다.

예를 들어:

  • 0-10초
  • 8-18초
  • 16-26초

와 같이, 2초의 중복을 두었습니다.

overlap 결과

MethodCER
Overlap Chunk0.540

더욱 악화되었습니다.

원인은 chunk (청크) 간의 중복된 문장을 그대로 연결했기 때문이었습니다.

Whisper 표준 segment에 대하여

이번에 상당히 흥미로웠던 점은,

"Whisper 스스로가 내부에서 segment (세그먼트) 처리를 가지고 있다"

는 점입니다.

즉,

result = model.transcribe("audio.wav")

을 실행한 시점에서, Whisper 내부에서는 이미 segment 분할이 이루어지고 있습니다.

print(result["segments"])

로 확인 가능합니다.

이번 결과로부터,

  • Whisper 내부 segment
  • 외부 chunking (청킹)

이 경합하여 성능 악화를 초래했을 가능성이 있다고 생각합니다.

최종 결과

MethodCER
Clean0.060
...

요약

이번 실험에서는 다음 사항을 확인할 수 있었습니다.

  • 단순 Normalization (정규화)은 효과 없음
  • 저주파 노이즈에 대해 HPF (고주파 통과 필터)가 유효함
  • Whisper는 긴 문맥 의존성이 강함
  • 거친 chunking (청킹)은 성능을 악화시킴
  • overlap (중첩)에는 후처리가 필요함

특히,

"효과가 없었던 기법"

을 포함하여 확인할 수 있었던 점이 흥미로웠습니다.

AI 자동 생성 콘텐츠

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

원문 바로가기
1

댓글

0