검색
← 모듈 로드맵

서브워드 단위로 드문 단어 번역하기 (BPE 토큰화)

논문 · 준전문가 · Rico Sennrich 외 2명 · 2015 · arXiv

원제 · Neural Machine Translation of Rare Words with Subword Units

BPE로 드문 단어를 서브워드 조각으로 쪼개 UNK 없는 번역을 만든 토큰화의 출발점

먼저 알아야 할 것

어휘와 UNK신경망 번역(어텐션 인코더-디코더)문자 n-그램BLEU 점수

다루는 내용

이 논문은 신경망 번역의 고정 어휘 문제를 풀기 위해 드문 단어와 처음 보는 단어를 서브워드 조각의 나열로 표현합니다. 압축 알고리즘 BPE를 바꿔 가장 잦은 인접 글자 쌍을 병합 횟수만큼 반복해 합치고, 병합 횟수 하나로 어휘 크기를 정합니다. WMT 15 영어→독일어 · 영어→러시아어에서 사전 물러서기 기준선보다 드문 단어 번역이 크게 좋아졌고, 원문 · 번역문을 합쳐 배운 공동 BPE가 가장 일관적이었습니다.

초록

저자가 쓴 초록을 옮긴 것입니다.

신경망 기계 번역(NMT) 모델은 보통 고정된 어휘로 작동하지만, 번역은 어휘가 열려 있는 문제입니다. 이전 연구는 사전에 없는 단어를 번역할 때 사전 찾기로 물러서는(back-off) 방식을 썼습니다. 이 논문은 더 단순하고 효과적인 방법을 소개합니다. 드문 단어와 모르는 단어를 서브워드(subword) 단위의 나열로 인코딩해, NMT 모델이 열린 어휘 번역을 할 수 있게 만드는 것입니다. 이는 여러 종류의 단어가 단어보다 작은 단위로 번역될 수 있다는 직관에 바탕을 둡니다. 예를 들어 이름(글자 복사나 음차), 합성어(구성 요소별 번역), 같은 어원을 가진 단어와 외래어(음운 · 형태 변환)가 그렇습니다. 단순한 문자 n-그램 모델과 바이트 쌍 인코딩(BPE) 압축 알고리즘에 기반한 분할 등 여러 단어 분할 기법이 얼마나 적합한지 논의하고, WMT 15 영어→독일어와 영어→러시아어 번역 과제에서 서브워드 모델이 사전 물러서기 기준선보다 각각 1.1, 1.3 BLEU 높다는 것을 실험으로 보입니다.

해설

서브워드 단위로 드문 단어 번역하기 (BPE 토큰화)

드문 단어와 처음 보는 단어를 "자주 나오는 글자 조각"의 나열로 쪼개 번역하게 만든 논문입니다. 압축 알고리즘 BPE를 단어 분할에 가져와, 고정된 크기의 어휘로 사실상 모든 단어를 표현할 수 있게 했습니다. 오늘날 GPT 계열을 비롯한 많은 언어 모델의 토큰화가 이 방식에서 나왔습니다.

항목내용
원제Neural Machine Translation of Rare Words with Subword Units
저자Rico Sennrich 외 2명 (에든버러대)
발표2015 · ACL 2016 · arXiv 1508.07909
트랙 · 수준NLP·트랜스포머 · 중급
먼저 알면 좋은 것어휘(vocabulary)와 UNK, 신경망 번역(인코더-디코더 + 어텐션), 문자 n-그램, BLEU 점수

들어가기 전에

이 해설은 아래 내용을 안다고 보고 씁니다. 처음이라면 먼저 읽고 오면 수식과 손계산을 훨씬 쉽게 따라올 수 있습니다.

한눈에 보기

  • 단어 단위 모델이 왜 "사전 밖 단어(UNK)" 문제를 피할 수 없는지 알게 됩니다.
  • BPE가 "가장 자주 붙어 나오는 두 조각을 하나로 합치기"를 반복해 어휘를 만드는 과정을 손으로 따라 해 보게 됩니다.
  • 학습 때 본 적 없는 단어도 조각으로 쪼개 표현할 수 있는 이유를 알게 됩니다.
  • 원문 · 번역문 어휘를 합쳐 BPE를 배우는 "공동 BPE"가 왜 더 나은지 알게 됩니다.

