Ch.3 텍스트를 숫자로 — 토큰화의 세계
문자열 다루기 — split, join, replace
LLM은 글자가 아니라 '토큰'을 읽습니다
ChatGPT에게 질문하면 내부적으로 문장을 잘게 쪼개 숫자로 바꿉니다. 이 과정의 첫 번째 단계가 바로 문자열 분리입니다.
문장을 어떤 기준으로 쪼개야 컴퓨터가 이해할 수 있을까?
split, join, replace — 텍스트 전처리의 3대 도구를 배워봅시다.
핵심 개념
전처리
원시 데이터를 모델이 처리할 수 있는 형태로 정제하는 과정
핵심 내용
split()은 문자열을 토큰 리스트로 분리합니다
text = "나는 오늘 파이썬을 배운다"
tokens = text.split()
print(tokens)
# ['나는', '오늘', '파이썬을', '배운다']split() — 기본: 공백 기준 분리 split(",") — 쉼표 기준 분리 split("\n") — 줄바꿈 기준 분리
join()은 합치고, replace()는 바꿉니다
# join: 토큰 리스트를 다시 문자열로
tokens = ["나는", "AI를", "공부한다"]
sentence = " ".join(tokens)
print(sentence) # "나는 AI를 공부한다"
# replace: 특정 문자 치환
text = "Hello, World!"
clean = text.replace(",", "").replace("!", "")
print(clean) # "Hello World"전처리 = 불필요한 문자 제거 + 형식 통일
문자열이 토큰으로 바뀌었다가 다시 합쳐지는 과정을 봅시다
실제 LLM이 입력을 받기 전 전처리 과정을 직접 만들어봅시다
# LLM 입력 전처리 파이프라인
def preprocess(text):
text = text.strip()
text = text.lower()
for ch in ["!", "?", ",", ".", ":", ";"]:
text = text.replace(ch, "")
tokens = text.split()
return tokens
samples = [" Hello, World! ", "Python은 재미있다!", "GPT-4는 2023년에 출시."]
for s in samples:
tokens = preprocess(s)
print(f"원본: {s!r}")
print(f"토큰: {tokens}
")split, join, replace를 조합하면 강력한 텍스트 변환기를 만들 수 있습니다
# 텍스트 변환 파이프라인 실험
# split → 가공 → join 패턴
sentence = "Hello, World! This is AI."
# 1단계: 구두점 제거
clean = sentence.replace(",", "").replace("!", "").replace(".", "")
print(f"구두점 제거: {clean}")
# 2단계: 소문자 변환 후 분리
tokens = clean.lower().split()
print(f"토큰 리스트: {tokens}")
# 3단계: 각 토큰에 번호 부여
numbered = [f"{i}:{t}" for i, t in enumerate(tokens)]
result = " | ".join(numbered)
print(f"번호 매핑: {result}")
# 4단계: 토큰 수 통계
print(f"\n총 토큰 수: {len(tokens)}")
print(f"고유 토큰 수: {len(set(tokens))}")"a,,b,,c".split(",")의 결과는?
"_".join(["a", "b", "c"])의 결과는 "a_b_c"이다
"Hello World".replace("World", "Python")의 결과는?
다음 코드의 빈칸을 채우세요. text = "hello world" result = text.___() # result → "Hello World"
text.___() → "Hello World"
"Hello".upper()의 결과는 "Hello"이다.
문자열 다루기
핵심 용어
전처리
원시 데이터를 모델이 처리할 수 있는 형태로 정제하는 과정
정리 노트
split · join · replace 핵심 정리
문자열 분리와 결합
- split()
- 문자열을 토큰 리스트로 분리 (기본: 공백 기준)
- join()
- 토큰 리스트를 하나의 문자열로 합침 (구분자.join(리스트))
- replace()
- 특정 문자를 다른 문자로 치환 (전처리의 핵심)
전처리 파이프라인
- strip()
- 문자열 양쪽 공백 제거 — 전처리의 첫 단계
- lower()
- 소문자 변환 — 대소문자 통일
- 전처리 순서
- strip → lower → replace(특수문자 제거) → split → join
LLM은 텍스트를 그대로 읽지 못합니다. split/join/replace로 정제하는 것이 AI 파이프라인의 첫걸음!
시각 자료
핵심 정리
- 1split() — 문자열을 토큰 리스트로 분리
- 2join() — 토큰 리스트를 문자열로 합치기
- 3replace() — 특수문자 제거 등 텍스트 전처리
퀴즈와 인터랙션으로 더 깊이 학습하세요
play_circle인터랙티브 레슨 시작