LLM이 텍스트를 처리하기 전에 반드시 거치는 첫 단계가 「토크나이저(tokenizer)」입니다.
토크나이저는 「긴 문장을 모델이 다룰 수 있는 작은 단위(토큰)로 쪼개는 도구」입니다.
토큰은 단어 하나일 수도, 단어 조각일 수도, 한 글자일 수도 있습니다.
가장 단순한 「공백 단위 토크나이저」는 단어마다 잘라 토큰으로 만듭니다.
그러나 이 방식은 「unhappiness」 같은 긴 단어를 한 토큰으로 처리해야 하고, 모델이 본 적 없는 단어가 나오면 처리할 수 없는 문제가 있습니다.
현대 LLM이 쓰는 표준은 「서브워드(subword) 토크나이저」 — 단어를 더 작은 의미 단위로 나누는 방식입니다.
「unhappiness」는 「un-」, 「happi」, 「ness」 같은 조각으로 나뉘어 처리됩니다.
한 번도 본 적 없는 단어도 알려진 조각의 조합으로 표현할 수 있어 강력합니다.
대표적인 세 가지 알고리즘이 있습니다.
첫째, BPE(Byte-Pair Encoding) — GPT가 사용.
자주 함께 등장하는 글자 쌍을 반복해 합쳐 가는 방식입니다.
둘째, WordPiece — BERT가 사용.
BPE와 비슷하지만 가능도 기준으로 합칩니다.
셋째, SentencePiece — Llama·T5가 사용.
공백을 특수 토큰으로 다루어 모든 언어에 균등하게 적용됩니다.
한국어처럼 형태소가 풍부한 언어는 토크나이저의 선택이 특히 중요합니다.
「먹었습니다」를 「먹/었/습니다」로 잘 나눠야 모델이 시제·존댓말 정보를 효율적으로 학습할 수 있습니다.
잘못 나누면 같은 어근의 단어들이 따로 학습되어 효율이 크게 떨어집니다.
한 줄 요약
토크나이저는 텍스트를 모델이 다룰 토큰으로 쪼개는 도구이며, 현대 LLM은 BPE·WordPiece·SentencePiece 같은 서브워드 방식으로 「본 적 없는 단어」도 처리할 수 있게 합니다.
더 알아볼 것
- GPT-4의 토크나이저(o200k_base)
- 한국어 토크나이저의 특수성
- Tokenization을 잘못해서 일어나는 LLM 실수들