초록 (번역)

신경망 기계 번역(NMT) 모델은 보통 고정된 어휘로 작동하지만, 번역은 어휘가 열려 있는 문제입니다. 이전 연구는 사전에 없는 단어를 번역할 때 사전 찾기로 물러서는(back-off) 방식을 썼습니다. 이 논문은 더 단순하고 효과적인 방법을 소개합니다. 드문 단어와 모르는 단어를 서브워드(subword) 단위의 나열로 인코딩해, NMT 모델이 열린 어휘 번역을 할 수 있게 만드는 것입니다. 이는 여러 종류의 단어가 단어보다 작은 단위로 번역될 수 있다는 직관에 바탕을 둡니다. 예를 들어 이름(글자 복사나 음차), 합성어(구성 요소별 번역), 같은 어원을 가진 단어와 외래어(음운 · 형태 변환)가 그렇습니다. 단순한 문자 n-그램 모델과 바이트 쌍 인코딩(BPE) 압축 알고리즘에 기반한 분할 등 여러 단어 분할 기법이 얼마나 적합한지 논의하고, WMT 15 영어→독일어와 영어→러시아어 번역 과제에서 서브워드 모델이 사전 물러서기 기준선보다 각각 1.1, 1.3 BLEU 높다는 것을 실험으로 보입니다.

무엇을 풀었나

당시 신경망 번역 모델의 어휘는 보통 3만~5만 단어로 제한됐습니다. 그런데 실제 번역에는 어휘 밖 단어가 끝없이 나옵니다. 특히 독일어처럼 단어를 이어 붙여 새 단어를 만드는 언어(합성어)가 그렇습니다. 논문의 예인 독일어 "Abwasser|behandlungs|anlage(하수 처리 시설)"는 한 단어지만 세 조각으로 보면 뜻이 분명합니다.

기존 해결책은 사전 물러서기(back-off dictionary)였습니다. 모델이 UNK를 내면, 정렬된 원문 단어를 사전에서 찾아 바꾸거나 그대로 복사합니다. 저자들은 이 방식의 가정이 자주 깨진다고 지적합니다.

  1. 원문 단어와 번역 단어가 늘 1:1로 대응하지 않습니다(합성어처럼).
  2. 학습 때 본 적 없는 단어는 번역하지도, 생성하지도 못합니다.
  3. 이름을 그대로 복사하는 것은 같은 문자를 쓰는 언어끼리만 통합니다. 러시아어처럼 문자가 다르면 음차가 필요합니다.

저자들이 독일어 학습 데이터에서 드문 단어 100개(상위 5만 단어 밖)를 살펴보니, 합성어 56개 · 이름 21개 · 같은 어원 외래어 6개 · 투명한 접사 5개 · 숫자 1개 · 컴퓨터 언어 식별자 1개였습니다. 대부분이 더 작은 단위로 번역할 수 있는 단어였습니다.

전체 흐름

mermaid
flowchart LR
  A[학습 말뭉치] --> B[단어 빈도 사전<br/>단어를 글자 + 끝 표시로]
  B --> C[가장 잦은 인접 쌍 세기]
  C --> D[그 쌍을 새 기호로 합치기]
  D -->|병합 횟수만큼 반복| C
  D --> E[병합 규칙 목록]
  E --> F[새 문장의 단어를 글자로 쪼갠 뒤<br/>규칙 순서대로 병합]
  F --> G[서브워드 열<br/>예: low er]
  G --> H[신경망 번역 모델<br/>어텐션 인코더-디코더]
  H --> I[서브워드 출력을<br/>다시 단어로 합치기]

핵심 아이디어

1. 단어보다 작은 단위로 번역한다

한 문장 직관: 처음 보는 "태양계"라는 단어도 "태양"과 "계"를 알면 번역할 수 있듯, 모델도 조각을 알면 새 단어를 다룰 수 있습니다.

