다국어 NLP(Multilingual NLP)

하나의 모델, 100개 이상의 언어, 그중 대부분은 학습 데이터(training data)가 거의 없습니다. 교차 언어 전이(Cross-lingual transfer)는 2020년대의 실용적 기적입니다.

유형: Learn 언어: Python 선수 강의: Phase 5 · 04 (GloVe, FastText, Subword), Phase 5 · 11 (Machine Translation) 예상 시간: 약 45분

학습 목표

  • 다국어 모델(Multilingual Model)의 공유 어휘(shared vocabulary)와 공유 표현(shared representation)을 설명할 수 있습니다.
  • 영점 교차 언어 전이(Zero-shot Cross-lingual Transfer)와 소수 샷 파인튜닝(Few-shot Fine-tuning)의 차이를 이해합니다.
  • XLM-R, mT5, NLLB, Aya 같은 모델을 과제(task) 특성에 맞게 선택할 수 있습니다.
  • 저자원 언어(low-resource language)에서 토크나이제이션 비용(tokenization tax)과 언어별 평가(per-language evaluation)가 왜 중요한지 설명할 수 있습니다.

문제

영어(English)에는 라벨링된 예시(labeled example)가 수십억 개 있습니다. 우르두어(Urdu)에는 수천 개뿐입니다. 마이틸리어(Maithili)에는 거의 없습니다. 전 세계 사용자(global audience)를 대상으로 하는 실용적인 NLP 시스템은, 과제별 학습 데이터(task-specific training data)가 존재하지 않는 롱테일 언어(long-tail language)에서도 동작해야 합니다.

다국어 모델은 하나의 모델을 여러 언어에 동시에 학습시켜 이 문제를 해결합니다. 공유 표현 덕분에 모델은 고자원 언어(high-resource language)에서 배운 능력을 저자원 언어로 전이(transfer)할 수 있습니다. 예를 들어 영어 감성 분석(English sentiment analysis)으로 파인튜닝한 모델이, 우르두어에서도 별도 처리 없이(out of the box) 놀라울 만큼 좋은 감성 예측(sentiment prediction)을 만들어 냅니다. 이것이 바로 영점 교차 언어 전이이며, NLP가 세계로 배포되는 방식 자체를 바꿔 놓았습니다.

이 강의는 다국어 작업에 처음 들어선 팀이 자주 놓치는 트레이드오프(tradeoff), 대표 모델, 그리고 가장 자주 발이 걸리는 결정 한 가지, 즉 전이를 위한 출처 언어(source language) 선택을 다룹니다.

사전 테스트

2문제 · 이 강의를 시작하기 전에 얼마나 알고 있는지 확인해보세요

1.영어 감성 분석(English sentiment) 데이터로만 파인튜닝한 다국어 모델이 우르두어(Urdu) 라벨 없이도 우르두어 감성을 예측할 수 있게 하는 것은 무엇인가요?

2.다국어 NLP에서 영점 교차 언어 전이(zero-shot cross-lingual transfer)와 소수 샷 파인튜닝(few-shot fine-tuning)의 차이는 무엇인가요?

0/2 답변 완료

개념

multilingual embedding space cat (en) chat (fr) gato (es) Katze (de) बिल्ली (hi) dog (en) chien (fr) translations cluster. distant words stay distant. cross-lingual transfer fine-tune on English sentiment labels run on Hindi, Urdu, Swahili, French ... zero-shot transfer. add 100-500 target language examples accuracy 95-98% of English baseline few-shot fine-tuning. source language matters. Hindi source > English source for Marathi, Bengali, Nepali. Check LANGRANK / qWALS.

공유 어휘(Shared vocabulary). 다국어 모델은 모든 대상 언어(target language)의 텍스트로 학습한 SentencePiece 또는 WordPiece 토크나이저(tokenizer)를 사용합니다. 어휘는 언어 간에 공유됩니다. 같은 서브워드 단위(subword unit)가 친족 관계의 언어들에서 같은 형태소(morpheme)를 나타낼 수 있습니다. 영어와 이탈리아어의 anti-가 같은 토큰으로 매핑되는 식입니다.

