dev.Log

ECNR이 뭐길래 STT 성능을 좌우할까 본문

인공지능

ECNR이 뭐길래 STT 성능을 좌우할까

초코푸딩 2025. 12. 30. 10:33

— Whisper 이전에 반드시 알아야 할 음성 전처리 이야기

요즘 STT(음성 인식)를 이야기하면 Whisper 같은 End-to-End 모델이 거의 기본처럼 언급된다.
“이제 모델이 다 알아서 하니까, 전처리는 중요하지 않은 거 아닌가?”라는 말도 종종 들린다.

하지만 실제 서비스 환경에서 Whisper를 써본 사람이라면 금방 알게 된다.
모델보다 먼저 고민해야 할 게 있다는 걸.

바로 ECNR이다.


ECNR이란?

**ECNR(Echo Cancellation & Noise Reduction)**은
음성 인식이나 통신 시스템에서 마이크 입력을 정제하기 위한 전처리(Audio Front-End) 기술 묶음이다.

단일 알고리즘이 아니라, 보통 다음 기능들이 함께 동작한다.

  • AEC (Acoustic Echo Cancellation) : 에코 제거
  • NR (Noise Reduction) : 잡음 제거
  • AGC (Automatic Gain Control) : 음량 자동 조절
  • VAD (Voice Activity Detection) : 발화 구간 판단

즉, ECNR은

“STT 모델이 잘 인식할 수 있는 음성으로 만들어주는 과정”이다.


왜 ECNR이 중요한가?

STT 모델은 기본적으로 **‘사람 음성만 들어온다’**는 전제 하에 학습된다.
하지만 실제 입력은 전혀 그렇지 않다.

  • 스피커에서 나온 소리가 다시 마이크로 들어오고
  • 키보드 소리, 에어컨 소음이 섞이고
  • 무음 구간이 길게 이어진다

이 상태의 음성을 그대로 Whisper에 넣으면 어떤 일이 생길까?


ECNR 없이 Whisper를 쓰면 생기는 문제

1. Echo 문제 (가장 치명적)

스피커폰이나 회의 환경에서
Whisper는 상대방 음성이나 자기 음성의 반사를 발화로 착각한다.

실제 발화:

 
“회의 시작합시다”

Whisper 결과:

 
“회의 시작합시다 회의 시작합시다 네 회의 시작합시다”

이건 모델 성능 문제가 아니다.
에코 제거가 안 된 입력 문제다.


2. Noise로 인한 인식 불안정

Whisper는 잡음에 어느 정도 강하지만, 한계가 있다.

  • 단어 누락
  • 문장 중간 끊김
  • 의미 없는 토큰 생성

특히 실시간 스트리밍 환경에서는 잡음이 모델 attention을 흔든다.


3. VAD 부재로 인한 반복 출력

무음 구간에서도 디코딩을 계속하면
Whisper는 “뭔가 말해야 할 것 같아서” 토큰을 생성한다.

이른바 hallucination 또는 반복 출력 문제다.


그래서 ECNR이 필요하다

ECNR은 Whisper를 “더 똑똑하게” 만드는 기술이 아니다.
Whisper가 제대로 일할 수 있는 환경을 만들어주는 기술이다.

실무에서 권장하는 ECNR 기본 설정은 보통 다음과 같다.


Whisper 기준 ECNR 권장 설정

  • AEC: ON (필수)
  • NR: Moderate
  • AGC: Soft
  • VAD: Conservative
  • Output: 16kHz / mono / PCM

이 설정들이 의미하는 바를 간단히 풀어보자.


AEC: ON (필수)

에코는 Whisper의 최대 적이다.
스피커 출력이 있는 환경이라면 AEC는 선택이 아니라 필수다.

Echo를 제거하지 않으면:

  • 반복 인식
  • 상대방 음성 인식
  • 문장 붕괴

가 발생한다.


NR: Moderate

잡음을 “완전히 없애는 것”이 목표가 아니다.

NR을 과하게 걸면:

  • 자음(특히 고주파) 손실
  • 음성 왜곡
  • 오히려 WER 상승

Whisper는

약간 시끄러운 음성은 괜찮지만, 왜곡된 음성은 싫어한다.


AGC: Soft

AGC는 볼륨을 평탄화하는 기능이다.

너무 강하면:

  • 호흡 소리 증폭
  • 잡음까지 같이 증폭
  • 발화 끝나고도 gain 유지

Soft AGC는
“위험한 레벨만 살짝 보정하는 안전장치” 정도가 적당하다.


VAD: Conservative

VAD가 공격적이면 말이 잘린다.

  • “합니다” → “합니”
  • 짧은 발화 누락

STT에서는

조금 남기는 게, 잘라내는 것보다 낫다.


Output: 16kHz / mono / PCM

Whisper는 16kHz mono PCM 기준으로 학습되었다.

  • 스테레오 → 의미 없음
  • MP3/Opus → 추가 왜곡

ECNR 결과는 항상 raw PCM으로 전달하는 게 정석이다.


WebRTC와 ECNR

실무에서 ECNR을 이야기하면
대부분 WebRTC Audio Processing Module을 기준으로 한다.

WebRTC에는:

  • 검증된 AEC
  • 저지연 NR
  • AGC / VAD
    가 모두 포함되어 있다.

그래서 실제 구조는 보통 이렇게 된다.

 
Mic / Stream ↓ WebRTC ECNR (AEC + NR + AGC + VAD) ↓ 16kHz mono PCM ↓ Whisper

ECNR이 필요 없는 경우도 있을까?

있다.

  • 단일 화자
  • 헤드셋 사용
  • 매우 조용한 환경
  • 녹음 파일 기반 배치 처리

즉,

연구 / 데모 / 오프라인 분석 → ECNR 없이도 가능
실시간 서비스 / 스피커 환경 → ECNR 필수


마무리

요즘 STT 모델은 정말 강력해졌다.
하지만 모델이 강해질수록 입력 품질의 중요성은 줄어들지 않는다.

오히려 반대다.

STT 성능 문제의 상당수는
모델이 아니라 ECNR 설정에서 시작된다.

Whisper를 쓰고 있다면,
모델 사이즈를 키우기 전에 ECNR부터 점검해보자.

Comments