Files
live-app-translator/docs/FINETUNING.md
EJClaw 8b36b244ff feat: LiveSub 2차 — 자막 on/off, 모니터·위치 선택, GPU 저부하, 게임 용어집
이름을 Hearo → LiveSub 로 변경. 말장난보다 하는 일이 바로 보이는 쪽이 낫다.

자막 on/off
- 전역 단축키 Ctrl+Alt+S (자막) / Ctrl+Alt+D (번역) — Windows RegisterHotKey +
  네이티브 이벤트 필터라 게임 창이 떠 있어도 동작. 다른 OS 에서는 no-op
- 단축키·체크박스·우클릭 메뉴가 모두 같은 경로를 타도록 통합

모니터 선택 + 디스코드식 배치
- placement.py: Qt 비의존 배치 계산 (모니터 목록 → 9분할 좌표)
- AnchorGrid 위젯으로 3x3 위치 선택, 드래그하면 자유 배치로 전환
- 모니터 구성이 바뀌어도 자막이 화면 밖으로 사라지지 않도록 클램프

GPU 저부하 모드 (기본 켜짐)
- 연산 정밀도 int8 강등, VRAM 상한 35%, 추론 후 60ms 양보,
  300초 무음 시 모델 언로드, 중간 결과 비활성
- 기본 티어를 균형(6GB) → 신속(4GB) 으로 하향
- 8GB GPU 기준 자막 2.8GB / 게임 5.2GB

게임 용어집 번들 (304개)
- 롤 74 · 발로란트 59 · 오버워치2 49 · FPS공통 46 · 마크 38 · 방송 38
- 체크박스로 켜고 끄며, 사용자가 직접 등록한 항목이 항상 우선

검증: pytest 91개 통과 (배치 14 + 팩 12 + UI 6 신규), ruff clean

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-09-21 17:49:26 +09:00

6.4 KiB

게임·방송 용어 추가학습

결론부터

가능합니다. 다만 대부분의 경우 추가학습보다 용어집이 먼저입니다.

방법 준비 효과가 나타나는 시점 무엇에 좋은가
1. 용어집 (구현 완료) 단어 목록만 즉시 고유명사, 스킬명, 아이템명, 캐릭터명
2. LoRA 추가학습 문장 쌍 1,000~3,000개 30분~3시간 학습 말투, 문장 구조, 도메인 어조
3. 풀 파인튜닝 문장 쌍 10,000개 이상 수 시간~하루 번역 스타일 전면 교체

용어집과 추가학습은 경쟁 관계가 아니라 보완 관계입니다. 둘 다 켜는 게 가장 좋습니다.


1. 용어집 — 먼저 이것부터

용어집 화면에서 "원문 → 각 언어 역어"를 등록하면 끝입니다. 학습 없이 바로 적용됩니다.

동작 방식은 번역 모델에 따라 다릅니다.

  • 1~4티어 (NLLB, Seed-X) — 등록 단어를 ⟦0⟧ 같은 토큰으로 바꿔치기해 모델이 아예 건드리지 못하게 한 뒤, 번역이 끝나면 지정한 역어로 되돌립니다.
  • 5티어 (Qwen3) — 그 문장에 실제로 나온 용어만 골라 프롬프트에 "이 용어는 이렇게 옮겨라"로 넣어줍니다. 조사·어미까지 문맥에 맞게 붙어 더 자연스럽습니다.

4티어 Seed-X가 LLM인데도 프롬프트 방식을 못 쓰는 이유는, 이 모델이 chat template 없는 번역 전용 completion 모델이기 때문입니다. 지시문을 이해하지 못할뿐더러 모델 카드가 정한 고정 프롬프트 형식(끝의 <ko> 같은 언어 태그 포함)을 벗어나면 품질이 무너집니다. 용어집을 문맥까지 자연스럽게 반영하고 싶다면 5티어를 쓰세요.

CSV로 한 번에 가져올 수 있습니다.

원문 용어,한국어 역어,English 역어,日本語 역어,中文 역어,메모
Nexus,넥서스,Nexus,ネクサス,基地,LoL
baron,바론,Baron,バロン,男爵,LoL
ult,궁,ultimate,アルティメット,大招,궁극기
gg,잘 싸웠다,gg,gg,打得好,

게임 하나당 200~500개만 등록해도 체감 품질이 크게 올라갑니다. 추가학습으로 같은 효과를 내려면 훨씬 많은 데이터가 필요합니다. 용어집을 먼저 채우세요.


