LLM은 문장을 어떻게 입력받을까?
LLM은 사용자가 입력한 문장을 글자 그대로 처리하지 않습니다. 먼저 토크나이저가 문장을 토큰으로 나누고, 각 토큰을 토큰 ID로 변환합니다.
대표적인 서브워드 토크나이저 계열
실제 모델에서는 여러 종류의 서브워드 알고리즘을 사용합니다. 세부 구현은 다르지만, 제한된 토큰 사전으로 다양한 문자열을 표현하려는 목적은 같습니다.
작은 단위에서 시작해 자주 함께 나타나는 두 조각을 반복적으로 합칩니다. 많이 반복되는 문자열은 점차 큰 토큰이 됩니다.
후보 조각을 합쳤을 때 학습 데이터를 얼마나 효율적으로 표현할 수 있는지 고려하여 토큰 사전을 구성합니다.
공백으로 먼저 단어를 나누지 않고 원문 문자열에서 직접 토큰 후보를 학습할 수 있어 여러 언어에 적용하기 쉽습니다.
BPE와 Byte-level BPE는 같은가?
모델 계열과 토크나이저
모델 이름만 보고 토크나이저의 세부 구현을 단정해서는 안 됩니다. 같은 계열에서도 버전과 공개 구현에 따라 어휘 사전과 전처리 방식이 달라질 수 있습니다.
##로 표시하는 예가 많습니다.토큰 앞의 특수 표시는 무엇일까?
토큰화 결과에 보이는 특수 기호는 원문에 있던 문자가 아니라, 공백이나 단어 경계를 보존하기 위한 내부 표시인 경우가 많습니다.
##
read + ##ing
새로운 단어가 시작된 것이 아니라 앞 토큰 뒤에 이어 붙는 조각이라는 의미입니다.
▁
▁cute ▁bear
SentencePiece 출력에서 공백이나 새 단어의 시작을 나타낼 때 사용됩니다.
Ġ
Ġcute Ġbear
일부 BPE 토크나이저의 시각화에서 토큰 앞에 공백이 있음을 나타냅니다.
토크나이저 스타일 비교
이 실습은 세부 알고리즘을 그대로 구현한 것이 아니라, 토큰 사전 크기와 경계 표시의 차이를 이해하기 위한 단순화된 예시입니다.
토큰 수가 왜 중요할까?
문맥 길이
모델의 최대 입력 길이는 일반적으로 글자 수가 아니라 토큰 수를 기준으로 제한됩니다.
계산량과 메모리
같은 내용이라도 토큰 수가 많으면 모델이 처리해야 할 입력 길이가 늘어납니다.
사용량과 비용
토큰 사용량을 기준으로 제한이나 비용을 계산하는 API와 서비스가 많습니다.
실제 모델을 사용할 때 확인할 사항
| 확인 항목 | 확인해야 하는 이유 |
|---|---|
| 토크나이저 파일과 버전 | 같은 모델 이름이라도 버전에 따라 토큰 ID와 어휘가 달라질 수 있습니다. |
| 특수 토큰 | 문장 시작·끝, 패딩, 미등록 토큰 등의 ID가 모델마다 다릅니다. |
| 대소문자와 정규화 | 대소문자 변환, 유니코드 정규화, 공백 처리 방식이 결과에 영향을 줍니다. |
| 최대 문맥 길이 | 입력과 출력 토큰을 합한 길이가 모델의 제한을 넘지 않아야 합니다. |
| 언어별 토큰 효율 | 같은 의미라도 언어에 따라 필요한 토큰 수가 달라질 수 있습니다. |
모델과 다른 토크나이저를 사용해도 될까?
토크나이저만 교체해서 성능을 높일 수 있을까?
학습 내용 정리
이번 장에서는 실제 LLM과 언어 모델에서 사용하는 토크나이저의 주요 개념을 살펴보았습니다.
- BPE는 자주 붙는 조각을 반복적으로 합쳐 토큰 사전을 만듭니다.
- WordPiece는 데이터 표현 효율을 고려하여 서브워드 후보를 선택합니다.
- SentencePiece는 공백으로 먼저 나누지 않고 원문 문자열에서 직접 토큰을 학습할 수 있습니다.
-
##,▁,Ġ같은 기호는 토큰의 연결과 공백 정보를 나타냅니다. - 토큰 수는 최대 문맥 길이, 계산량, 메모리 사용량과 서비스 비용에 영향을 줄 수 있습니다.
- 모델은 학습할 때 사용한 토크나이저와 함께 사용해야 합니다.
다음 장에서는 토큰 ID가 임베딩 테이블을 통해 어떻게 숫자 벡터로 변환되는지 살펴봅니다.