바이트 페어 인코딩 (Byte Pair Encoding)
쉽게 풀면
"unbelievable"이라는 단어를 통째로 외우는 대신, 자주 등장하는 조각인 "un-", "believ-", "-able"로 나눠 익힌다고 생각해 보세요. 이렇게 하면 처음 보는 단어인 "unstoppable"이 나와도 "un-"과 "-able"을 알고 있으니 어느 정도 뜻을 유추할 수 있습니다. BPE는 방대한 텍스트에서 가장 자주 같이 붙어 나오는 글자(또는 조각) 쌍을 찾아 하나로 합치는 과정을 수천~수만 번 반복해서, 자주 쓰이는 단어는 통째로 하나의 토큰으로, 낯선 단어는 여러 조각(서브워드)으로 나누는 사전을 만듭니다. GPT 계열을 비롯한 많은 언어모델이 이 방식(또는 그 변형)으로 입력 문장을 토큰으로 쪼갭니다.
왜 중요한가
어떤 토큰화 방식을 쓰느냐는 언어모델이 다룰 수 있는 어휘의 범위, 입력 문장의 길이, 나아가 학습·추론 비용에까지 영향을 미치기 때문에, BPE는 자연어처리 논문에서 실험 설정의 기본 전제로 자주 언급됩니다. 특히 신조어, 오타, 다국어 텍스트처럼 고정된 단어 사전만으로는 감당하기 어려운 입력을 처리해야 하는 연구에서는 서브워드 기반 토큰화가 사실상 표준으로 자리잡았습니다. 그래서 새로운 모델이나 데이터셋을 제안하는 논문에서도 토큰화 방식으로 BPE(또는 그 변형)를 채택했다는 사실을 명시하는 경우가 많습니다.
논문에서는 이렇게 쓰입니다
이 문장은 단어 전체를 하나의 토큰으로 취급하는 대신, 자주 등장하는 조각 단위로 어휘 사전을 구성함으로써 사전에 없는 새로운 단어도 여러 조각의 조합으로 처리할 수 있게 했다는 의미입니다.
이 문장은 기계번역 분야에서 여러 언어를 동시에 다룰 때, 언어마다 따로 어휘를 만들지 않고 하나로 통합된 BPE 어휘를 사용하면 언어 간 표기나 어형이 비슷한 부분을 공통 토큰으로 처리할 수 있다는 점을 설명하고 있습니다.
이 문장은 원래 자연어 처리를 위해 고안된 BPE의 아이디어가, 반복되는 패턴을 짧은 단위로 압축한다는 성질 덕분에 생물정보학처럼 텍스트가 아닌 서열 데이터를 다루는 분야로도 응용되고 있음을 보여줍니다.
조금 더 깊게 보면
실제로 BPE를 학습시키는 과정은 문자(혹은 바이트) 단위에서 시작해, 말뭉치 전체에서 가장 빈번하게 붙어 나오는 인접 쌍을 찾아 하나의 새 토큰으로 병합하는 절차를 정해진 횟수(또는 목표 어휘 크기에 도달할 때까지) 반복하는 방식으로 이루어집니다. 이 반복 횟수와 최종 어휘 크기는 사람이 미리 정해주는 값이며, 어휘 크기를 얼마로 잡느냐에 따라 토큰의 평균 길이와 문장이 몇 개의 토큰으로 쪼개지는지가 달라집니다. 논문에서는 순수한 BPE 외에도 WordPiece, SentencePiece, Unigram 언어모델 기반 토큰화 등 유사한 목적의 서브워드 분할 기법이 함께 언급되는 경우가 많은데, 이들은 병합 기준이나 확률적 근거는 다르지만 자주 등장하는 조각을 재사용 가능한 단위로 묶는다는 기본 발상은 공유합니다.
주의할 점
BPE는 토큰화의 한 방법일 뿐이며, 이후에 각 토큰을 숫자 벡터로 바꾸는 임베딩 단계와는 별개의 과정입니다. 또한 BPE는 통계적 빈도만 기준으로 삼기 때문에, 사람이 보기에 자연스러운 형태소 경계와 항상 일치하지는 않습니다.