단계별 설명

  1. 자주 나오는 단어는 통째로 하나의 기호로 둡니다.
  2. 드문 단어는 자주 나오는 조각(서브워드)들의 나열로 쪼갭니다.
  3. 번역 모델은 단어 대신 이 조각 열을 입력받고 조각 열을 출력합니다.
  4. 출력 조각을 다시 이어 붙이면 단어가 됩니다. 단어 끝 표시가 있어 원래 띄어쓰기를 되살릴 수 있습니다.

논문이 꼽는 "조각으로 번역 가능한" 단어 유형은 세 가지입니다.

유형예 (논문)조각 단위로 되는 이유
이름Barack Obama같은 문자면 복사, 다르면 글자 단위 음차
같은 어원 · 외래어claustrophobia → Klaustrophobie언어 사이에 규칙적인 글자 변화
형태가 복잡한 단어solar system → Sonnensystem (Sonne + System)형태소를 따로 번역해 조합

왜 이렇게 했나: 단어마다 고정 길이 벡터 하나를 주는 대신 가변 길이 조각 열로 두면, 어텐션이 매 단계 다른 조각을 볼 수 있습니다. 논문은 이것이 긴 합성어의 정보 병목을 피하게 해 준다고 설명합니다.

2. BPE — 자주 붙어 다니는 쌍을 합친다

한 문장 직관: 문서를 압축할 때 자주 나오는 "th"를 기호 하나로 바꾸듯, 글자 쌍 중 가장 흔한 것을 새 기호로 합치는 일을 정해진 횟수만큼 반복합니다.

원래 바이트 쌍 인코딩(BPE, Byte Pair Encoding)은 가장 흔한 바이트 쌍을 안 쓰는 바이트 하나로 바꾸는 압축 기법입니다. 저자들은 바이트 대신 글자와 글자 열을 합치도록 바꿨습니다.

단계별 설명

  1. 기호 어휘를 글자 어휘로 시작합니다. 각 단어는 글자 열 + 단어 끝 기호(·)로 씁니다.
  2. 모든 인접 기호 쌍의 빈도를 셉니다(단어 빈도로 가중).
  3. 가장 잦은 쌍 ('A', 'B')를 모두 새 기호 'AB'로 바꿉니다.
  4. 2~3을 정해 둔 병합 횟수만큼 반복합니다.
  5. 단어 경계를 넘는 쌍은 세지 않습니다. 그래서 문장 전체가 아니라 단어 빈도 사전만으로 학습할 수 있습니다.

최종 어휘 크기는 다음처럼 정해집니다.

∣V최종∣=∣V글자∣+M|V_{\text{최종}}| = |V_{\text{글자}}| + M
기호뜻
∣V글자∣\lvert V_{\text{글자}} \rvert처음 글자 어휘의 크기
MM병합 횟수 — BPE의 유일한 하이퍼파라미터
∣V최종∣\lvert V_{\text{최종}} \rvert학습이 끝난 뒤 기호 어휘의 크기

숫자로 해 보기 (해설용 예, 논문 그림과 다른 단어)

단어 빈도가 hug 10번, pug 5번, hugs 5번이라고 합시다. 처음에는 h u g ·(10), p u g ·(5), h u g s ·(5)입니다.

단계쌍 빈도 (일부)합칠 쌍결과
1u g: 20 · h u: 15 · g ·: 15u + gh ug ·, p ug ·, h ug s ·
2h ug: 15 · ug ·: 15 · p ug: 5h + ug (동점 중 하나)hug ·, p ug ·, hug s ·
3hug ·: 10 · p ug: 5 · hug s: 5hug + ·hug·, p ug ·, hug s ·

글자 6개(h, u, g, p, s, ·)에 병합 3번이니 어휘는 9개입니다. 이제 학습 때 없던 pugs가 들어오면 p u g s · → 규칙 1을 적용해 p ug s ·가 됩니다. UNK 없이 아는 조각으로 표현됩니다. 논문의 그림에서도 사전 밖 단어 "lower"가 low er·로 쪼개집니다.

