Skip to main content

기계 번역 (Machine Translation)

기계 번역(MT)은 한 자연어(원어, Source Language)로 된 텍스트를 다른 자연어(대상어, Target Language)로 자동 변환하는 태스크입니다. NLP 역사에서 가장 오래된 태스크 중 하나이며, Transformer 아키텍처 자체가 기계 번역 문제를 해결하기 위해 탄생했습니다.

학습 목표

이 문서를 완료하면 다음을 수행할 수 있습니다.
  • 기계 번역의 발전 역사(규칙 기반 → 통계 기반 → 신경망 기반)를 설명할 수 있습니다
  • Seq2Seq with Attention과 Transformer 기반 번역의 차이를 이해합니다
  • BLEU, chrF, COMET 등 번역 평가 지표를 계산하고 해석할 수 있습니다
  • HuggingFace로 번역 모델을 사용할 수 있습니다

왜 중요한가

기계 번역은 NLP의 발전 역사 그 자체입니다. 현대 NLP의 핵심 기술들이 번역 문제에서 탄생했습니다.
  • Seq2Seq (2014): 인코더-디코더 아키텍처의 시작
  • Attention (2015): Bahdanau Attention이 번역 품질을 획기적으로 개선
  • Transformer (2017): “Attention Is All You Need” 논문이 번역 태스크에서 발표
  • mBART, NLLB (2020~): 다국어 사전학습 모델의 등장

기계 번역의 발전 역사

1세대: 규칙 기반 번역 (RBMT)

언어학자가 작성한 번역 규칙과 사전을 사용하는 방식입니다.
원문: "The cat sat on the mat"
규칙: 주어(The cat) + 동사(sat) + 전치사구(on the mat)
번역: "고양이가 매트 위에 앉았다"
한계: 규칙 작성에 막대한 비용이 들고, 언어 쌍마다 새로운 규칙이 필요합니다. 관용적 표현과 문맥 의존적 번역에 취약합니다.

2세대: 통계 기반 번역 (SMT)

대규모 병렬 코퍼스(Parallel Corpus)에서 번역 확률을 학습합니다. t^=argmaxtP(ts)=argmaxtP(st)P(t)\hat{t} = \arg\max_t P(t|s) = \arg\max_t P(s|t) \cdot P(t)
  • P(st)P(s|t): 번역 모델 (원문-대상어 단어 정렬 확률)
  • P(t)P(t): 언어 모델 (대상어의 자연스러움)
Google 번역이 2006~2016년까지 SMT 기반으로 운영되었습니다.

3세대: 신경망 기반 번역 (NMT)

딥러닝 모델이 End-to-End로 번역을 학습합니다.
세대방식장점한계
RBMT규칙 + 사전예측 가능한 동작규칙 작성 비용 막대
SMT통계 모델데이터 기반 자동 학습구문 단위 번역, 장거리 의존성 약함
NMT (Seq2Seq)인코더-디코더End-to-End 학습긴 문장 정보 손실
NMT (Attention)어텐션 메커니즘긴 문장 처리 개선순차 처리로 학습 느림
NMT (Transformer)Self-Attention병렬 처리, 최고 품질대규모 데이터/컴퓨팅 필요

핵심 개념: 번역 모델 아키텍처

Transformer 기반 번역

현대 기계 번역의 표준입니다. 인코더가 원문을 이해하고, 디코더가 대상어를 한 토큰씩 생성합니다.
from transformers import pipeline

# 영한 번역 파이프라인
translator = pipeline(
    "translation",
    model="Helsinki-NLP/opus-mt-en-ko",
)

result = translator("Machine translation has evolved significantly over the decades.")
print(result[0]["translation_text"])
# 기계 번역은 수십 년에 걸쳐 상당히 발전해 왔습니다.

다국어 번역 모델

하나의 모델로 여러 언어 쌍을 번역합니다.
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer

# Meta의 NLLB (No Language Left Behind) — 200+ 언어 지원
model_name = "facebook/nllb-200-distilled-600M"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSeq2SeqLM.from_pretrained(model_name)

def translate_nllb(text, src_lang="eng_Latn", tgt_lang="kor_Hang"):
    """NLLB 다국어 번역"""
    tokenizer.src_lang = src_lang

    inputs = tokenizer(text, return_tensors="pt", max_length=512, truncation=True)

    translated = model.generate(
        **inputs,
        forced_bos_token_id=tokenizer.convert_tokens_to_ids(tgt_lang),
        max_length=512,
    )

    return tokenizer.decode(translated[0], skip_special_tokens=True)

# 영어 → 한국어
print(translate_nllb("The weather is nice today."))

# 일본어 → 한국어
print(translate_nllb("今日は天気がいいです。", src_lang="jpn_Jpan", tgt_lang="kor_Hang"))
NLLB vs mBART: NLLB는 200+ 언어를 지원하는 최신 다국어 모델이고, mBART는 50개 언어를 지원합니다. 저자원 언어(Low-resource Language)에서는 NLLB가 훨씬 우수한 성능을 보입니다.

번역 평가 지표

BLEU (Bilingual Evaluation Understudy)

