STT
-
마이크 떼자마자 STT를 깨우는 법 — Warmup POST 패턴IT 2026. 5. 13. 21:00
음성 챗봇의 사용자 흐름은 "마이크 누름 → 말함 → 마이크 뗌 → 응답 들음" 네 단계입니다. 이 중 사용자가 가장 답답해하는 구간이 "마이크 뗀 직후 → 첫 응답 시작"입니다. 여기서 침묵이 길어지면 챗봇 자체가 잘못된 것 같은 인상을 줍니다.이 침묵을 줄이는 작은 트릭이 Warmup POST입니다. 마이크 권한을 받는 순간(또는 마이크를 켜는 순간)에 STT 서버에 빈 요청을 한 번 보냅니다. 사용자가 말하는 동안 STT 데몬이 백그라운드에서 깨어 모델을 GPU에 로드합니다. 사용자가 마이크를 떼고 실제 transcribe 요청이 도착할 때, 데몬은 이미 준비된 상태입니다. 콜드 스타트 5초가 사용자 인지 시간 바깥으로 밀려나는 패턴입니다.STT 데몬도 on-demand라서 콜드 스타트가 있다가정용..
-
음성 챗봇이 '구독 부탁드립니다'를 말한 날 — STT 환각과 false-negative biasIT 2026. 5. 11. 21:00
아들이 마이크 버튼만 누르고 아무 말 없이 가만히 있던 날이 있었습니다. 그런데 챗봇 답변에 이렇게 떴습니다."네, 시청해주셔서 감사합니다. 다음 영상에서 만나요!"아이가 황당해하면서 저를 불렀습니다. 코드를 추적해보니 STT가 빈 음성에서 "시청해주셔서 감사합니다"라는 텍스트를 만들어냈고, 챗봇은 그 텍스트를 사용자 발화로 받아 그럴듯하게 답했던 것입니다. 모델은 멀쩡히 일하고 있었지만, 입력 단계에서 가짜 신호가 들어와 출력이 어긋난 것이죠. STT 환각(hallucination)이라고 부르는 현상입니다.왜 STT가 없는 말을 만들어내나Whisper는 인터넷에서 모은 다국어 음성·영상 데이터로 학습됐습니다. 학습 데이터의 상당수가 유튜브·팟캐스트라서 시작·끝 자막에 자주 등장하는 정형 문구가 모델 안..
-
Whisper 디코더에 어휘를 박아 넣기 — initial_prompt 한 줄의 효과IT 2026. 5. 10. 23:00
모델을 turbo로 키우고 beam_size를 5로 올린 다음에도, 어떤 단어는 끝까지 잘 안 들렸습니다. 아이가 자주 말하는 "마인크래프트", "로블록스", "선생님 이름" 같이 일상어와 다른 어휘에서 그랬습니다.모델이 더 크고 빔 후보가 더 많아도, 디코더가 떠올릴 수 있는 "그럴 법한 단어"의 분포 자체가 바뀌지 않으면 한계가 있습니다. 같은 음향 신호라도 디코더가 "이 단어가 나올 가능성이 높다"고 미리 알고 있으면 어휘 매칭이 훨씬 정확해집니다. Whisper에는 그걸 살짝 밀어주는 initial_prompt라는 인자가 있습니다.initial_prompt이 뭘 하는가Whisper의 디코더는 매 스텝에서 다음 토큰을 확률 분포로 예측합니다. initial_prompt는 이 예측 직전에 디코더의 입..
-
Whisper의 빔 서치를 살리는 한 줄 — beam_size 1과 5의 차이IT 2026. 5. 10. 22:00
모델을 large-v3-turbo로 승격해 어린이 발음 인식이 한 단계 좋아졌습니다. 그런데 며칠 더 써보니 여전히 헷갈리는 발음이 남아 있었습니다. "여덟"이 "여럽"으로, "쥐"가 "지"로 — 받침이 약하거나 모음이 짧은 단어에서요.모델은 이미 충분히 큰 걸로 갔습니다. 그렇다면 같은 모델에서 어떻게 단어를 골라내느냐를 손볼 차례입니다. Whisper의 디코딩 파라미터 중 가장 효과가 큰 것이 beam_size입니다. 기본값 1을 5로 바꾼 이야기를 정리합니다.그리디 디코딩과 빔 서치가 뭔가요음성 인식기의 디코더는 음향 표현을 받아 한 토큰씩 단어를 만들어냅니다. 매 스텝에서 후보 단어가 여러 개 나오는데, 그중 하나를 골라야 다음 스텝으로 넘어갑니다. "이 시점에서 가장 확률이 높은 단어 하나만 고..
-
Whisper Small에서 Turbo로 — 아이 발음을 위한 STT 모델 선택IT 2026. 5. 10. 21:00
아들에게 작은 음성 챗봇을 만들어줬습니다. 마이크 버튼 하나, 말로 묻고 답을 음성으로 듣는 단순한 화면입니다. 그런데 처음 며칠 동안 가장 자주 듣는 소리가 이거였습니다."잘 못 들었어요. 다시 한번!"옆에서 들을 땐 분명히 "공룡은 왜 멸종했어?"라고 또박또박 말했는데, 화면에는 엉뚱한 글자가 찍혀 있곤 했습니다. 같은 챗봇 백엔드를 쓰는 제 메인 챗봇은 멀쩡한데, 아이 목소리만 들어가면 자꾸 헛소리를 합니다. 모델을 의심해봐야 했습니다.Whisper-small이 아이 목소리에 약한 이유저는 음성 인식기로 OpenAI의 Whisper를 씁니다. Whisper는 오픈소스로 풀려 있는 다국어 음성-텍스트(STT, Speech-to-Text) 모델 가족입니다. 작게는 39M(메가) 파라미터의 tiny부터,..
-
로컬 챗봇 시리즈 #5 — 다른 프로젝트의 venv를 subprocess로 빌려쓰기: 의존성 추가를 거부하는 영리함IT 2026. 5. 8. 23:00
들어가며 — "마이크 버튼 하나만 더해주세요"의 진짜 비용손에 음식 묻었을 때, 또는 한 손은 아이를 안고 있을 때 — 키보드를 못 친다. ChatGPT 모바일이 마이크 버튼 하나로 음성을 받기 시작한 순간 사용자가 "그래, 이거지" 한다. 로컬 챗봇에도 같은 게 필요했다.음성 입출력은 두 단계 — 마이크 → 텍스트(STT, Speech-To-Text)와 텍스트 → 스피커(TTS, Text-To-Speech). STT는 Whisper, TTS는 Piper 같은 표준이 있다. 그런데 막상 챗봇 코드베이스에 "pip install faster-whisper 한 줄만 더하자"라는 결정이 의외로 비싸다. 이번 글은 그 의존성 추가를 거부하고 이미 있는 다른 프로젝트의 venv를 subprocess로 빌려쓴 영리..
-
녹음 파일을 넣으면 요약이 나온다 — 음성 자동 전사 & 요약 파이프라인 구축기IT 2026. 3. 19. 22:00
세미나를 듣고 왔다. 핵심 내용을 정리해야 하는데, 1시간짜리 녹음 파일을 다시 듣기가 귀찮다. 녹음은 성실하게 했는데 정리는 영원히 밀린다.이 문제를 해결하기 위해 "녹음 파일을 폴더에 넣으면 요약 문서가 자동으로 나오는" 파이프라인을 만들었다. 폰에서 녹음하면 서버로 자동 동기화되고, AI가 전사하고, 화자를 구분하고, 요약하고, 저장하고, 알림까지 보내준다.이 글에서는 전체 아키텍처와 각 단계의 설계 의도를 정리한다.전체 아키텍처스마트폰 (음성 녹음) ↓ SFTP 자동 동기화 (FolderSync)서버 ~/voice-inbox/ ↓ watchdog (파일 감지 즉시 트리거) ↓ Python 파이프라인 ├─ 1. 필터링 (통화 녹음 제외) ├─ 2. 포맷 변환 (m4a → ..
-
음성을 텍스트로, 목소리를 사람으로 — Whisper와 pyannote가 풀어낸 두 가지 문제IT 2026. 3. 19. 21:00
회의 녹음을 다시 듣고 있다. 1시간짜리 음성 파일. 핵심 내용이 어디쯤이었는지 기억이 안 나서 처음부터 재생한다. 빨리감기. 되감기. 또 빨리감기.이 경험이 익숙하다면, "녹음은 했는데 다시 듣기가 귀찮다" 는 인류 공통의 문제에 공감할 것이다.이 문제를 해결하려면 두 가지가 필요하다.음성을 텍스트로 바꾸기 (Speech-to-Text)누가 말한 건지 구분하기 (Speaker Diarization)이 글에서는 이 두 문제를 각각 해결하는 오픈소스 모델 — OpenAI Whisper와 pyannote-audio — 을 다룬다. 어떤 문제를 풀기 위해 나왔고, 어떻게 작동하며, 실제로 어떻게 설치하고 사용하는지까지.문제 1: 음성을 텍스트로 — OpenAI Whisper왜 이 모델이 필요한가음성인식(STT..