Part 2 · Tokenization - Understanding Tokenization

모든 언어 모델은 토큰화에서 시작된다

사람은 문장을 그대로 읽지만, 컴퓨터는 문장을 있는 그대로 이해할 수 없습니다. 먼저 문장을 더 작은 단위로 나누어야만 이후의 모든 계산을 시작할 수 있습니다. 토큰화(Tokenization)는 언어 모델이 입력 문장을 처리하기 위한 첫 번째 단계입니다. 이후 등장하는 Token ID와 Embedding 역시 모두 이 과정을 바탕으로 이루어집니다.

Concept

토큰화란?

토큰화(Tokenization)는 문장을 모델이 처리할 수 있는 작은 단위인 토큰(Token)으로 나누는 과정입니다.

사람은 문장을 읽으면 의미를 바로 이해할 수 있지만, 컴퓨터는 문장을 그대로 계산할 수 없습니다. 따라서 먼저 문장을 일정한 조각으로 나누고, 각 조각을 숫자로 바꾸는 과정이 필요합니다.

토큰화의 목적은 문장을 단순히 잘게 자르는 것이 아니라, 모델이 반복해서 사용할 수 있는 입력 단위로 바꾸는 것입니다.
원문 텍스트
(Raw Text)
→
토크나이저
(Tokenizer)
→
토큰 시퀀스
(Token Sequence)
토크나이저는 무엇을 하는가?
토크나이저(Tokenizer)는 입력 문장을 미리 정해진 규칙과 어휘에 따라 여러 개의 토큰으로 나누는 도구입니다. 같은 문장이라도 사용하는 토크나이저에 따라 토큰 경계가 달라질 수 있습니다.
Why Tokenization?

왜 토큰화가 필요한가?

문장 전체를 하나의 항목으로 저장하면, 조금만 다른 문장도 모두 새로운 항목으로 등록해야 합니다. 가능한 문장의 수는 사실상 무한하므로 이런 방식은 사용할 수 없습니다.

문장을 재사용 가능한 조각으로 나눔 단어와 문장 조각은 여러 문장에서 반복해서 나타나므로, 같은 토큰을 다시 사용할 수 있습니다.
문장을 숫자로 바꿀 준비 모델은 문자 자체를 계산하지 못하므로, 먼저 토큰을 만들고 각 토큰에 번호를 부여해야 합니다.
처리 단위를 일정하게 만듦 문장의 길이나 표현이 달라도, 모델은 토큰의 순서를 입력으로 받아 같은 방식으로 처리할 수 있습니다.
문장 전체에 번호 하나만 붙이면 안 되는가?
“A cute bear”, “A big bear”, “The bear is cute”는 조금씩 다른 문장이지만, 문장 전체를 하나의 항목으로 저장하면 세 문장 모두 별도의 번호가 필요합니다. 반면 A, cute, bear 같은 토큰은 여러 문장에서 반복해서 사용할 수 있습니다.
What is a Token?

토큰이란?

토큰(Token)은 모델이 입력 텍스트를 처리할 때 사용하는 기본 단위입니다.

토큰은 반드시 완전한 단어일 필요는 없습니다. 하나의 단어가 여러 토큰으로 나뉠 수도 있고, 문장부호나 이모지가 하나의 토큰이 될 수도 있습니다.

완전한 단어 짧고 자주 쓰이는 단어는 하나의 토큰으로 유지될 수 있습니다.
cat → cat
단어보다 작은 조각 긴 단어나 드문 단어는 여러 조각으로 나뉠 수 있습니다.
reading → read + ##ing
기호와 이모지 문장부호나 이모지도 모델에 따라 하나 이상의 토큰이 될 수 있습니다.
😊 → 😊
토큰은 언어학적으로 정해진 절대적인 단위가 아닙니다. 어떤 토크나이저를 사용하느냐에 따라 같은 단어도 서로 다르게 나뉠 수 있습니다.
Worked Example

문장을 토큰으로 나누기

다음 영어 문장을 단어와 문장부호를 기준으로 나누어 보겠습니다.

A cute teddy bear is reading.
A cute teddy bear is reading .

이 예에서는 문장이 7개의 토큰으로 나뉘었습니다. 그러나 실제 토크나이저에서는 teddy나 reading이 더 작은 조각으로 나뉠 수도 있습니다.

공백을 기준으로만 나누면 충분한가?
영어의 단순한 문장에서는 공백이 좋은 기준이 될 수 있지만, 문장부호, 축약어, 숫자, 한글, 중국어처럼 공백만으로 처리하기 어려운 경우가 많습니다. 실제 토크나이저는 언어와 모델에 맞는 더 복잡한 규칙을 사용합니다.
Token IDs

토큰에는 번호가 붙는다

모델은 토큰 문자열을 그대로 계산하지 않습니다. 토크나이저는 각 토큰을 어휘 사전(Vocabulary)에서 찾아 해당 토큰에 대응하는 정수 번호인 토큰 ID(Token ID)로 바꿉니다.

토큰 A
→
토큰 cute
→
토큰 bear
토큰 ID 17
→
토큰 ID 842
→
토큰 ID 391
토큰 ID는 토큰을 찾기 위한 일련번호입니다. ID가 크다고 해서 그 토큰이 더 중요하거나 더 큰 의미를 갖는 것은 아닙니다.
토큰 ID는 어디에 사용되는가?
토큰 ID는 다음 단계에서 임베딩 테이블의 위치를 찾는 데 사용됩니다. 임베딩 테이블은 각 토큰 ID에 대응하는 숫자 벡터를 저장합니다. 임베딩의 의미와 동작 방식은 다음 장에서 자세히 살펴봅니다.
Next Step

토큰화 다음에는 무엇을 할까?

토큰화는 자연어 처리의 시작 단계입니다. 문장은 다음과 같은 순서로 모델이 계산할 수 있는 형태로 변환됩니다.

문장 A cute bear
토큰 A · cute · bear
토큰 ID 17 · 842 · 391
임베딩 벡터 다음 장에서 설명
언어 모델 RNN · Transformer 등
현재 단계에서 기억할 것은 토큰화가 문장을 작은 입력 단위로 나누고, 각 토큰을 토큰 ID로 바꾸는 출발점이라는 사실입니다.
Summary

학습 내용 정리

이번 장에서는 토큰화의 기본 개념과 토큰 ID의 역할을 살펴보았습니다.

  • 토큰화는 문장을 모델이 처리할 수 있는 작은 단위로 나누는 과정입니다.
  • 토큰은 완전한 단어일 수도 있고, 단어보다 작은 조각이나 문장부호일 수도 있습니다.
  • 같은 문장도 사용하는 토크나이저에 따라 서로 다른 토큰으로 나뉠 수 있습니다.
  • 각 토큰에는 어휘 사전에서 찾기 위한 정수 번호인 토큰 ID가 부여됩니다.
  • 토큰 ID는 의미를 나타내는 숫자가 아니라 다음 단계의 임베딩 벡터를 찾기 위한 번호입니다.

다음 장에서는 단어 단위, 문자 단위, 서브워드 단위 토큰화가 어떻게 다르고 각각 어떤 장단점을 갖는지 살펴봅니다.