공유 표현(Shared representation). 여러 언어에 대해 마스크 언어 모델링(masked language modeling)으로 사전 학습된 트랜스포머(transformer)는, 서로 다른 언어에서 의미적으로 유사한(semantically similar) 문장이 비슷한 은닉 상태(hidden state)를 만들어 내도록 학습합니다. mBERT, XLM-R, NLLB 모두 이런 성질을 보입니다. 영어 "cat"의 임베딩은 프랑스어 "chat", 스페인어 "gato" 근처에 군집(cluster)을 이루며, 전체 문장 임베딩(full-sentence embedding)에서도 같은 현상이 일어납니다.

영점 전이(Zero-shot transfer). 라벨링된 데이터가 있는 하나의 언어, 보통은 영어로 모델을 파인튜닝합니다. 추론(inference) 단계에서는 모델이 지원하는 다른 어떤 언어에도 그대로 실행합니다. 대상 언어의 라벨은 필요하지 않습니다. 유형론적으로 가까운(typologically related) 언어에서는 결과가 강하고, 멀리 떨어진 언어에서는 약합니다.

소수 샷 파인튜닝(Few-shot fine-tuning). 대상 언어의 라벨 예시 100500개를 추가합니다. 분류(classification) 과제에서는 영어 기준선(English baseline)의 9598% 수준까지 정확도가 뛰어오릅니다. 이것이 다국어 NLP에서 가장 비용 효율적인(cost-effective) 지렛대입니다.

모델

모델연도지원 범위비고
mBERT2018104개 언어Wikipedia로 학습. 최초의 실용 다국어 LM. 저자원 언어에는 약함.
XLM-R2019100개 언어Wikipedia보다 훨씬 큰 CommonCrawl로 학습. 교차 언어 기준선을 정립. Base 270M, Large 550M.
XLM-V2023100개 언어XLM-R에 1M 토큰 어휘(기존 250k 대비) 적용. 저자원 언어에 더 강함.
mT52020101개 언어다국어 생성(generation)을 위한 T5 architecture.
NLLB-2002022200개 언어Meta의 번역(translation) 모델. 55개 저자원 언어 포함.
BLOOM202246개 자연어 + 13개 프로그래밍 언어다국어로 학습된 오픈 176B LLM.
Aya-23202423개 언어Cohere의 다국어 LLM. 아랍어, 힌디어, 스와힐리어(Swahili)에 강함.

용도에 따라 고릅니다. 분류 과제에는 XLM-R-base가 합리적인 기본값(sane default)입니다. 생성 과제에서는 번역인지 자유 생성(open generation)인지에 따라 mT5 또는 NLLB를 고릅니다. LLM 스타일 작업에는 Aya-23이나 Claude를 명시적인 다국어 프롬프팅(multilingual prompting)과 함께 사용합니다.

출처 언어 선택(2026 연구)

대부분의 팀은 파인튜닝 출처 언어로 영어를 기본값으로 둡니다. 최근 연구(2026)는 이 기본값이 자주 틀린다는 사실을 보여줍니다.

언어 유사도(language similarity)는 단순한 말뭉치 크기(corpus size)보다 전이 품질(transfer quality)을 더 잘 예측합니다. 슬라브어(Slavic) 대상에서는 독일어(German)나 러시아어(Russian)가 영어보다 나을 때가 많습니다. 인도어계(Indic) 대상에서는 힌디어(Hindi)가 영어보다 나을 때가 많습니다. qWALS 유사도 지표(2026, World Atlas of Language Structures 특징 기반)는 이를 정량화합니다. LANGRANK(Lin et al., ACL 2019)는 이와 별개로 더 이른 시점에 제안된 방법으로, 언어학적 유사도, 말뭉치 크기, 계통적 친연성(genetic relatedness)을 조합해 후보 출처 언어들을 순위화합니다.

실용 규칙은 단순합니다. 대상 언어와 유형론적으로 가까운 고자원 언어(typologically close high-resource relative)가 있다면, 우선 그 언어로 먼저 파인튜닝해 본 뒤 영어 파인튜닝 결과와 비교해 보십시오.

직접 만들기

Step 1: 영점 교차 언어 분류

from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch

tok = AutoTokenizer.from_pretrained("joeddav/xlm-roberta-large-xnli")
model = AutoModelForSequenceClassification.from_pretrained("joeddav/xlm-roberta-large-xnli")


