번역은 30년 동안 자연어 처리(NLP) 연구비를 만들어 준 과제이며, 지금도 그 역할을 이어가고 있습니다.
유형: Build
언어: Python
선수 강의: Phase 5 · 10 (Attention Mechanism), Phase 5 · 04 (GloVe, FastText, Subword)
예상 시간: 약 75분
학습 목표
현대 기계 번역(Machine Translation; MT)이 트랜스포머 인코더-디코더(transformer encoder-decoder), 서브워드 토크나이제이션(subword tokenization), 빔 서치(beam search)로 구성되는 방식을 설명할 수 있습니다.
BLEU, chrF, COMET, LLM-as-judge의 역할과 한계를 이해합니다.
NLLB, mBART, Marian, 거대 언어 모델(LLM) 기반 번역 사이의 선택 기준을 정리합니다.
환각(hallucination), 잘못된 언어 출력(off-target generation), 용어 일관성 붕괴(terminology drift) 같은 운영 단계의 실패 양상을 식별합니다.
문제
모델은 한 언어의 문장을 읽고 다른 언어의 문장을 생성합니다. 길이가 달라지고, 단어 순서도 달라집니다. 어떤 원문 단어(source word)는 여러 대상 단어(target word)로 바뀌고, 그 반대도 일어납니다. 관용 표현은 일대일 대응(mapping)을 거부합니다. 영어의 "I miss you"는 프랑스어로 "tu me manques"이며, 직역하면 "네가 나에게 부족하다"에 가깝습니다. 어떤 단어 단위 정렬(alignment)도 이런 변환을 견뎌내지 못합니다.
기계 번역은 자연어 처리가 인코더-디코더, 어텐션(attention), 트랜스포머, 나아가 거대 언어 모델(Large Language Model; LLM) 패러다임 전체를 발명하도록 떠민 과제입니다. 번역 품질은 측정 가능했고, 사람과 기계 사이의 격차는 끈질겼기 때문에 모든 진전이 가능했습니다.
이 강의는 역사 설명을 건너뛰고, 2026년 현재 실제로 동작하는 파이프라인을 다룹니다. 사전 학습된 다국어 인코더-디코더(NLLB-200 또는 mBART), 서브워드 토크나이제이션, 빔 서치, BLEU와 chrF 평가, 그리고 운영 단계에서도 여전히 조용히 놓치기 쉬운 몇 가지 실패 양상을 함께 살펴봅니다.
사전 테스트
2문제 · 이 강의를 시작하기 전에 얼마나 알고 있는지 확인해보세요
1.현대 기계 번역(Machine Translation) 시스템이 단어 단위 토크나이제이션 대신 서브워드 토크나이제이션(subword tokenization)을 사용하는 이유는 무엇인가요?
2.기계 번역에서 빔 서치(beam search)는 그리디 디코딩(greedy decoding)에 비해 무엇을 개선하나요?
0/2 답변 완료
개념
현대 기계 번역은 병렬 말뭉치(parallel text)로 학습한 트랜스포머 인코더-디코더입니다. 인코더는 원문 언어의 토크나이제이션으로 입력을 읽습니다. 디코더는 교차 어텐션(cross-attention, 강의 10)을 통해 인코더의 출력을 보면서 대상 언어를 서브워드 단위로 한 토큰씩 생성합니다. 디코딩은 그리디 디코딩(greedy decoding)의 함정을 피하기 위해 빔 서치를 사용합니다. 출력은 디토크나이즈(detokenize)되고 대소문자 복원(detruecase)을 거친 뒤, 참조 번역(reference)과 비교해 점수가 매겨집니다.
실제 품질을 좌우하는 운영 차원의 선택은 세 가지입니다.
토크나이저(Tokenizer). 여러 언어가 섞인 말뭉치에서 학습한 SentencePiece BPE를 사용합니다. 여러 언어가 공유하는 어휘집(shared vocabulary)이 있기 때문에 NLLB에서 학습하지 않은 쌍에 대한 제로샷(zero-shot) 번역이 가능합니다.
모델 크기(Model size). 증류된 NLLB-200 distilled 600M은 노트북에서도 돌아갑니다. NLLB-200 3.3B는 공식적으로 권장되는 운영 기본값에 가깝고, 54.5B는 연구용 상한선입니다.
디코딩(Decoding). 일반 콘텐츠에는 빔 너비(beam width) 4~5를 사용합니다. 너무 짧은 출력을 막기 위해 길이 페널티(length penalty)를 조정하고, 용어 일관성이 필요하면 제약 디코딩(constrained decoding)을 적용합니다.
직접 만들기
Step 1: 사전 학습된 기계 번역 모델 호출
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
model_id = "facebook/nllb-200-distilled-600M"
tok = AutoTokenizer.from_pretrained(model_id, src_lang="eng_Latn")
model = AutoModelForSeq2SeqLM.from_pretrained(model_id)
src = "The cats are running."
inputs = tok(src, return_tensors="pt")
out = model.generate(
**inputs,
forced_bos_token_id=tok.convert_tokens_to_ids("fra_Latn"),
num_beams=5,
length_penalty=1.0,
max_new_tokens=64,
)
print(tok.batch_decode(out, skip_special_tokens=True)[0])
Les chats courent.
여기서 중요한 점은 세 가지입니다. src_lang은 토크나이저가 어떤 문자 체계와 분절(segmentation)을 적용할지 알려 줍니다. forced_bos_token_id는 디코더가 어떤 언어를 생성해야 하는지를 알려 줍니다. 둘 다 NLLB 전용 관례이며, mBART와 M2M-100은 각자 다른 약속을 사용하므로 서로 호환되지 않습니다.
Step 2: BLEU와 chrF
BLEU는 출력과 참조 사이의 n-gram 겹침(overlap)을 측정합니다. 1~4 크기의 n-gram 정밀도(precision) 네 개의 기하 평균을 사용하고, 너무 짧은 출력을 벌하기 위한 간결성 페널티(brevity penalty)를 더합니다. 점수는 [0, 100] 범위에 있습니다. 흔히 쓰지만 해석은 까다롭습니다. BLEU 30은 "쓸 만함", 40은 "좋음", 50은 "탁월함"으로 보는 경우가 많고, 1점 미만의 차이는 잡음(noise)으로 봅니다.
chrF는 글자 단위(character-level) F-점수를 측정합니다. BLEU가 단어 일치만 세느라 놓치는, 형태론적으로 풍부한(morphologically rich) 언어의 부분 일치를 더 잘 잡아냅니다. 보통 BLEU와 함께 보고합니다.
항상 sacrebleu를 사용합니다. 토크나이제이션을 정규화해 주기 때문에 논문 간 점수 비교가 가능해집니다. 직접 BLEU 계산을 짜는 것은 잘못된 벤치마크가 생기는 가장 흔한 경로입니다.
2026년의 3단계 평가 체계(three-tier evaluation hierarchy)
현대 기계 번역 평가는 서로 보완하는 세 가지 지표 계열을 함께 씁니다. 최소 두 가지는 함께 출하(ship)하는 것이 좋습니다.
휴리스틱(Heuristic) 지표 (BLEU, chrF). 빠르고, 참조 기반이며, 해석이 쉽고, 패러프레이즈에는 둔감합니다. 과거 결과와의 비교(legacy comparison)나 회귀(regression) 감지에 사용합니다.
학습형(Learned) 지표 (COMET, BLEURT, BERTScore). 사람의 평가로 학습한 신경망 모델로, 번역과 원문/참조 사이의 의미적 유사도를 비교합니다. COMET은 2023년 이후 기계 번역 연구에서 사람의 평가와 가장 잘 연관되는 축에 가깝고, 품질이 중요한 2026년 운영 환경의 기본값입니다.
LLM-as-judge (참조 없음, reference-free). 거대 언어 모델에게 유창성(fluency), 충실성(adequacy), 어조(tone), 문화적 적합성(cultural appropriateness)을 기준으로 번역을 평가하게 합니다. 루브릭(rubric)이 잘 설계되면 GPT-4-as-judge는 약 80% 수준으로 사람 평가와 일치합니다. 참조 번역이 존재하지 않는 개방형 콘텐츠에 사용합니다.
실무적으로 2026년의 스택은 다음과 같습니다. sacrebleu로 BLEU와 chrF를 보고, unbabel-comet으로 COMET을 측정하고, 마지막 사람-대면 신호는 프롬프트 기반 거대 언어 모델로 보강합니다. 어떤 지표라도 운영 데이터에 신뢰하기 전에 50~100개의 사람이 라벨링한 예시로 보정(calibration)합니다.
참조 없는(reference-free) 지표(COMET-QE, BLEURT-QE, LLM-as-judge)는 참조 번역이 존재하지 않는 롱테일 언어 쌍에서도 번역을 평가할 수 있게 해 주며, 이런 언어 쌍에서 특히 중요합니다.
Step 3: 운영에서 깨지는 지점
앞의 동작하는 파이프라인은 약 80%의 경우 유창하게 번역해 내지만, 나머지 20%는 조용히 실패합니다. 잘 알려진 실패 양상은 다음과 같습니다.
환각(Hallucination). 모델이 원문에 없는 내용을 지어냅니다. 낯선 도메인 어휘에서 흔히 발생합니다. 증상은 출력이 유창하지만 원문이 말하지 않은 사실을 주장한다는 점입니다. 완화책은 도메인 용어에 대한 제약 디코딩, 규제 콘텐츠(regulated content)에 대한 사람 검토, 그리고 입력 대비 출력이 비정상적으로 길어지는지 감시하는 것입니다.
잘못된 언어 출력(Off-target generation). 모델이 의도한 언어가 아닌 다른 언어로 번역합니다. NLLB도 희귀한 언어 쌍에서는 놀라울 정도로 이 문제에 취약합니다. 완화책은 forced_bos_token_id를 검증하고, 반환 전에 항상 언어 식별(language-ID) 모델로 출력 언어를 확인하는 것입니다.
용어 일관성 붕괴(Terminology drift). "Sign up"이 문서 1에서는 "s'inscrire"가 되었다가 문서 2에서는 "créer un compte"가 됩니다. UI 텍스트나 사용자 대면 문자열에서는 원시 품질보다 일관성이 더 중요합니다. 완화책은 용어집 기반 제약 디코딩(glossary-constrained decoding)이나 후처리 사전(post-edit dictionary)을 사용하는 것입니다.
공손함/격식 불일치(Formality mismatch). 프랑스어의 "tu" 대 "vous", 일본어의 공손도(politeness level) 같은 경우입니다. 모델은 학습 데이터에서 더 흔했던 형태를 고르는데, 고객 대면 콘텐츠에서는 보통 이게 잘못된 선택입니다. 완화책은 모델이 지원한다면 격식 토큰(formality token)을 프롬프트 접두에 두거나, 격식체 전용 말뭉치로 작은 모델을 미세 조정(fine-tune)하는 것입니다.
짧은 입력에서의 길이 폭증(Length explosion on short input). 매우 짧은 입력 문장이 종종 지나치게 긴 번역을 만들어 냅니다. 원문 토큰이 약 5개 이하로 짧아지면 길이 페널티가 절벽처럼 떨어지기 때문입니다. 완화책은 원문 길이에 비례하는 강한 최대 길이 한도(hard max-length cap)를 두는 것입니다.
Step 4: 도메인 특화 미세 조정(domain fine-tuning)
사전 학습된 모델은 일반론자입니다. 법률, 의료, 게임 대사(legal, medical, game-dialog) 번역은 도메인 병렬 데이터로 미세 조정하면 측정 가능한 수준으로 좋아집니다. 레시피 자체는 특별하지 않습니다.
수천 건의 고품질 병렬 예시가 수십만 건의 잡음 섞인 웹 스크랩 데이터보다 낫습니다. 학습 데이터의 품질이 운영 품질을 좌우하는 가장 큰 단일 지렛대입니다.
사용하기
2026년 기계 번역 운영 스택을 정리하면 다음과 같습니다.
사용 사례
권장 시작점
200개 언어 간 임의 번역 (any-to-any)
facebook/nllb-200-distilled-600M (노트북용) 또는 nllb-200-3.3B (운영용)
영어 중심, 고품질, 50개 언어
facebook/mbart-large-50-many-to-many-mmt
짧은 실행, 저렴한 추론, 영어-프랑스어/독일어/스페인어
Helsinki-NLP / Marian models
브라우저 측 지연이 결정적인 경우
ONNX-quantized Marian (~50 MB)
최대 품질, 비용 허용
GPT-4 / Claude / Gemini 번역 프롬프트
2026년 기준으로 거대 언어 모델은 일부 언어 쌍, 특히 관용 표현과 긴 문맥에서 전용 기계 번역 모델을 능가합니다. 대신 토큰당 비용과 지연 시간이 큽니다. 처리량(throughput)보다 문맥 길이, 문체 일관성(stylistic consistency), 프롬프트를 통한 도메인 적응이 더 중요할 때 거대 언어 모델을 선택합니다.
산출물 만들기
outputs/skill-mt-evaluator.md로 저장합니다.
---
name: mt-evaluator
description: Evaluate a machine translation output for shipping.
version: 1.0.0
phase: 5
lesson: 11
tags: [nlp, translation, evaluation]
---
Given a source text and a candidate translation, output:
1. Automatic score estimate. BLEU and chrF ranges you would expect. State whether a reference is available.
2. Five-point human-verifiable check list: (a) content preservation (no hallucinations), (b) correct language, (c) register / formality match, (d) terminology consistency with glossary if provided, (e) no truncation or length explosion.
3. One domain-specific issue to probe. E.g., for legal: named entities and statute citations. For medical: drug names and dosages. For UI: placeholder variables `{name}`.
4. Confidence flag. "Ship" / "Ship with review" / "Do not ship". Tie to the severity of issues found in step 2.
Refuse to ship a translation without a language-ID check on output. Refuse to evaluate without a reference unless the user explicitly opts in to reference-free scoring (COMET-QE, BLEURT-QE). Flag any content over 1000 tokens as likely needing chunked translation.
연습문제
쉬움. 영어 5문장 문단을 nllb-200-distilled-600M으로 프랑스어로 번역한 뒤 다시 영어로 되돌리는 왕복 번역(round-trip)을 수행합니다. 결과가 원문과 얼마나 가까운지 측정해 보고, 의미는 보존되지만 단어 선택에는 어긋남이 생기는 현상을 확인합니다.
중간.fasttext lid.176 또는 langdetect를 이용해 번역 결과에 대한 언어 식별(language-ID) 검사를 구현하고, 기계 번역 호출에 통합해 잘못된 언어로 출력된 결과가 반환되기 전에 잡아냅니다.
어려움. 직접 고른 5,000쌍 도메인 말뭉치로 nllb-200-distilled-600M을 미세 조정합니다. 미세 조정 전후의 보존(held-out) 세트 BLEU를 측정하고, 어떤 종류의 문장이 좋아졌고 어떤 문장이 오히려 나빠졌는지 보고합니다.
핵심 용어
용어
흔한 설명
실제 의미
BLEU
번역 점수
간결성 페널티(brevity penalty)가 붙은 n-gram 정밀도. 범위는 [0, 100]이다.