왜 BPE인가: 허프만 부호 같은 다른 압축법도 단어를 가변 길이로 부호화할 수 있지만, 그 부호는 사람이 읽을 수 있는 조각이 아닙니다. BPE의 기호는 글자 n-그램이라 뜻 있는 조각으로 남고, 모델이 그것을 바탕으로 새 단어를 번역 · 생성할 수 있다는 것이 논문의 설명입니다.

3. 어휘 크기와 문장 길이의 줄다리기

한 문장 직관: 조각을 잘게 쪼갤수록 어휘는 작아지지만 문장이 길어지고, 덜 쪼갤수록 문장은 짧지만 어휘가 커집니다.

단계별 설명

  1. 신경망은 어휘가 작을수록 메모리와 시간을 아낍니다.
  2. 하지만 문장(토큰 열)이 길어지면 계산이 늘고, 모델이 정보를 더 먼 거리로 전해야 합니다.
  3. 글자 단위는 어휘가 가장 작지만 문장이 5배 넘게 길어집니다.
  4. BPE는 자주 나오는 단어를 통째로 남기고 드문 단어만 쪼개, 두 가지를 함께 줄입니다.

독일어 학습 말뭉치에서 분할 방법별 통계는 다음과 같습니다(논문 표를 요약).

분할 방법토큰 수어휘(종류) 수개발 세트 UNK 수
분할 안 함(단어)1억175만1,079
글자5억 5천만3,0000
글자 2-그램3억 600만2만34
합성어 분할1억 200만110만643
Morfessor1억 900만54만 4천237
BPE1억 1,200만6만 3천0
공동 BPE1억 1,100만8만 2천32

통계 번역에서 쓰던 형태소 · 합성어 분할기는 어휘를 조금만 줄이고 UNK 문제를 풀지 못했습니다. BPE(병합 59,500번)는 토큰 수를 단어 수준에 가깝게 지키면서 어휘를 6만 3천으로 줄였고, UNK는 0이었습니다.

숫자로 해 보기 (해설용): 단어 "lowest"는 단어 단위면 토큰 1개, 글자 단위면 6개(+ 끝 표시), BPE에서 low est·로 쪼개지면 2개입니다. 같은 문장이 글자 단위로는 몇 배 길어지지만 BPE로는 조금만 길어집니다.

4. 공동 BPE — 두 언어를 같이 쪼갠다

한 문장 직관: 원문과 번역문에서 같은 이름을 같은 위치에서 자르면, 모델이 조각끼리 대응을 배우기 쉽습니다.

단계별 설명

  1. 방법 A(독립 BPE): 원문 어휘와 번역문 어휘로 BPE를 따로 배웁니다.
  2. 방법 B(공동 BPE): 두 언어의 학습 데이터를 이어 붙여 BPE를 한 번 배웁니다.
  3. 러시아어처럼 문자가 다르면, 러시아어 어휘를 ISO-9로 라틴 문자로 바꿔 공동 BPE를 배우고, 병합 규칙을 다시 키릴 문자로 되돌려 적용합니다.

왜 공동 BPE인가: 독립 BPE는 텍스트 · 어휘가 더 작고 각 조각이 해당 언어 데이터에 나온다는 보장이 강합니다. 하지만 같은 이름이 두 언어에서 다르게 잘릴 수 있습니다. 논문의 예에서 독립 BPE는 "Mirzayeva"를 영어 Mirz|ayeva, 러시아어 Mir|za|eva로 다르게 잘랐고, 이런 불일치가 글자 삽입 · 삭제 오류로 이어졌습니다. 공동 BPE는 분할이 더 일관됐습니다.

5. 평가 지표 — 드문 단어를 따로 잰다

드문 단어는 테스트 세트의 9~11%에 불과해 BLEU에는 잘 드러나지 않습니다. 그래서 논문은 BLEU와 함께 문자 n-그램 F3 점수인 chrF3, 그리고 단어 빈도 구간별 유니그램 F1을 보고합니다.