def classify(text, candidate_labels, hypothesis_template="This text is about {}."):
    scores = {}
    for label in candidate_labels:
        hypothesis = hypothesis_template.format(label)
        inputs = tok(text, hypothesis, return_tensors="pt", truncation=True)
        with torch.no_grad():
            logits = model(**inputs).logits[0]
        entail_score = torch.softmax(logits, dim=-1)[2].item()
        scores[label] = entail_score
    return dict(sorted(scores.items(), key=lambda x: -x[1]))


print(classify("I love this product!", ["positive", "negative", "neutral"]))
print(classify("मुझे यह उत्पाद पसंद है!", ["positive", "negative", "neutral"]))
print(classify("J'adore ce produit !", ["positive", "negative", "neutral"]))

하나의 모델, 세 언어, 동일한 API. 자연어 추론(Natural Language Inference; NLI) 데이터로 학습된 XLM-R은 함의 트릭(entailment trick)을 통해 분류 과제로 잘 전이됩니다.

Step 2: 다국어 임베딩 공간

from sentence_transformers import SentenceTransformer
import numpy as np

model = SentenceTransformer("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")

pairs = [
    ("The cat is sleeping.", "Le chat dort."),
    ("The cat is sleeping.", "El gato está durmiendo."),
    ("The cat is sleeping.", "Die Katze schläft."),
    ("The cat is sleeping.", "The dog is barking."),
]

for eng, other in pairs:
    emb_eng = model.encode([eng], normalize_embeddings=True)[0]
    emb_other = model.encode([other], normalize_embeddings=True)[0]
    sim = float(np.dot(emb_eng, emb_other))
    print(f"  {eng!r} <-> {other!r}: cos={sim:.3f}")

번역문은 임베딩 공간(embedding space)에서 서로 가깝게 놓이고, 의미가 다른 영어 문장은 더 멀리 놓입니다. 바로 이 성질이 교차 언어 검색(cross-lingual retrieval), 군집화(clustering), 유사도 계산을 가능하게 합니다.

Step 3: 소수 샷 파인튜닝 전략

from transformers import TrainingArguments, Trainer
from datasets import Dataset


def few_shot_finetune(base_model, base_tokenizer, examples):
    ds = Dataset.from_list(examples)

    def tokenize_fn(ex):
        out = base_tokenizer(ex["text"], truncation=True, max_length=128)
        out["labels"] = ex["label"]
        return out

    ds = ds.map(tokenize_fn)
    args = TrainingArguments(
        output_dir="out",
        per_device_train_batch_size=8,
        num_train_epochs=5,
        learning_rate=2e-5,
        save_strategy="no",
    )
    trainer = Trainer(model=base_model, args=args, train_dataset=ds)
    trainer.train()
    return base_model

대상 언어 예시가 100~500개라면 num_train_epochs=5learning_rate=2e-5가 안전한 기본값(safe default)입니다. 학습률(learning rate)을 더 높이면 다국어 정렬(multilingual alignment)이 무너져 사실상 영어 전용 모델이 되어 버립니다.

실제로 동작하는 평가

  • 검증 집합(held-out set)에서의 언어별 정확도. 합산하지 않습니다. 합산 지표는 롱테일 실패를 가려 버립니다.
  • 단일어(monolingual) 기준선과의 비교 평가. 데이터가 충분한 언어에서는, 처음부터 단일어로 학습한 모델이 다국어 모델을 이길 때가 있습니다. 반드시 검증해야 합니다.
  • 개체 단위(entity-level) 테스트. 대상 언어의 개체명(named entity)을 확인합니다. 다국어 모델은 라틴(Latin) 문자에서 멀리 떨어진 문자(script)에 대해 토크나이제이션이 약한 경우가 많습니다.
  • 교차 언어 일관성(cross-lingual consistency). 두 언어에서 동일한 의미는 동일한 예측을 내놓아야 합니다. 그 격차를 측정합니다.

사용해보기

2026년의 권장 스택은 다음과 같습니다.

