KG-Whisper: 키워드 가이드(KG)를 통한 음성 인식(ASR) 최적화 구현 프로젝트 (feat. @hyuk님)

KG-Whisper 소개

OpenAI의 Whisper는 강력한 다국어 음성 인식 성능을 자랑하며 다양한 분야에서 널리 사용되고 있지만, 전문 도메인(의료, 법률, 금융 등)의 고유 명사나 특수한 용어를 정확하게 인식하는 데에는 여전히 한계를 보일 때가 많습니다. 범용적인 데이터셋으로 학습된 모델이 특정 산업군의 전문 용어를 접했을 때, 발음이나 문맥이 유사한 일반적인 단어로 잘못 예측하는 경우가 빈번하게 발생하기 때문입니다. 이러한 문제를 해결하기 위해서는 전체 모델을 재학습시키거나 파인튜닝(Fine-tuning)하는 방식이 주로 고려되지만, 이는 막대한 컴퓨팅 자원과 도메인 특화 데이터 구축 비용을 수반합니다.

이번에 @hyuk 님께서 공개하신 KG-Whisper 프로젝트는 이러한 한계를 매우 우아하고 효율적인 방식으로 극복하는 방법을 제시합니다. 이 저장소는 aiOla 연구진이 발표한 두 편의 최신 핵심 논문인 AdaKWS(Adaptive Keyword Spotting, arXiv:2309.08561)KG-Whisper-PT(Keyword-Guided Adaptation of ASR, arXiv:2406.02649)를 처음부터 성공적으로 재현한 오픈소스 프로젝트입니다. 사용자가 텍스트 형태로 된 키워드 목록을 제공하면, 이를 음성 인식 파이프라인에 동적으로 주입하여 모델이 특정 용어를 더 정확하게 출력하도록 가이드하는 것이 본 프로젝트의 핵심 목표입니다.

이 기술의 가장 큰 강점은 추가적인 대규모 파인튜닝 절차 없이도 제로샷(Zero-shot) 형태로 완전히 새로운 도메인에 즉시 적용할 수 있다는 것입니다. 음성 인식 시스템을 특정 도메인에 빠르게 이식해야 하는 소프트웨어 엔지니어나 연구자들에게 있어, 이 프로젝트는 시간과 자원을 크게 절약해줄 수 있는 매우 실용적이고 훌륭한 레퍼런스 코드가 될 것입니다.

기존 Whisper 베이스라인 모델과의 비교

일반적인 Whisper 모델과 KG-Whisper의 가장 결정적인 차이점은 사용자 정의 키워드 목록(Keyword List)의 활용 여부입니다. 기존의 Whisper 베이스라인 모델은 입력된 오디오 시그널과 모델 자체가 지닌 언어 모델 능력에만 의존하여 텍스트를 추론합니다. 예를 들어, 환자가 "I feel hurts in my heart"라고 말하는 의료 도메인의 음성 데이터가 주어졌다고 가정해 보겠습니다. 베이스라인 모델은 발음의 유사성과 일반적인 문맥 확률로 인해 이를 "i feel a horse in my hair"라는 완전히 엉뚱한 문장으로 해석하여 약 50%의 단어 오류율(WER)을 기록할 수 있습니다.

반면, KG-Whisper 파이프라인을 사용하면 [pain, hurts, heart, ear, infection, cough, fever] 등과 같은 도메인 예상 키워드 목록을 입력으로 함께 제공할 수 있습니다. 시스템은 오디오 스트림 내에서 이 지정된 키워드가 실제로 존재하는지 먼저 탐지하고, 확인된 키워드들을 Whisper 디코더의 생성 과정에 적극적으로 반영합니다. 그 결과, 모델은 막연한 추론 대신 "hurts"와 "heart"라는 단어가 발화되었음을 확신한 상태로 디코딩을 수행하므로, 원본 음성에 정확히 부합하는 "i feel hurts in my heart"라는 올바른 트랜스크립션을 생성해낼 수 있습니다.

KG-Whisper 구현 아키텍처 및 상세 내용

2단계(Two-Stage) 핵심 파이프라인

KG-Whisper는 성공적인 키워드 가이드 기반 음성 인식을 위해 매우 체계적인 두 단계의 파이프라인 거치게 됩니다:

첫번째 단계는 AdaKWS (오픈 보캐블러리 키워드 스포팅) 으로, 입력된 오디오와 키워드 리스트를 분석하여 어떤 키워드가 발화되었는지 찾아냅니다. Whisper Small 인코더의 음향적 특성, Character LSTM, 그리고 AdaIN(Adaptive Instance Normalization) 레이어를 결합하여, 사전에 정의되지 않은 임의의 단어도 동적으로 탐지할 수 있는 오픈 보캐블러리 구조를 채택했습니다.

