[kakao x goorm] Beam Search, Subword Tokenization, BLEU Score까지
오늘은 기계 번역 시스템을 구성하는 핵심 기술 요소들에 대해 전반적으로 학습한 하루였다. 문장을 생성하는 디코더의 동작 방식부터 시작해, 단어의 표현을 어떻게 다루어야 효율적인지를 고민하는 토크나이징 방식, 그리고 생성된 문장의 품질을 객관적으로 평가하는 BLEU Score까지, 번역 모델이 실제로 동작하는 전 과정을 구성하는 이론들을 차근히 짚었다.
디코딩 전략의 딜레마: 단어 하나가 전부를 망칠 수 있다
기계 번역에서 가장 핵심적인 모델 중 하나는 Seq2Seq 구조이다. 이 구조에서 디코더는 인코더가 생성한 문맥 정보를 바탕으로 하나의 문장을 생성해 나간다. 그런데 이 디코더는 단어를 한꺼번에 출력하지 않는다. 매 시점(step)마다 한 단어씩 예측하며 문장을 완성해 간다. 따라서 매 시점의 선택은 다음 단어에 영향을 미치고, 이는 결국 전체 문장의 품질에 직접적으로 영향을 준다.
이때 가장 단순한 방식은 매 시점마다 가장 높은 확률의 단어를 선택하는 Greedy Decoding이다. 구현이 간단하고 빠르다는 장점이 있지만, 앞선 선택이 잘못되었더라도 되돌릴 수 없다는 치명적인 단점이 있다. 마치 미로에서 첫 걸음을 잘못 딛는 순간, 그 이후의 경로가 전부 꼬이는 것처럼, 한 단어의 선택이 전체 문장을 오염시킬 수 있다.
Beam Search: 탐욕을 버리고 가능성을 추적하라
Greedy 방식의 단점을 보완하기 위해 등장한 전략이 바로 Beam Search Decoding이다. 이 방식은 단 하나의 후보만을 추적하는 것이 아니라, k개의 후보 문장을 병렬적으로 추적하며, 매 시점마다 가장 유망한 경로만을 유지한다. 이를 통해 Greedy가 놓칠 수 있는 더 좋은 문장 후보를 확보할 수 있다.
Beam Search의 핵심 개념
- Beam Width k는 유지할 후보 문장의 수를 의미한다. (보통 5~10)
- 각 후보 문장마다 다음 단어의 확률을 예측해 k × V개의 확장 후보 생성
- 누적 확률이 높은 상위 k개의 조합만 선택하여 다음 단계로 전달
- <eos> 토큰을 포함한 문장은 종료되며 후보군으로 저장됨
이 방식은 Greedy보다 성능이 높고, Exhaustive Search보다 계산 비용이 적다. 실제 상용 번역기 대부분에서도 이 방식을 채택하고 있으며, Transformer 구조에서도 기본 디코딩 전략으로 사용된다.
적용상의 고려 사항
- Beam Width가 너무 작으면 Greedy와 유사한 결과가 나온다
- 너무 크면 계산량 증가와 함께 오히려 중복된 후보군만 남게 되어 성능이 저하될 수도 있다
- 확률을 로그로 변환하거나 길이 정규화를 통해 짧은 문장의 우세 현상을 방지해야 한다
Subword Tokenization: 단어를 잘게 쪼개다
기계 번역 모델이 학습할 수 있는 단어 집합의 크기에는 물리적인 한계가 있다. 일반적으로 수만 개 수준(예: 32K, 50K)의 vocabulary를 설정하지만, 현실 세계의 언어는 새로운 단어, 오타, 고유명사, 합성어 등으로 넘쳐난다. 이로 인해 발생하는 문제를 OOV(Out-of-Vocabulary) 문제라고 부르며, 이는 모델 성능 저하의 주요 원인이 된다.
이 문제를 해결하기 위한 현실적인 해법이 바로 서브워드(Subword) 단위의 토크나이징이다. 단어 전체가 아니라 단어 조각을 토큰으로 다루는 방식으로, 희귀 단어도 조각내어 학습 및 예측이 가능하다.
BPE (Byte Pair Encoding)의 원리
BPE는 자주 등장하는 문자 쌍(byte pair)을 병합해 하나의 새로운 토큰으로 만드는 방식이다. 처음에는 모든 단어를 문자 단위로 쪼갠 후, 가장 자주 등장하는 문자 쌍을 반복적으로 합치며 단어 집합을 구성해간다.
예를 들어 l o w e r, l o w e s t처럼 나타나는 단어가 많다면, l o w가 자주 등장하는 것이므로 이를 low라는 새로운 서브워드로 만든다. 이런 방식으로 est, ing, un 등도 하나의 토큰이 될 수 있다.
BPE의 장점
- Vocabulary에 없는 단어도 조합 가능한 조각으로 표현 가능
- 한국어, 일본어처럼 어절이 긴 언어에도 유리
- 훈련과 추론에서의 일관성 유지
- 모델의 파라미터 수를 줄이면서도 언어적 다양성 확보
요즘은 BPE 외에도 WordPiece (BERT에서 사용), Unigram Language Model 기반 SentencePiece (T5, mT5 등에서 사용) 등 다양한 변형 기법이 있다. 하지만 핵심 아이디어는 동일하다. 단어를 조각내고, 자주 나오는 조각은 하나의 의미 단위로 승격시키는 것이다.
BLEU Score: 사람 없이 번역 품질을 평가할 수 있을까?
기계 번역 결과가 얼마나 우수한지를 판단하기 위해서는 정답과의 유사도를 측정해야 한다. 이때 가장 널리 사용되는 자동 평가 지표가 BLEU (Bilingual Evaluation Understudy) Score다.
BLEU는 사람이 번역한 문장(reference)과 기계가 생성한 문장(candidate) 사이의 n-gram 겹침 정도를 기반으로 계산된다. 정확히는 단어 단위 n-gram의 Precision 평균을 구하고, 거기에 길이 패널티(Brevity Penalty)를 곱한 값이 된다.
수식으로 이해하는 BLEU
$$
\text{BLEU} = BP \times \exp\left( \sum_{n=1}^{N} w_n \log p_n \right)
$$
$$
\text{where} \\
p_n: \text{n-gram 정밀도 (precision)} \\
w_n: \text{각 n-gram의 가중치 (보통 } w_n = \frac{1}{N} \text{)} \\
BP: \text{Brevity Penalty (너무 짧은 문장에 페널티 부여)}
$$
$$
BP =
\begin{cases}
1 & \text{if } c > r \\
e^{(1 - \frac{r}{c})} & \text{if } c \leq r
\end{cases}
$$
$$
c: \text{생성된 문장 길이 (candidate)} \\
r: \text{참조 문장 길이 (reference)}
$$
BLEU의 현실적 한계
BLEU Score는 유용하지만 완벽하지는 않다. 대표적인 한계는 다음과 같다:
- 문장의 의미(semantics)를 고려하지 않는다
완전히 엉뚱한 의미지만 n-gram이 비슷하면 점수가 높게 나올 수 있다. - 어순 변화에 취약하다
같은 의미지만 단어 순서가 바뀌면 낮은 점수를 받을 수 있다. - 동의어 처리 불가능
"buy"와 "purchase"는 의미가 같지만 BLEU는 다르게 평가한다.
그럼에도 불구하고 BLEU는 빠르고 간편하며, 대규모 평가에 적합하다는 점에서 지금도 주요 지표로 사용되고 있다. 최근에는 METEOR, TER, chrF, BERTScore 등 더 정교한 지표들도 함께 사용되는 추세다.
오늘의 회고
오늘 학습한 내용은 기계 번역이라는 거대한 시스템에서, 단순히 모델을 "훈련"시키는 것 이상의 통합적인 기술들이 어떻게 맞물려 있는지를 보여주는 좋은 예시였다.
Beam Search를 통해 모델은 단어 선택의 다양성을 확보하며 더 자연스러운 문장을 찾아낸다. BPE 기반 Subword Tokenization은 희귀 단어의 등장에도 유연하게 대응할 수 있도록 만들어주며, BLEU Score는 이러한 결과물들을 빠르게 수치로 평가할 수 있게 해준다.
이 세 가지는 독립적인 기술 같지만, 사실상 하나의 문장을 생성하고 평가하기 위한 일련의 연속된 과정이다. 번역 모델의 성능을 높이기 위해서는 이 모든 과정을 함께 고려해야 하며, 어느 하나만으로는 좋은 품질을 보장할 수 없다.