바이트 쌍 인코딩(Byte Pair Encoding)

•
2026년 10월 25일 발행•2026년 10월 25일 수정
요약

말뭉치에서 가장 빈번한 인접 기호 쌍을 반복 병합하여 서브워드 어휘를 만드는 토큰화 알고리즘

중급
토큰화와 언어 모델의 입력 표현에 대한 이해가 필요하며, 병합 규칙 학습과 어휘 크기 선택이 모델 효율에 미치는 영향을 알아야 한다.

#개념

바이트 쌍 인코딩(Byte Pair Encoding, BPE)은 말뭉치에서 가장 자주 함께 등장하는 인접 기호 쌍을 반복적으로 병합하여 서브워드 어휘를 만드는 토큰화 알고리즘이다. 단어를 문자보다 크고 단어보다 작은 서브워드(Subword) 단위로 나누어, 고정된 크기의 어휘로 어떤 문자열이든 표현할 수 있게 한다. GPT 계열, RoBERTa, LLaMA 등 대부분의 대규모 언어 모델이 BPE 또는 그 변형을 토크나이저로 사용한다.
BPE는 원래 자연어 처리 기법이 아니라 데이터 압축 알고리즘이다. Philip Gage는 1994년 C Users Journal에 발표한 글에서, 데이터 블록에서 가장 빈번한 인접 바이트 쌍을 아직 사용되지 않은 바이트 하나로 치환하는 과정을 반복하고 치환 표를 함께 저장하는 압축 방식을 제안했다. 압축 해제는 치환 표를 역순으로 적용하는 단순한 과정이라 빠르고 메모리를 적게 사용한다는 장점이 있었다.
Rico Sennrich 등은 2016년 논문 「Neural Machine Translation of Rare Words with Subword Units」에서 이 아이디어를 신경망 기계 번역의 어휘 구성에 적용했다. 당시 번역 모델은 수만 개 단어로 어휘를 제한하고 나머지를 미등록 토큰으로 처리했기 때문에 희귀어, 고유명사, 합성어를 번역하지 못했다. 서브워드 BPE는 이런 단어를 알려진 조각의 조합으로 분해하여 개방형 어휘 문제를 해결했다.
BPE 어휘 학습은 문자 단위 어휘에서 출발하여 병합 규칙을 하나씩 추가하는 탐욕적(Greedy) 절차로 진행된다. 학습 결과물은 최종 어휘와 함께 병합이 일어난 순서를 기록한 병합 규칙(Merge Rules) 목록이다.
병합 학습 절차
  • 사전 토큰화: 말뭉치를 공백 등의 기준으로 단어 단위로 나누고 각 단어의 빈도를 센다.
  • 기본 어휘 구성: 모든 단어를 문자 단위로 분해하고, 등장한 문자 전체를 초기 어휘로 둔다. 단어 경계를 구분하기 위해 단어 끝 기호를 붙이기도 한다.
  • 쌍 빈도 계산: 단어 빈도를 가중치로 하여 모든 인접 기호 쌍의 등장 횟수를 집계한다.
  • 최빈 쌍 병합: 가장 빈번한 쌍을 새 기호로 합쳐 어휘에 추가하고, 해당 병합을 규칙 목록에 기록한다.
  • 반복 종료: 목표 어휘 크기 또는 병합 횟수에 도달할 때까지 쌍 빈도 계산과 병합을 반복한다.
