Files
live-app-translator/docs/FINETUNING.md
EJClaw 5596f905d1 fix: Seed-X 프롬프트 형식과 티어별 용어집 전략 수정
4티어(Seed-X-PPO-7B) 번역 경로가 모델 카드 요구사항을 어기고 있었다.

- 프롬프트 끝의 `<ko>` 등 대상 언어 태그가 빠져 있었다. PPO 학습에 쓰인
  신호라 없으면 번역 품질이 흔들린다.
- Seed-X 는 chat template 없는 번역 전용 completion 모델인데 "구어체로
  자연스럽게" 같은 지시문 래퍼를 씌우고 있었다. 학습 분포를 벗어난다.
- 그 결과 MTSpec.supports_prompt_glossary=True 가 사실과 달랐다.
  Seed-X 는 용어집 지시문을 이해하지 못하므로 플레이스홀더 치환을 써야 한다.

수정
- PromptStyle(NONE/SEEDX/INSTRUCT) 도입, supports_prompt_glossary 를
  prompt_style 에서 파생시켜 둘이 어긋날 수 없게 함
- build_seedx_prompt() 로 모델 카드 형식을 분리 (지시문 주입 불가)
- INSTRUCT 경로는 chat template 사용, Qwen3 thinking 모드는 끔
- LANGUAGES 에 seedx 태그 명시
- finetune_mt.py 가 티어의 prompt_style 을 따라가게 해 학습/추론 프롬프트 일치
- AWQ Int4 로드 실패 시 autoawq 설치 안내를 담은 오류 메시지

검증: pytest 52개 통과 (프롬프트 회귀 테스트 13개 추가), ruff clean

근거: https://huggingface.co/ByteDance-Seed/Seed-X-PPO-7B

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-09-21 10:56:49 +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%/Hearo/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 학습

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

참고