Python으로 배우는 토큰화: 어휘, 원-핫, 바이트 페어 인코딩
신경망은 숫자만 이해하므로 텍스트는 먼저 토큰으로 나뉘고 각 토큰에 ID가 붙습니다. GPT 같은 언어 모델은 자주 나오는 단어 조각으로 토큰을 만드는 바이트 페어 인코딩을 사용합니다.
쉬운 말로 이해하는 개념
신경망은 숫자만 이해하므로 텍스트는 먼저 토큰으로 나뉘고 각 토큰에 ID가 붙습니다. GPT 같은 언어 모델은 자주 나오는 단어 조각으로 토큰을 만드는 바이트 페어 인코딩을 사용합니다.
언어 모델처럼 텍스트를 숫자로 바꿉니다. 어휘를 만들고, 단어를 원-핫으로 인코딩하고, BPE로 서브워드 토큰을 학습합니다.
핵심 아이디어
- 토큰은 단어, 단어의 일부, 문자 같은 텍스트의 단위입니다.
- 원-핫 벡터는 단순하지만 어휘가 크면 매우 길어집니다.
- BPE는 드물거나 새로운 단어를 알려진 조각으로 나누어 처리합니다.
- 이후 모델은 각 토큰 ID를 임베딩이라는 학습된 벡터로 바꿉니다.
언제 사용하나요?
- 신경망과 AI 라이브러리 내부에서 무슨 일이 일어나는지 이해합니다.
- 해당 챌린지에서 직접 구현하기 전에 아이디어를 익힙니다.
- 머신러닝 강의, 면접, 프로젝트를 준비합니다.
직접 움직여 보기
원하는 문장을 입력해 어휘를 만든 뒤, 한 단계를 눌러 바이트 페어 인코딩이 가장 많은 쌍을 합치는 과정을 보세요.
예제 코드
main.py
from collections import Counter
text = "the cat sat on the mat"
# 1. Build a vocabulary: every distinct word gets an id.
words = text.split()
vocab = {word: i for i, word in enumerate(sorted(set(words)))}
print("vocab:", vocab)
print("ids:", [vocab[w] for w in words])
# 2. One-hot encoding: a vector with a single 1 at the word's id.
def one_hot(word):
return [1 if vocab[word] == i else 0 for i in range(len(vocab))]
print("one-hot 'cat':", one_hot("cat"))
# 3. Byte pair encoding: repeatedly merge the most frequent pair of symbols.
tokens = list("banana")
for _ in range(2):
pairs = Counter(zip(tokens, tokens[1:]))
best = max(pairs, key=pairs.get)
merged, i = [], 0
while i < len(tokens):
if i + 1 < len(tokens) and (tokens[i], tokens[i + 1]) == best:
merged.append(tokens[i] + tokens[i + 1])
i += 2
else:
merged.append(tokens[i])
i += 1
tokens = merged
print("merge", best, "->", tokens)
예상 출력
vocab: {'cat': 0, 'mat': 1, 'on': 2, 'sat': 3, 'the': 4}
ids: [4, 0, 3, 2, 4, 1]
one-hot 'cat': [1, 0, 0, 0, 0]
merge ('a', 'n') -> ['b', 'an', 'an', 'a']
merge ('b', 'an') -> ['ban', 'an', 'a']
작동 원리
어휘는 서로 다른 각 단어를 ID에 대응시키고, 문장은 ID 목록이 됩니다. 원-핫 벡터는 단어 ID 위치에만 1이 있습니다. BPE는 이웃한 기호 쌍의 빈도를 세어 가장 많은 쌍을 합치는데, 처음에는 ('a', 'n'), 다음에는 ('b', 'an')을 합칩니다.
값을 변경하고 Python 설치 없이 CodeUtility 온라인 Python 컴파일러에서 실행하세요.
연습 문제
입력값과 경계 조건을 바꾸고 더 큰 데이터에서도 동작을 확인하세요.
- 입력이나 가중치를 바꾸고 실행하기 전에 출력을 예상해 보세요.
- 중간 값을 출력해 계산의 각 단계를 따라가 보세요.
- 아래에 연결된 챌린지를 풀며 아이디어를 직접 구현해 보세요.
챌린지로 연습하기
이 레슨에서 배운 내용으로 실제 문제를 풀어 보세요. 모든 챌린지는 브라우저에서 실행되며 즉시 테스트와 AI 리뷰를 받을 수 있습니다.
- 단어 토크나이저와 어휘 사전 텍스트를 소문자 단어로 나누고 빈도순 어휘 사전을 만듭니다. 모든 언어 모델의 첫 단계입니다. 쉬움
- 원-핫 인코딩 범주를 1이 하나뿐인 벡터로 바꿉니다. 분류기와 임베딩의 입력 형식입니다. 쉬움
- 바이트 페어 인코딩(BPE) 병합 GPT 토크나이저처럼 서브워드 병합을 학습합니다: 가장 자주 나오는 인접 기호 쌍을 반복해서 합칩니다. 보통