F1=2PRP+R,Fβ=(1+β2) PRβ2P+RF_1 = \frac{2PR}{P + R}, \qquad F_\beta = \frac{(1 + \beta^2)\,PR}{\beta^2 P + R}
기호뜻
PP정밀도 — 모델이 낸 단어 중 정답에 있는 비율(유니그램 F1에서는 잘라 낸 정밀도)
RR재현율 — 정답 단어 중 모델이 맞힌 비율
β\beta재현율에 줄 가중(chrF3은 β=3\beta = 3, 재현율을 더 중시)

(위 FβF_\beta 식은 표준 정의를 설명용으로 적은 것입니다.)

숫자로 해 보기 (해설용): P=0.6P = 0.6, R=0.3R = 0.3이면 F1=2×0.18/0.9=0.40F_1 = 2 \times 0.18 / 0.9 = 0.40입니다. 같은 값으로 F3=10×0.18/(9×0.6+0.3)=1.8/5.7≈0.32F_3 = 10 \times 0.18 / (9 \times 0.6 + 0.3) = 1.8 / 5.7 \approx 0.32입니다. 재현율이 낮으면 F3F_3가 더 크게 깎입니다.

결과

실험 설정: WMT 2015 영어→독일어(문장 쌍 420만, 약 1억 토큰), 영어→러시아어(260만, 약 5천만 토큰). 바다나우 어텐션 구조, 은닉 1,000 · 임베딩 620, Adadelta · 미니배치 80, 약 7일 학습, 빔 12. 단일 모델은 개발 세트 최고 모델, 앙상블은 8개 모델입니다.

영어→독일어 (newstest2015)

시스템어휘(원문/번역)BLEU 단일BLEU 앙상블chrF3 앙상블드문 단어 F1사전 밖(OOV) F1
단어 + UNK (WUnk)30만 / 50만20.622.848.920.40.0
단어 + 사전 물러서기 (WDict)30만 / 50만22.024.252.436.836.8
글자 2-그램 + 5만 단어 목록 (C2-50k)6만 / 6만22.825.353.540.530.9
BPE (BPE-60k)6만 / 6만21.524.553.940.929.3
공동 BPE (BPE-J90k)9만 / 9만22.824.754.141.833.6

영어→러시아어 (newstest2015)

시스템BLEU 앙상블chrF3 앙상블드문 단어 F1OOV F1
WDict22.851.026.56.6
C2-50k24.151.627.817.4
BPE-60k23.652.729.715.6
BPE-J90k24.153.029.718.3
  • 모든 서브워드 시스템이 사전 물러서기 없이도 기준선보다 드문 단어 F1이 높았습니다(영독 36.8% → 41.8%, 영러 26.5% → 29.7%).
  • 서브워드 앙상블은 WDict보다 BLEU 0.3~1.3, chrF3 0.6~2 높았습니다. 영러에서 BPE-J90k는 WDict보다 BLEU 1.3, chrF3 2.0 높았습니다.
  • 사전 밖 단어는 영독에서 "그대로 복사"가 잘 통해 기준선도 강했지만, 문자가 다른 영러에서는 서브워드 모델이 훨씬 나았습니다.
  • 분석 그래프에서 같은 크기 어휘라도 드문 단어를 통째로 두기보다 조각으로 쪼갤 때 성능이 더 안정적이었습니다. 논문은 조각이 단어보다 덜 희소하기 때문이라고 봅니다.

왜 중요한가 · 이후 영향

  • UNK 없는 모델: 고정 크기 어휘로 열린 어휘를 다루는 길을 열었습니다. 이후 신경망 번역과 언어 모델 대부분이 서브워드 토큰화를 기본으로 씁니다.
  • LLM 토큰화의 뿌리: GPT 계열이 쓰는 바이트 수준 BPE, 그리고 여러 모델이 쓰는 서브워드 토크나이저가 같은 생각에서 나왔습니다. "토큰 수"로 요금을 매기는 지금의 LLM API도 결국 이런 조각 단위를 셉니다.
  • 간단함: 하이퍼파라미터가 병합 횟수 하나뿐이고, 공개 코드(subword-nmt)가 널리 쓰였습니다.