과제권장
분류, 100개 언어XLM-R-base(~270M) 파인튜닝
영점 텍스트 분류joeddav/xlm-roberta-large-xnli
다국어 문장 임베딩sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2
번역, 200개 언어facebook/nllb-200-distilled-600M(11강 참고)
생성형 다국어 작업Claude, GPT-4, Aya-23, mT5-XXL
저자원 언어 NLPXLM-V 또는 관련 고자원 언어로 도메인 특화(domain-specific) 파인튜닝

성능이 중요하다면 대상 언어 파인튜닝 예산을 반드시 잡으십시오. 영점 추론은 출발점이지 최종 답이 아닙니다.

토크나이제이션 비용: 저자원 언어에서는 무엇이 잘못되는가

다국어 모델은 모든 언어에 대해 하나의 토크나이저를 공유합니다. 그 어휘는 영어, 프랑스어, 스페인어, 중국어, 독일어가 압도적으로 많은 말뭉치에서 학습됩니다. 이 지배적 집합 바깥의 언어에는 세 가지 비용이 조용히 누적됩니다.

  • 다산성 비용(Fertility tax). 저자원 언어 텍스트는 영어보다 단어당 훨씬 많은 토큰으로 쪼개집니다. 힌디어 한 문장은 같은 뜻의 영어 문장보다 35배 많은 토큰을 필요로 할 수 있습니다. 이 35배는 컨텍스트 윈도(context window), 학습 효율(training efficiency), 응답 지연(latency)을 동시에 갉아먹습니다.
  • 변형 복원 비용(Variant recovery tax). 오타(typo), 다이어크리틱 변형(diacritic variant), 유니코드 정규화(Unicode normalization) 불일치, 대소문자 변형 하나하나가 임베딩 공간에서 서로 무관한 콜드 스타트(cold-start) 시퀀스가 됩니다. 모델은 원어민에게는 명백한 철자 대응(orthographic correspondence)을 배우지 못합니다.
  • 용량 잠식 비용(Capacity spillover tax). 위 두 비용이 컨텍스트 위치(context position), 레이어 깊이(layer depth), 임베딩 차원(embedding dimension)을 소비합니다. 실제 추론(reasoning)에 남는 용량은, 동일한 모델에서 고자원 언어가 누리는 것보다 체계적으로 작아집니다.

실무에서 나타나는 증상은 다음과 같습니다. 힌디어에서 모델이 정상적으로 학습됩니다. 손실 곡선(loss curve)도 그럴듯하고 평가 perplexity도 합리적으로 보입니다. 그런데 운영 환경(production)의 출력이 미묘하게 틀립니다. 문장 중간에서 형태론(morphology)이 무너지고, 드문 굴절(rare inflection)은 끝내 회복되지 않습니다. 망가진 토크나이저는 데이터 스케일링만으로는 빠져나올 수 없습니다.

완화 방법은 다음과 같습니다. 대상 언어 커버리지가 좋은 토크나이저를 고릅니다. XLM-V의 1M 토큰 어휘는 그에 대한 직접적인 해결책입니다. 학습을 시작하기 전에 검증용 대상 언어 텍스트에서 토크나이제이션 다산성을 측정합니다. 정말로 롱테일에 해당하는 문자에는 바이트 단위 폴백(byte-level fallback)을 사용합니다. SentencePiece의 byte_fallback=True, 또는 GPT-2 스타일의 byte-level BPE를 활용하면 어떤 입력도 사전 외 단어(out-of-vocabulary; OOV)가 되지 않습니다.

산출물 만들기

outputs/skill-multilingual-picker.md로 저장합니다.

---
name: multilingual-picker
description: Pick source language, target model, and evaluation plan for a multilingual NLP task.
version: 1.0.0
phase: 5
lesson: 18
tags: [nlp, multilingual, cross-lingual]
---

Given requirements (target languages, task type, available labeled data per language), output:

Guide the student in Korean.

1. Source language for fine-tuning. Default English; check LANGRANK or qWALS if target language has a typologically close high-resource language.
2. Base model. XLM-R (classification), mT5 (generation), NLLB (translation), Aya-23 (generative LLM).
3. Few-shot budget. Start with 100-500 target-language examples if available. Zero-shot only if labeling is infeasible.
4. Evaluation plan. Per-language accuracy (not aggregate), cross-lingual consistency, entity-level F1 on non-Latin scripts.