예를 들어 말뭉치의 단어 빈도가 low 5회, lower 2회, newest 6회, widest 3회라고 하자. 초기 상태에서 e와 s(9회)가 가장 빈번한 쌍 중 하나이므로 es가 만들어지고, 다음으로 es와 t(9회)가 병합되어 est가 생긴다. 이어서 l과 o, lo와 w가 병합되면 low라는 기호가 생기고, newest와 widest는 공통 접미 est를 공유하는 조각으로 표현된다. 이처럼 자주 반복되는 어근과 접사가 자연스럽게 하나의 토큰이 된다.
새로운 문장을 토큰화하는 인코딩 단계에서는 단어를 문자 단위로 나눈 뒤, 학습 때 기록된 병합 규칙을 학습 순서대로 적용한다. 규칙 순서가 곧 우선순위이므로 같은 어휘라도 규칙 순서가 다르면 분할 결과가 달라질 수 있다. 학습 때 보지 못한 단어도 결국 문자 수준까지 분해되므로, 기본 문자가 어휘에 포함되어 있는 한 미등록 단어(Out-of-Vocabulary, OOV)가 발생하지 않는다.
문자 단위 BPE는 유니코드 문자 전체를 기본 어휘로 삼아야 해서, 이모지나 드문 한자처럼 학습 말뭉치에 없던 문자는 여전히 미지 토큰으로 남는다. GPT-2는 이를 해결하기 위해 텍스트를 UTF-8 바이트 열로 바꾼 뒤 256개의 바이트를 기본 어휘로 사용하는 바이트 수준 BPE(Byte-level BPE)를 도입했다. 어떤 문자열이든 바이트로 표현되므로 미지 토큰이 원천적으로 사라지고, 정규식 기반 사전 토큰화로 문자 범주가 다른 기호끼리 병합되는 것을 막는다.
BPE와 함께 널리 쓰이는 서브워드 토큰화 알고리즘은 어휘를 만드는 기준에서 차이가 난다.
주요 서브워드 알고리즘 비교
  • BPE: 빈도가 가장 높은 쌍을 병합하며, 학습과 인코딩이 단순하고 결정적이다. GPT, RoBERTa, LLaMA 계열이 사용한다.
  • 워드피스(WordPiece): 쌍의 단순 빈도 대신 병합했을 때 언어 모델 우도가 가장 크게 증가하는 쌍을 고른다. BERT가 사용하며, 단어 내부 조각에 ## 접두를 붙인다.
  • 유니그램(Unigram): 큰 후보 어휘에서 시작하여 우도 감소가 작은 토큰을 제거해 나가는 방식이다. 하나의 단어에 대해 여러 분할 후보와 확률을 제공하며, T5와 ALBERT가 사용한다.
  • 센텐스피스(SentencePiece): 공백을 ▁ 기호로 바꿔 원시 문장을 직접 학습하는 라이브러리로, 내부 알고리즘으로 BPE와 유니그램을 모두 지원한다.
어휘 크기는 BPE에서 가장 중요한 설계 변수다. 어휘가 작으면 토큰 시퀀스가 길어져 연산량과 문맥 창 소모가 커지고, 어휘가 크면 임베딩 행렬과 출력층 파라미터가 늘며 드문 토큰이 충분히 학습되지 않는다. 번역 모델은 보통 수만 개, 최근 다국어 대규모 언어 모델은 10만 개 이상의 어휘를 사용하는 경향이 있다. 다국어 모델에서는 언어별 말뭉치 비율에 따라 특정 언어가 과도하게 잘게 분할되는 불균형도 함께 고려해야 한다.
BPE의 장단점은 다음과 같다.
BPE의 장점과 한계
  • 장점: 개방형 어휘: 기본 문자나 바이트가 어휘에 있으면 어떤 단어든 표현할 수 있어 OOV 문제를 해결한다.
  • 장점: 단순성과 속도: 빈도 계산과 병합만으로 학습되며, 인코딩도 규칙 적용만으로 빠르게 수행된다.
  • 한계: 형태론적 비정합: 빈도 기준 병합이 의미 단위와 일치하지 않아, 어근과 어미가 어색하게 잘리는 경우가 생긴다.
  • 한계: 결정적 분할: 같은 단어는 항상 같은 방식으로 분할되므로 모델이 다양한 분할에 대한 강건성을 학습하기 어렵다.