한계 · 주의할 점

  • 어휘 크기 선택이 임의적입니다. 저자들도 병합 횟수는 이전 연구와 비교하려고 정한 것이며, 언어 쌍과 데이터 양에 맞는 최적값을 자동으로 찾는 것은 남은 과제라고 밝힙니다.
  • 뜻과 맞지 않는 분할: BPE는 빈도만 보므로 형태소 경계와 다르게 자르기도 합니다(예: Forsch|ungsinstitu|ten). 그래도 번역은 맞게 나온 예가 있지만, 데이터가 부족한 단어는 엉뚱하게 번역되기도 했습니다.
  • BLEU 개선 폭은 작습니다. 드문 단어가 테스트의 9~11%라 전체 BLEU 차이는 0.3~1.3 정도입니다. 저자들은 BLEU · chrF3가 드문 단어의 효과를 과소평가한다고 봅니다.
  • 실행마다 편차: 개발 세트에서 모델 사이 최대 1 BLEU 차이가 있었다고 논문이 밝힙니다.
  • 한국어 등 다른 언어: 이 논문의 실험은 독일어 · 러시아어뿐입니다. 다른 언어에서의 효과는 이 논문이 보여 주지 않습니다.

이어서 읽을 것

용어 정리

용어쉬운 뜻
어휘(vocabulary)모델이 알고 있는 기호(단어 · 조각)의 목록
UNK어휘에 없는 단어를 대신하는 "모름" 기호
OOV(Out-Of-Vocabulary)이 논문에서는 학습 데이터에 한 번도 나오지 않은 단어
열린 어휘(open vocabulary)어떤 단어든 표현할 수 있는 상태
서브워드(subword)단어보다 작고 글자보다 큰 조각
BPE(바이트 쌍 인코딩)가장 잦은 인접 쌍을 하나로 합치기를 반복하는 방법
병합(merge) 횟수BPE에서 쌍 합치기를 몇 번 할지 — 어휘 크기를 정함
공동 BPE(joint BPE)원문 · 번역문 데이터를 합쳐 한 번에 배운 BPE
사전 물러서기(back-off dictionary)모델이 UNK를 내면 사전에서 찾아 바꾸는 방식
음차(transliteration)다른 문자로 소리를 옮겨 적는 것
chrF3문자 n-그램 기준 F3 점수(재현율 중시)
유니그램 F1단어 하나 단위의 정밀도 · 재현율 조화 평균

스스로 점검

  1. 단어 단위 신경망 번역에서 사전 물러서기가 잘 안 되는 경우를 두 가지 들어 보세요.

    합성어처럼 원문 · 번역 단어가 1:1로 대응하지 않을 때, 그리고 러시아어처럼 문자가 달라 이름을 그대로 복사할 수 없고 음차가 필요할 때입니다.

  2. BPE에서 어휘 크기는 무엇으로 정해지나요?

    처음 글자 어휘 크기에 병합 횟수를 더한 값입니다. 병합 횟수가 유일한 하이퍼파라미터입니다.

  3. 공동 BPE가 독립 BPE보다 나았던 이유는 무엇인가요?

    두 언어에서 같은 이름 · 단어를 같은 방식으로 잘라 조각 대응을 배우기 쉬웠기 때문입니다. 독립 BPE는 같은 이름을 언어마다 다르게 잘라 음차 오류가 생겼습니다.

다음에 볼 것

이 글을 이해했다면 이어서 보면 좋은 항목입니다.

출처

AI 원리부터 이해하기 · NLP·트랜스포머 모듈

NLP·트랜스포머 모듈 학습

이 글은 NLP·트랜스포머 모듈의 학습 자료입니다. 전체 23개 자료 중 9번째입니다.

AI 기초 과정은 현재 진도 저장을 지원하지 않습니다.

출처·원문

원문 보기

요약만

arXiv (논문별 상이)

arXiv 1508.07909