음성 인식 모델을 위한 ASR 바이어스 구현 방법 [오픈 소스]
How I implemented ASR bias for voice transcription models [Open Source]
핵심 요약
오픈 소스 음성 받아쓰기 앱 'Freestyle'에서 ASR 바이어스 기능을 구현하는 방법을 공유합니다.
- ASR 바이어스 — 특정 단어나 구문을 모델에 미리 알려주어 인식 정확도를 높이는 기법임
- 구현 방식 — OpenAI, Groq 등은 시스템 프롬프트에 단어를 주입하는 방식으로 간단히 구현됨
- Freestyle 프로젝트 — 로컬에 저장된 어휘를 추론 시마다 모델에 주입하는 오픈 소스 음성 받아쓰기 앱임
- 커뮤니티 모집 — 오픈 소스 음성 받아쓰기 개발에 관심 있는 기여자들을 찾고 있음
지난 몇 주 동안 Wispr Flow 클론을 오픈 소스 프로젝트로 만드는 데 시간을 쏟았어. 배경 설명을 좀 하자면, 이건 직접 타이핑하는 대신 말로 해서 더 빠르게 글을 쓸 수 있게 해주는 음성 받아쓰기 앱이야.
첫 주는 기본적인 STT 기능을 만드는 데 썼어. Wispr Flow의 가장 쩌는 기능 중 하나가 바로 ASR biasing인데, Wispr Flow에서는 이걸 '사전(dictionary)'이라고 부르더라고. 내 프로젝트에 이걸 어떻게 구현했는지 알아냈고, 그 방법을 공유하려고 해.
ASR biasing이 뭔데?
ASR biasing은 모델한테 단어 철자나 자주 쓰는 문구에 대한 힌트를 줘서 받아쓰기를 유도하는 기술이야. 영상 속 내 예시를 보면, 내가 "Knicks"랑 "OG Anunoby"에 대해 말하고 싶다고 가이드를 줬거든.
이렇게 biasing을 설정해두면, 비슷한 발음의 문장을 말할 때 설정해둔 단어들이 결과값으로 나올 확률이 훨씬 높아져.
코드로 어떻게 구현하냐고?
ASR biasing 구현하는 거 사실 엄청 쉬워. 모델 제공업체마다 방식도 다르고 부르는 이름도 제각각이거든. 예를 들어, OpenAI나 Groq는 LLM 시스템 프롬프트랑 비슷하게 프롬프트를 설정해서 bias 메커니즘으로 써. whisper.cpp나 MLX를 사용하는 로컬 Mac 모델들도 똑같은 프롬프트 시스템을 사용하고.
Deepgram이나 Eleven Labs 같은 다른 업체들은 이걸 'key terms'라고 부르고, 검색 파라미터로 설정하게 되어 있어.
Groq에서 구현하면 이런 식이야. 그냥 모델의 "system prompt"에 사전 단어들을 집어넣기만 하면 끝임.
const transcription = await groq.audio.transcriptions.create({
file: fs.createReadStream("YOUR_AUDIO.wav"),
model: "whisper-large-v3-turbo",
prompt: "vocabulary: Knicks, OG Anonuby", // Optional
response_format: "verbose_json",
timestamp_granularities: ["word", "segment"],
language: "en",
temperature: 0.0,
});
Freestyle에서는 ASR biasing을 구현해서 "Vocabulary" 기능이라고 부르고 있어. Vocabulary를 만들면 Freestyle 내부에 로컬로 저장돼. 추론을 실행할 때마다 저장된 Vocabulary가 모델의 시스템 프롬프트나 keyterms에 바로 주입되는 방식이지.
Freestyle 오픈 소스 프로젝트
ASR biasing 관련해서 우리가 작업한 모든 내용은 오픈 소스로 공개되어 있고 GitHub 저장소에서 확인할 수 있어. 이 프로젝트가 흥미롭다면 별 하나씩 박아주라!
오픈 소스 음성 받아쓰기 작업에 관심 있는 사람들과 커뮤니티도 만들고 있으니까 많이들 와줘.
![음성 인식 모델을 위한 ASR 바이어스 구현 방법 [오픈 소스] 이미지 1](https://external-preview.redd.it/YTVhd213MnZ3bTZoMaDUjCJxRGoiNjjmNeUNS4PT4TOixk0QnM20egcLPiPB.png?overlay-align=bottom,left&crop=1200:628.272251309,smart&overlay-height=15p&overlay=%2Fwatermark%2Ft5_81eyvm.png%3Fs%3Df3ac604eab03ae47aff3fe0d5ffe1c3ce7aeb3c1&width=1200&height=628.272251309&auto=webp&s=7b031917412131ca2582e5df73b242031e760e54)