가장 널리 사용되는 자동 평가 지표입니다. 기계 번역 출력과 참조 번역 사이의 n-gram 정밀도를 측정합니다. BLEU=BPexp(n=1Nwnlogpn)\text{BLEU} = \text{BP} \cdot \exp\left(\sum_{n=1}^{N} w_n \log p_n\right)
  • pnp_n: n-gram 정밀도 (번역 출력의 n-gram이 참조 번역에 얼마나 등장하는지)
  • BP\text{BP}: 간결성 페널티 (번역이 참조보다 짧으면 감점)
  • wnw_n: n-gram 가중치 (보통 균등 1/N1/N)
import evaluate

bleu = evaluate.load("bleu")

predictions = ["고양이가 매트 위에 앉았다"]
references = [["고양이가 매트 위에 앉아 있었다"]]

result = bleu.compute(predictions=predictions, references=references)
print(f"BLEU: {result['bleu']:.4f}")
print(f"Precisions: {result['precisions']}")

chrF (Character n-gram F-score)

단어 대신 문자 단위 n-gram으로 평가합니다. 형태가 풍부한 언어(한국어, 터키어 등)에서 BLEU보다 인간 판단과 높은 상관관계를 보입니다.
chrf = evaluate.load("chrf")

result = chrf.compute(predictions=predictions, references=references)
print(f"chrF: {result['score']:.2f}")

COMET (Crosslingual Optimized Metric for Evaluation of Translation)

원문, 기계 번역, 참조 번역을 모두 입력으로 받아 학습된 모델이 품질을 예측합니다. 인간 판단과의 상관관계가 가장 높습니다.
# COMET 설치: pip install unbabel-comet
from comet import download_model, load_from_checkpoint

model_path = download_model("Unbabel/wmt22-comet-da")
model = load_from_checkpoint(model_path)

data = [{
    "src": "The cat sat on the mat.",
    "mt": "고양이가 매트 위에 앉았다.",
    "ref": "고양이가 매트 위에 앉아 있었다.",
}]

output = model.predict(data, batch_size=8)
print(f"COMET score: {output.system_score:.4f}")

평가 지표 비교

지표단위참조 번역 필요원문 참조인간 상관범위
BLEU단어 n-gram필요불필요중간0~1
chrF문자 n-gram필요불필요높음0~100
COMET학습된 메트릭필요필요매우 높음-1~1
BERTScore토큰 임베딩필요불필요높음0~1
BLEU의 한계: BLEU는 n-gram 겹침만 측정하므로, 의미는 같지만 다른 표현을 사용하면 점수가 낮아집니다. 특히 한국어처럼 어순이 자유로운 언어에서는 BLEU보다 chrF 또는 COMET을 주요 지표로 사용하는 것이 권장됩니다.

AI/ML 활용과 최신 동향

LLM 기반 번역

GPT-4, Claude 같은 대규모 언어 모델은 별도 학습 없이도 높은 품질의 번역이 가능합니다.
from openai import OpenAI

client = OpenAI()

response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "system", "content": "You are a professional Korean-English translator."},
        {"role": "user", "content": "다음 한국어를 자연스러운 영어로 번역해주세요:\n\n"
                                     "인공지능 기술의 발전으로 기계 번역의 품질이 "
                                     "크게 향상되었습니다."},
    ],
)
print(response.choices[0].message.content)
LLM 번역의 장점:
  • 문맥을 깊이 이해한 자연스러운 번역
  • Few-shot으로 도메인 특화 번역 가능
  • 번역 스타일(격식체, 구어체) 제어 가능
LLM 번역의 한계:
  • 비용이 전용 모델 대비 높음
  • 지연 시간(Latency)이 긴 편
  • 대량 번역 시 비효율적
소규모/실시간: Helsinki-NLP/opus-mt-ko-en (가볍고 빠름). 고품질/다국어: facebook/nllb-200-distilled-600M (200+ 언어, 균형 잡힌 성능). 최고 품질: GPT-4o 또는 Claude API (비용 허용 시). 한국어 특화 모델로는 ETRI의 번역 모델도 고려하세요.
evaluate 라이브러리의 BLEU는 references를 리스트의 리스트로 받습니다 ([["참조 문장"]]). 단일 문자열이나 단일 리스트(["참조 문장"])를 전달하면 잘못된 결과가 나옵니다. 토크나이저 설정도 확인하세요 — 한국어는 형태소 단위 토큰화를 적용해야 정확한 BLEU 계산이 가능합니다.
공개 데이터셋: AI Hub 한국어-영어 병렬 코퍼스(160만 문장쌍), OPUS(오픈 병렬 코퍼스 모음), CCAligned. 주의: 저품질 병렬 데이터는 모델 성능을 저하시킵니다. 데이터 필터링(길이 비율, 언어 감지, 정렬 점수)이 필수입니다.

체크리스트

학습을 마치기 전에 아래 항목을 확인하세요.
  • 기계 번역의 3세대 발전 과정(RBMT → SMT → NMT)을 설명할 수 있는가?
  • Transformer가 번역 태스크에서 어떤 장점을 가지는지 설명할 수 있는가?
  • BLEU, chrF, COMET 지표의 차이를 이해하는가?
  • HuggingFace pipeline으로 번역 모델을 사용할 수 있는가?
  • 한국어 번역 시 BLEU보다 chrF/COMET이 권장되는 이유를 설명할 수 있는가?

다음 문서