2. LoRA 추가학습 — 용어집으로 안 되는 것

용어집은 "이 단어를 저 단어로"만 고칩니다. 아래는 못 잡습니다.

  • 말투 — "You're getting rolled" → "탈탈 털리고 있네" (직역 아닌 게임 말투)
  • 생략된 주어·목적어 복원 — 게임 음성에는 생략이 많습니다
  • 방송 특유의 감탄·리액션 어조

이건 문장 쌍으로 학습시켜야 합니다.

필요한 데이터 양

공개 연구 기준으로,

  • 언어쌍당 약 650~1,000 문장만으로도 LoRA 도메인 적응이 동작합니다.
  • 언어쌍당 2,000 문장 / 15~20 epoch 수준에서 chrF++ 평균 +6.1점 개선이 보고됩니다.

즉 언어쌍당 1,000~3,000 문장이 현실적인 목표입니다. 4개 언어 전부가 아니라, 실제로 많이 쓰는 방향(예: 영어→한국어) 하나만 먼저 하는 게 효율적입니다.

데이터 만드는 법

  1. 게임 공식 현지화 자산 — 한국어판이 있는 게임의 자막/UI 텍스트. 품질이 가장 좋습니다.
  2. 자막 파일 쌍 — 같은 영상의 영어 자막 + 한국어 자막(.srt)을 시간축으로 정렬.
  3. 이 프로그램의 기록 — 설정 > 번역 기록을 파일로 남기기를 켜두면 %APPDATA%/LiveSub/transcripts/ 에 "원문 / 번역" 쌍이 쌓입니다. 틀린 번역만 손으로 고쳐서 학습 데이터로 쓰는 게 가장 현실적인 경로입니다.
  4. 위키·커뮤니티 용어 사전 — 용어집으로 쓰는 게 더 낫습니다. 문장이 아니므로.

형식은 JSONL 한 줄에 한 쌍입니다.

{"source": "Enemy missing from mid", "target": "미드 실종", "source_lang": "en", "target_lang": "ko"}
{"source": "I'll take baron", "target": "바론 내가 먹을게", "source_lang": "en", "target_lang": "ko"}

학습 실행

pip install -e ".[finetune]"

python scripts/finetune_mt.py \
  --data data/game_terms.jsonl \
  --tier ultimate \
  --output ./adapters/game-ko \
  --epochs 3

끝나면 모델 화면의 추가학습 어댑터 칸에 ./adapters/game-ko 를 넣으면 적용됩니다.

티어별 난이도

티어 번역 모델 방식 학습에 필요한 VRAM 난이도
1~2 NLLB-600M 풀 파인튜닝 가능 ~8GB ★ 쉬움
3 NLLB-1.3B LoRA ~10GB ★★
4 Seed-X-PPO-7B LoRA (권장 안 함) ~16GB ★★★ 까다로움
5 Qwen3-8B LoRA ~16GB ★ 쉬움 (권장)

4티어 Seed-X는 추가학습 대상으로 권하지 않습니다. 이미 PPO(강화학습)까지 마친 모델이라 그 위에 SFT를 얹으면 기존 번역 품질이 무너지기 쉽습니다 (catastrophic forgetting). Int4 양자화 가중치라 학습 자체도 번거롭습니다.

추가학습을 할 거라면 5티어(Qwen3-8B), VRAM이 부족하면 1~2티어(NLLB-600M 풀 파인튜닝) 로 가는 게 맞습니다.

권장 하이퍼파라미터

연구에서 널리 쓰이는 설정입니다. scripts/finetune_mt.py 의 기본값이기도 합니다.

LoRA rank r = 16, alpha = 32, dropout = 0.05
대상 모듈: attention 의 q_proj, v_proj
learning rate = 2e-4 (LoRA) / 5e-5 (풀 파인튜닝)
epochs = 3 (데이터 2,000개 이상) / 10~20 (수백 개)

3. 어느 것부터 할지

1주차  용어집 300개 등록  →  이것만으로 충분한지 확인
2주차  번역 기록 켜고 실사용, 틀린 문장 수집
3주차  고친 문장 1,000개 모이면 LoRA 학습

용어집만으로 만족스러우면 추가학습은 안 해도 됩니다. 실제로 고유명사 오역이 체감 불만의 대부분입니다.

참고