Refuse to ship a multilingual model without per-language evaluation — aggregate metrics hide long-tail failures. Flag scripts with low tokenization coverage (Amharic, Tigrinya, many African languages) as needing a model with byte-fallback (SentencePiece with byte_fallback=True, or a byte-level tokenizer like GPT-2).

이 스킬은 대상 언어, 과제 유형, 언어별 라벨 데이터를 입력받아 출처 언어, 베이스 모델(base model), 소수 샷 예산(few-shot budget), 평가 계획을 결정하게 합니다. 합산 지표만 보고 다국어 모델을 배포하지 못하도록 막고, 토크나이제이션 커버리지가 낮은 문자에 대해서는 바이트 폴백이 필요한지 확인하게 합니다.

연습문제

  1. 쉬움. 영어, 프랑스어, 힌디어, 아랍어(Arabic)에 대해 언어별로 10문장씩 영점 분류 파이프라인을 실행합니다. 각 언어의 정확도를 보고합니다. 프랑스어에서는 강하고, 힌디어에서는 그럭저럭, 아랍어에서는 들쭉날쭉한 결과가 보여야 합니다.
  2. 중간. paraphrase-multilingual-MiniLM-L12-v2로 작은 다언어 혼합 말뭉치(mixed-language corpus) 위에 교차 언어 검색기(cross-lingual retriever)를 만듭니다. 질의는 영어로 하고, 어떤 언어로 된 문서든 검색되도록 합니다. Recall@5를 측정합니다.
  3. 어려움. 힌디어 분류 과제에서 영어 출처 파인튜닝과 힌디어 출처 파인튜닝을 비교합니다. 두 설정 모두 500개의 대상 언어 예시로 소수 샷 파인튜닝을 진행합니다. 어떤 출처 언어가 더 나은 힌디어 정확도를 만들고, 그 차이가 얼마인지 보고합니다. 이것이 LANGRANK 가설의 축소판 실험입니다.

핵심 용어

용어흔한 설명실제 의미
다국어 모델(Multilingual Model)하나의 모델, 여러 언어여러 언어에서 어휘와 파라미터를 공유하는 모델.
교차 언어 전이(Cross-lingual Transfer)한 언어로 학습하고 다른 언어에서 실행출처 언어에서 파인튜닝한 뒤, 대상 언어의 라벨 없이 대상 언어에서 평가.
영점 전이(Zero-shot)대상 언어 라벨 없음대상 언어에 대한 파인튜닝 없이 그대로 전이.
소수 샷(Few-shot)적은 양의 대상 언어 라벨파인튜닝에 사용하는 100~500개의 대상 언어 예시.
mBERT최초의 다국어 LMWikipedia로 사전 학습된 104개 언어 BERT.
XLM-R표준 교차 언어 기준선CommonCrawl로 사전 학습된 100개 언어 RoBERTa.
NLLBMeta의 200개 언어 번역 모델No Language Left Behind. 55개 저자원 언어를 포함.

더 읽을거리

실습 코드

이 강의의 실습 코드 1개

main
Code

산출물

이 강의에서 생성된 프롬프트, 스킬, 코드 산출물 1개

multilingual-picker

Pick source language, target model, and evaluation plan for a multilingual NLP task.

Skill

확인 문제

3문제 · 모두 맞추면 완료 표시가 가능합니다

1.다국어 토크나이제이션(tokenization) 후 힌디어 문장이 같은 뜻의 영어 문장보다 3~5배 많은 토큰을 필요로 합니다. 이 '다산성 비용(fertility tax)'의 실질적 결과는 무엇인가요?

2.팀이 슬라브어(Slavic) 대상 분류 과제를 위해 XLM-R을 영어로 파인튜닝했습니다. 최근 연구가 더 나은 접근법을 제안합니다. 먼저 무엇을 시도해야 하나요?

3.다국어 모델이 20개 언어에 걸쳐 합산 정확도(aggregate accuracy)가 높지만, 암하라어(Amharic)와 티그리냐어(Tigrinya)에서는 성능이 낮습니다. 어떤 평가 실수가 발생하고 있을 가능성이 높으며, 무엇을 바꿔야 하나요?

0/3 답변 완료

추가 문제 풀기

AI가 강의 내용을 바탕으로 새로운 문제를 생성합니다