Files
live-app-translator/docs/MODELS.md
EJClaw 1a87ec6677 feat: Hearo 1차 구현 — 프로그램 소리 실시간 번역 자막
프로그램별 오디오를 캡처해 로컬 GPU에서 음성인식→번역하고 화면 위
자막으로 보여주는 데스크톱 앱. 한/영/일/중 4개 언어.

구성
- audio: WASAPI 프로그램별 캡처(C++ 보조 프로그램) + 장치 루프백 폴백,
  적응형 VAD 발화 분할
- models: 속도~품질 5단계 티어, faster-whisper + CTranslate2/LLM 2백엔드,
  용어집(플레이스홀더 보호 + 프롬프트 주입)
- core: Qt 비의존 파이프라인 엔진 (캡처/분할/추론 3스레드, 큐 연결)
- ui: 사이드바 5화면 + 무테두리 항상위 자막 오버레이, 자체 다크 테마

모델 선정 근거는 docs/MODELS.md, 추가학습 가능 여부와 방법은
docs/FINETUNING.md 참고.

검증: pytest 39개 통과 (GPU·오디오 장치 없이 실행), ruff clean

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-09-21 10:47:11 +09:00

5.1 KiB
Raw Blame History

모델 선정 근거

왜 두 단계인가

"소리 → 번역"을 한 모델로 끝내는 방법도 있다. Whisper에는 translate 태스크가 있고 Voxtral·Qwen-Omni 같은 음성 LLM도 있다. 하지만 이 프로그램에는 맞지 않는다.

  • Whisper의 translate는 X → 영어만 된다. 한국어로 받아볼 수 없다.
  • 음성 LLM 한 방에 처리하면 번역만 따로 교체하거나 추가학습시킬 수 없다.
  • 용어집을 꽂아 넣을 지점이 사라진다.

그래서 음성인식(ASR) → 번역(MT) 2단 구조로 간다. 두 단계를 따로 고를 수 있어서 "인식은 최고급, 번역은 경량" 같은 조합이 가능하고, 이게 실제로 가장 가성비가 좋다.

음성인식

후보 판단
Whisper large-v3-turbo 디코더를 32층 → 4층으로 줄여 large-v3 대비 약 6배 빠르면서 정확도 손실은 1~2%. 809M 파라미터, int8이면 VRAM 1.6GB. 한/영/일/중 모두 지원.
Whisper large-v3 가장 정확하지만 느리다. 최상위 티어에만.
distil-whisper 빠르지만 영어 전용이라 탈락.
NVIDIA Parakeet 실시간성은 최고지만 영어 전용이라 탈락.

실행은 faster-whisper(CTranslate2)로 한다. 순정 openai-whisper 대비 4배 빠르고 VRAM을 절반만 쓴다.

→ 2~4티어의 기본은 large-v3-turbo. 4개 언어를 모두 지원하면서 실시간을 만족하는 유일한 지점이다.

번역

후보 VRAM 판단
Seed-X-PPO-7B (ByteDance) ~5.6GB (Int4) 28개 언어 번역 전용으로 학습된 7B. 자체 평가에서 Gemma3-27B, Llama4-Scout, Qwen3-235B를 앞서고 사람 평가에서 GPT-4o·Claude-3.5·Gemini-2.5-Pro와 대등. 한/영/일/중이 모두 주력 언어.
Qwen3-8B ~11GB (fp16) 범용 LLM이라 Seed-X보다 기본 번역은 약간 아래. 대신 추가학습(LoRA) 생태계가 가장 두껍고, 프롬프트 지시를 잘 따른다.
NLLB-200-distilled 600M / 1.3B 0.8~2.9GB 200개 언어 seq2seq. 구어체는 LLM보다 딱딱하지만 압도적으로 빠르고 가볍다. 게다가 풀 파인튜닝이 소비자 GPU에서 된다.
Gemma 3 12B ~8GB 140개 언어로 넓게 강하지만, 한/영/일/중만 필요한 우리에게는 Seed-X가 더 낫다.
opus-mt (Helsinki) ~0.3GB 언어쌍마다 모델이 따로라 4×3=12개를 관리해야 한다. 티어 구조와 안 맞아 탈락.

다섯 티어

# 이름 음성인식 번역 VRAM 지연
1 번개 whisper-small (int8) NLLB-600M (int8) ~2GB 0.6초
2 신속 large-v3-turbo (int8) NLLB-600M (fp16) ~4GB 0.9초
3 균형 (기본) large-v3-turbo (fp16) NLLB-1.3B (fp16) ~6GB 1.2초
4 정밀 (추천) large-v3-turbo (fp16) Seed-X-PPO-7B (Int4) ~10GB 2.0초
5 극한 large-v3 (fp16) Qwen3-8B (fp16) + LoRA ~16GB 3.0초

결론: 무엇을 고를 것인가

추가학습을 안 한다면 → 4티어 "정밀"이 최선이다. Seed-X는 번역만 하도록 만들어진 모델이라 7B치고 품질이 비정상적으로 좋다. 게임 대사처럼 짧고 구어체인 문장에서 NLLB 계열과 체감 차이가 크다.

추가학습을 전제로 하면 → 5티어 "극한"(Qwen3-8B + LoRA)으로 간다. 이유는 세 가지다.

  1. Seed-X는 이미 PPO(강화학습)로 조율이 끝난 모델이다. 그 위에 다시 SFT를 얹으면 기존 품질이 깨지기 쉽다. 반면 Qwen3-8B는 instruct 베이스라 추가 학습을 전제로 만들어졌다.
  2. peft / unsloth / TRL 등 LoRA 도구가 Qwen 계열에 가장 잘 맞춰져 있다.
  3. 용어집을 프롬프트로 직접 지시할 수 있어 "학습 + 프롬프트" 이중으로 용어를 잡을 수 있다.

VRAM이 8GB 이하라면 → 3티어 "균형". 그리고 이 경우의 추가학습은 NLLB-1.3B를 풀 파인튜닝하는 쪽이 오히려 유리하다 (docs/FINETUNING.md 참고).

주의 — 벤치마크를 곧이곧대로 믿지 말 것

위 비교는 공개 벤치마크와 모델 카드에 근거한 것이고, 실제 게임/방송 음성에서의 체감 품질은 다를 수 있다. 특히 Seed-X의 우위는 자체 발표 수치에 크게 기대고 있다. 그래서 프로그램에 5개 티어를 모두 넣었다. 실제 쓰는 콘텐츠로 3·4·5티어를 직접 번갈아 써보고 정하는 것이 가장 정확하다.

참고