다음으로는 KG-Whisper-PT (가이드 기반 텍스트 생성) 단계입니다. 여기에서는 프롬프트 튜닝(Prompt Tuning) 기법을 활용합니다. 무거운 파인튜닝 대신, 단 15K개의 파라미터만으로 구성된 12개의 학습된 프리픽스 벡터(Prefix Vectors)를 Whisper Large-v2 디코더에 주입합니다. 이를 통해 앞서 AdaKWS가 검출해낸 키워드 정보가 디코더에 자연스럽게 녹아들어, 해당 키워드를 포함하는 방향으로 최종 텍스트 생성을 유도합니다.

교차 도메인(Cross-Domain) 평가 및 주요 실험 결과

이 프로젝트의 실험 결과 중 가장 돋보이는 부분은 뛰어난 일반화 성능입니다. 프로젝트의 학습은 약 18,000개 샘플로 구성된 유럽 의회 연설 녹음 데이터셋인 VoxPopuli EN을 기반으로 이루어졌습니다. 그러나 진정한 성능은 전혀 파인튜닝을 거치지 않은 의료 도메인 음성 데이터셋(Medical ASR, 환자의 증상 설명 데이터)을 테스트했을 때 입증되었습니다.
작성자이신 @hyuk 님께서 재현한 실험 결과에 따르면, 키워드 탐지를 수행하는 AdaKWS 모델은 F1 스코어 96.17%를 달성하여 원본 논문이 제시한 수치(96.3%)를 거의 완벽하게 재현해 냈습니다. 전체 파이프라인을 적용했을 때도 베이스라인 대비 오류율(WER)이 유의미하게 감소하는 것을 확인했습니다. 최적의 성능을 얻기 위해서는 약 10개에서 50개 사이의 도메인 특화 키워드를 제공하는 것이 권장되며, 근본적으로 원본 오디오의 품질이 확보되어야 키워드 가이드 효과도 극대화될 수 있음을 보여줍니다.

KG-Whisper 설치 및 Gradio 데모 실행 방법

KG-Whisper 프로젝트는 최신 파이썬 패키지 관리자인 uv를 활용하여 매우 빠르고 간편하게 환경을 구축할 수 있도록 구성되어 있습니다. Python 3.9 이상 환경이 필요하며, 16GB 이상의 VRAM을 갖춘 CUDA GPU 환경이 가장 좋지만 Apple Silicon Mac(M1~M4)의 MPS(Metal Performance Shaders) 가속 환경도 완벽하게 지원합니다.

# 저장소 복제(clone) 및 uv를 활용한 가상환경 생성
git clone https://github.com/dhyuk54/kg-whisper.git
cd kg-whisper
uv venv
source .venv/bin/activate  # Windows의 경우 .venv\Scripts\activate 사용

# 프로젝트 및 의존성 패키지 설치
uv pip install -e .
uv pip install gradio soundfile datasets nltk scikit-learn


환경 구성 후, 제공된 구글 드라이브 링크에서 사전 학습된 모델 가중치 체크포인트데모용 오디오 데이터를 지정된 경로(kg_whisper/outputs/demo/)에 다운로드합니다. 그 다음 아래의 명령어로 Gradio 기반의 데모 웹 UI를 실행할 수 있습니다.

# CUDA 환경에서 데모 앱 실행
python -m demo.app \
    --device cuda \
    --adakws_checkpoint kg_whisper/outputs/adakws_v3/adakws_checkpoint_29000.pt \
    --whisper_pt_checkpoint kg_whisper/outputs/checkpoint_final.pt

로컬 호스트(http://localhost:7860)로 접속하면 데모 화면을 확인할 수 있으며, 베이스라인과 개선 결과를 직관적으로 비교하는 'Single Sample' 탭, 사용자가 직접 임의의 오디오와 커스텀 키워드 목록을 업로드하여 테스트할 수 있는 실무용 'Custom Keywords' 탭 등을 통해 전체 파이프라인의 위력을 직접 체험해볼 수 있습니다.

라이선스

KG-Whisper 프로젝트는 OpenAI의 Whisper 및 aiOla의 AdaKWS (Adaptive Keyword Spotting, arXiv:2309.08561),
KG-Whisper-PT (Keyword-Guided Adaptation of ASR, arXiv:2406.02649) 논문들을 기반으로 구축되었으며, 저장소의 코드는 MIT License로 공개 및 배포되고 있습니다.

:github: KG-Whisper 프로젝트 GitHub 저장소




이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

:pytorch:파이토치 한국 사용자 모임:south_korea:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)

:wrapped_gift: 아래:down_right_arrow:쪽에 좋아요:+1:를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ :star_struck:

3개의 좋아요