결정적 분할의 한계를 보완하기 위해 Ivan Provilkov 등은 2020년 BPE-드롭아웃(BPE-dropout)을 제안했다. 학습 중 인코딩할 때마다 각 병합 단계에서 일정 확률로 일부 병합을 건너뛰어, 같은 단어가 매번 조금씩 다른 서브워드 열로 분할되게 한다. 이는 유니그램 기반 서브워드 정칙화와 같은 효과를 BPE 구조를 바꾸지 않고 얻는 방법으로, 기계 번역에서 번역 품질과 오타에 대한 강건성을 높였다. 추론 시에는 드롭아웃 없이 표준 BPE를 그대로 사용한다.
한국어는 교착어라서 하나의 어절에 어근과 여러 조사·어미가 결합된다. 공백 단위로 바로 BPE를 학습하면 조사가 붙은 형태가 각각 별도 토큰으로 학습되거나, 형태소 경계를 무시한 분할이 생기기 쉽다. 이를 완화하기 위해 형태소 분석기로 먼저 형태소 단위로 분리한 뒤 BPE를 적용하는 방식이 자주 쓰이며, 형태소 분석 결과를 서브워드 분할에 반영한 한국어 사전학습 모델도 공개되어 있다.
한글을 바이트 수준 BPE로 처리할 때는 음절 하나가 UTF-8에서 3바이트로 표현된다는 점도 고려해야 한다. 영어 중심 말뭉치로 학습한 토크나이저는 한국어 음절 병합이 충분히 이루어지지 않아 같은 내용의 문장이 영어보다 훨씬 많은 토큰으로 분할된다. 이는 추론 비용과 문맥 창 활용에 직접 영향을 주므로, 한국어 비중이 높은 서비스에서는 한국어 말뭉치로 어휘를 확장하거나 별도 토크나이저를 학습하는 방법을 검토한다.
BPE는 직접 구현하기도 쉽지만, 실무에서는 검증된 라이브러리를 사용하는 것이 일반적이다.
대표 구현체
  • tiktoken: OpenAI가 공개한 바이트 수준 BPE 토크나이저로, GPT 계열 모델의 인코딩을 빠르게 수행하고 토큰 수 계산에 널리 쓰인다.
  • Hugging Face tokenizers: Rust로 구현된 토크나이저 라이브러리로, BPE·워드피스·유니그램 모델의 학습과 인코딩을 모두 지원한다.
  • SentencePiece: Google이 공개한 언어 독립적 서브워드 토크나이저로, 사전 토큰화 없이 원시 텍스트에서 BPE와 유니그램 모델을 학습한다.
토크나이저는 모델과 한 몸으로 취급해야 한다. 학습 때 사용한 병합 규칙과 어휘가 조금이라도 바뀌면 같은 입력이 다른 토큰 ID 열로 변환되어 모델 성능이 크게 떨어지므로, 토크나이저 파일은 모델 가중치와 함께 버전 관리한다. 또한 특수 토큰, 정규화 규칙, 공백 처리 방식이 학습과 서빙 환경에서 동일한지 확인해야 한다.
BPE는 압축 알고리즘에서 출발했지만, 개방형 어휘 문제를 단순한 병합 규칙으로 해결하여 현대 언어 모델 토큰화의 표준이 되었다. 어휘 크기, 사전 토큰화 규칙, 언어별 말뭉치 구성에 따라 모델의 효율과 성능이 달라지므로, 토크나이저 설계는 모델 설계의 일부로 다뤄야 한다.

#관련 용어

토큰화
텍스트를 모델이 처리할 수 있는 토큰 단위로 나누는 과정
서브워드
문자보다 크고 단어보다 작은 단위로 단어를 분할한 조각
미등록 단어(OOV)
학습 어휘에 포함되지 않아 모델이 표현하지 못하는 단어
병합 규칙
BPE 학습 중 병합된 기호 쌍을 병합 순서대로 기록한 목록
형태소 분석
단어를 의미를 가진 최소 단위인 형태소로 분리하고 품사를 부여하는 과정

#직무 연관도

DA
Data Analyst
낮음
텍스트 데이터의 토큰 수를 산정하여 언어 모델 사용 비용과 처리량을 추정
DS
Data Scientist
밀접
언어 모델의 어휘 크기와 토크나이저를 설계하고, 토큰화 방식이 모델 성능에 미치는 영향을 분석
DE
Data Engineer
높음
토크나이저를 학습·배포하고, 학습과 서빙 환경의 토큰화 일관성과 처리 속도를 관리

#사용 사례

인터넷 서비스전자상거래미디어금융통신
개요
BPE는 대규모 언어 모델, 기계 번역, 검색, 챗봇 등 텍스트를 다루는 거의 모든 신경망 모델의 입력 단계에서 사용된다. 신조어와 고유명사가 빈번한 인터넷 서비스와 전자상거래에서 OOV 문제를 줄이고, 다국어 서비스에서 하나의 어휘로 여러 언어를 처리하는 데 활용된다.
사례
전자상거래 검색 서비스에서 신조어와 브랜드명이 섞인 상품명을 바이트 수준 BPE로 토큰화하여, 사전에 없는 단어도 미지 토큰 없이 언어 모델 입력으로 변환한다.

#참고 자료

#추천 포스트

© 2024 diki All rights reserved.