95cd8bb891
- 코드 그라운딩: 기술 주제 문서의 '적용 사례'에 실제 레포 구현 위치
(file:line)+커밋 자동 주입 (예: 문서 청킹 전략→connectai/src/retrieval/chunker.ts).
멱등 마커(CODE-GROUNDING)로 재실행 시 갱신.
- MOC: 39개 클러스터 폴더에 _MOC.md 학습지도 생성(진입점+통찰 주석).
도구: Datacollect/scripts/{code_grounding,moc_generator}.mjs
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
115 lines
9.8 KiB
Markdown
115 lines
9.8 KiB
Markdown
---
|
|
id: 텍스트-토크나이저
|
|
title: "텍스트 토크나이저"
|
|
category: "AI_and_ML"
|
|
status: "draft"
|
|
verification_status: "conceptual"
|
|
canonical_id: ""
|
|
aliases: ["Tokenizer", "Tokenization", "토큰화", "BPE", "SentencePiece", "WordPiece", "cl100k_base", "형태소 분석 기반 토큰화"]
|
|
duplicate_of: ""
|
|
source_trust_level: "A"
|
|
confidence_score: 0.94
|
|
created_at: 2026-06-08
|
|
updated_at: 2026-06-08
|
|
review_reason: ""
|
|
merge_history: []
|
|
tags: ["research", "Tokenizer", "Tokenization", "NLP", "RAG", "Preprocessing"]
|
|
raw_sources: ["1. RAG 파이프라인 기초 아키텍처", "RAG Architecture: 4 Key Components & Example Implementation - Cloudian", "[Tech Series] kt cloud AI 검색 증강 생성(RAG) #2 : 데이터 파싱과 전처리 최적화"]
|
|
applied_in: ["TokenTextSplitter(encoding_name='cl100k_base')", "Transformers-style tokenizer.decode() implementation", "kt cloud AI Foundry RAG Suite 전처리 파이프라인"]
|
|
github_commit: ""
|
|
---
|
|
|
|
# [[텍스트 토크나이저]]
|
|
|
|
## 🎯 한 줄 통찰 (One-line insight)
|
|
토크나이저는 자연어의 비정형 의미를 기계가 연산 가능한 수치적 단위(Token)로 분해하는 첫 번째 관문이며, 모델의 컨텍스트 제한 조건과 언어적 특성(형태소 등)을 정밀하게 정렬(Alignment)해야만 정보 손실 없는 검색과 생성이 가능하다 [S18, S314, S365].
|
|
|
|
## 🧠 핵심 개념 (Core concepts)
|
|
- **토큰 단위 (Token Unit):** 모델이 한 번에 처리할 수 있도록 텍스트를 쪼갠 최소 단위로, 단어, 부분 단어(Subword), 또는 바이트 수준으로 구성된다 [S314, S365].
|
|
- **인코딩 및 디코딩 (Encoding/Decoding):** 자연어 텍스트를 토큰 ID(수치)로 변환하거나, 모델이 생성한 토큰 ID를 다시 인간이 읽을 수 있는 텍스트로 복원하는 프로세스이다 [S117, S163].
|
|
- **토큰 알고리즘 (Tokenization Algorithm):** BPE(Byte Pair Encoding), WordPiece, SentencePiece 등 텍스트를 효율적으로 압축하고 의미를 보존하며 분할하는 수학적 기법이다 [S314, S365].
|
|
- **인코딩 일치 (Encoding Consistency):** 전처리 단계(청킹)와 모델 추론 단계(임베딩/생성)에서 동일한 토크나이저(예: OpenAI의 `cl100k_base`)를 사용해야 토큰 수 오차로 인한 에러를 방지할 수 있다 [S18, S26, S71].
|
|
|
|
## 🧩 추출된 패턴 (Extracted patterns)
|
|
- **Model-Specific Coupling:** 사용자는 일반적으로 임베딩 모델이 제공하는 전용 토크나이저를 강제로 사용하게 되며(예: OpenAI 모델은 GPT Byte-Level BPE 사용), 모델 선택 시 토크나이저의 언어 대응 능력이 함께 고려된다 [S315, S366].
|
|
- **Language-Tailored Hybridization:** 영어권은 SentencePiece BPE가 효율적이나, 한국어처럼 형태소가 풍부한 언어는 형태소 분석과 음운/부분 단어 분석을 결합한 하이브리드 토큰화가 벤치마크(TR-MMLU 등)에서 더 우수한 성능을 보인다 [S314, S365].
|
|
- **Sequential Multi-language Detection:** 다국어 문서 처리 시, 전체 문서 언어를 먼저 식별한 후 문장 단위 변화를 추적하여 적절한 토크나이저를 매핑하는 계층적 접근 패턴을 따른다 [S315, S366].
|
|
|
|
## 📖 세부 내용 (Details)
|
|
|
|
### 1. 토크나이저 알고리즘의 유형 및 특징 [S314, S365]
|
|
- **SentencePiece BPE:** 32k 규모의 보카불러리를 사용하여 영어권에서 널리 쓰이며, LLaMA2 등이 채택하고 있다.
|
|
- **Byte-Level BPE:** 바이트 단위로 분할하여 미등록어(OOV) 문제를 해결하며 GPT 계열 모델의 표준으로 사용된다.
|
|
- **한국어 특화 토큰화:** 조사와 어미가 발달한 특성에 맞춰 단순 분절보다 형태소 분석 기반의 토크나이저가 검색 정확도와 모델 성능 향상에 기여한다.
|
|
|
|
### 2. RAG 파이프라인에서의 실무 활용 [S18, S63, S71]
|
|
- **정확한 토큰 제어:** `TokenTextSplitter`를 사용하여 문자를 자를 때, 임베딩 모델의 실제 토큰 제한(OpenAI 8191, Gemini 2048 등)에 정확히 맞추어 컨텍스트 오버플로우를 방지한다.
|
|
- **다국어 대응:** 문자 수와 토큰 수의 차이가 큰 다국어 텍스트의 경우, 글자 수 기반 분할(Character)보다 토크나이저 기반 분할(Token)이 입력 크기 보장에 훨씬 유리하다.
|
|
- **파라미터 설정:** OpenAI 최신 모델은 `cl100k_base`, 이전 모델은 `p50k_base` 인코딩 명칭을 사용하여 토크나이저를 명시적으로 일치시킨다.
|
|
|
|
### 3. 언어 및 정규화 고려사항 [S315, S317, S366]
|
|
- **불용어(Stopword) 처리:** 전통적인 IR과 달리 벡터 기반 RAG에서는 불용어가 의미 강화에 기여하므로, 도메인(법률 등)에 따라 유지하거나 선택적으로 제거하는 균형이 필요하다.
|
|
- **특수 패턴 보호:** 토큰화 과정에서 코드 블록(Markdown ```)이나 수식($...$)이 깨지지 않도록 특수 토큰으로 등록하거나 프롬프트에서 의미를 보존하는 가드레일을 둔다.
|
|
|
|
## ⚖️ 모순 및 업데이트 (Contradictions & updates)
|
|
- **범용 vs 도메인 특화:** 글로벌 모델의 범용 토크나이저도 성능이 우수하지만, 한국 세법 등 전문 도메인에서는 형태소 분석을 결합한 한국어 특화 모델(Upstage Solar 등)이 더 정밀한 결과를 낸다 [S26, S314, S365].
|
|
- **속도 vs 정밀도:** 토큰 기반 분할은 모델의 입력 제한을 완벽히 지킬 수 있는 장점이 있으나, 토큰화 과정이 추가되므로 문자 기반 분할보다 처리 속도가 약간 느려지는 트레이드오프가 있다 [S18, S63].
|
|
|
|
## 🛠️ 적용 사례 (Applied in summary)
|
|
- **TokenTextSplitter 구현:** `encoding_name="cl100k_base"` 파라미터를 사용하여 OpenAI 모델용 청킹 파이프라인을 구축한 사례가 기술되어 있다 [S18, S71].
|
|
- **Transformers 코드:** 소스 코드 상에서 `tokenizer(prompt, truncation=True)`와 `tokenizer.decode(generated)`를 통해 입력 수치화와 결과 복원을 수행하는 구체적인 예시가 발견된다 [S117, S163].
|
|
- **kt cloud AI Foundry:** 이미지, PDF 등 멀티모달 데이터로부터 텍스트를 추출한 뒤, 언어별 최적 토크나이저를 적용해 정제하는 자동화 파이프라인으로 운영되고 있다 [S314, S342].
|
|
|
|
## ✅ 검증 상태 및 신뢰도
|
|
- **상태:** draft
|
|
- **검증 단계:** conceptual
|
|
- **출처 신뢰도:** A (OpenAI API 사양, kt cloud 기술 블로그, Microsoft Learn 등 교차 검증된 기술 정보)
|
|
- **신뢰 점수:** 0.94
|
|
- **중복 검사 결과:** 신규 생성 (New discovery)
|
|
|
|
|
|
## 🔗 관련 문서 링크 (Related document links)
|
|
|
|
### 상위/유사 개념
|
|
#### [아키텍처/기반 기술]
|
|
- [[RAG 아키텍처 및 파이프라인 기초]]
|
|
- 연결 이유: 토큰화는 RAG 전처리(청킹)와 검색/생성의 근간이 되는 기초 기술임 [S13, S58].
|
|
- [[텍스트 임베딩 모델]]
|
|
- 연결 이유: 임베딩 모델마다 고유의 토크나이저를 사용하며, 검색 품질이 이에 의존함 [S26, S315].
|
|
|
|
#### [구현/활용 도구]
|
|
- [[문서 청킹 전략]]
|
|
- 연결 이유: 토큰 기반 분할기(`TokenTextSplitter`)는 토크나이저를 활용해 청크 경계를 확정함 [S16, S61].
|
|
- [[하이브리드 검색]]
|
|
- 연결 이유: BM25 키워드 검색 시 형태소 분석 기반 토큰화 품질이 검색 정밀도를 결정함 [S314, S365].
|
|
|
|
### 심층 후속 질문 (Deeper Research Questions)
|
|
- 임베딩 모델의 보카불러리에 없는 희귀 단어(OOV)가 발생했을 때, 토크나이저의 분할 전략이 실제 의미 검색 재현율(Recall)에 미치는 영향은? [S314, S365]
|
|
- 한국어 하이브리드 토크나이저 사용 시 발생하는 연산 오버헤드를 대규모 배치 처리 환경에서 어떻게 최적화할 것인가? [S314, S333]
|
|
- `cl100k_base`와 같은 최신 토크나이저가 이전 방식 대비 한국어 텍스트 압축 효율(Token per Character)을 얼마나 개선했는가? [S315, S366]
|
|
|
|
### 실무 적용 맥락 (Practical Application Contexts)
|
|
- **Implementation:** LangChain 사용 시 `from_tiktoken_encoder`를 통해 사용하는 LLM과 동일한 토크나이저 기반의 청커 구성 [S18, S71].
|
|
- **System Design:** 다국어 서비스 설계 시 `fastText` 등으로 언어를 먼저 감지한 뒤 전용 토크나이저 루틴으로 분기 처리 [S315, S366].
|
|
- **Operation / Maintenance:** 모델 업데이트 시(예: GPT-3.5 -> GPT-4) 토크나이저 변경 여부를 확인하여 청킹 파라미터 재검토 필요 [S27, S72].
|
|
- **Learning Path:** 텍스트 분절 개념 학습 -> 주요 알고리즘(BPE, SentencePiece) 차이 이해 -> 모델별 토크나이저 매칭 실습 [S1, S45].
|
|
|
|
### 인접 주변 주제
|
|
- [[텍스트 정규화]]
|
|
- 확장 방향: 토큰화 이전 단계에서 노이즈(연속 공백, 오타 등)를 제거하여 토크나이저의 효율을 높이는 기법 [S316, S367].
|
|
|
|
## 🔗 지식 그래프 (Knowledge Graph)
|
|
- **상위/루트:** [[RAG 아키텍처 및 파이프라인 기초]]
|
|
- **관련 개념:** [[문서 청킹 전략]], [[텍스트 임베딩 모델]], [[BPE]], [[형태소 분석]]
|
|
- **참조 맥락:** RAG 시스템 구축 시 데이터 전처리(청킹) 품질과 모델 컨텍스트 정렬을 위해 필수적으로 참조됨.
|
|
|
|
## 📚 출처 (Sources)
|
|
- [S18] RecursiveCharacterTextSplitter 및 TokenTextSplitter 파라미터 상세 (devspoon)
|
|
- [S26] 실무에서 임베딩 모델과 토크나이저 선택 기준 (devspoon)
|
|
- [S117] Transformers 스타일의 tokenizer 사용 예시 코드 (Cloudian)
|
|
- [S314] 토큰화의 정의와 언어별 최적 방식 분석 (kt cloud)
|
|
- [S315] 모델별 전용 토크나이저 사용 및 다국어 언어 감지 (kt cloud)
|
|
- [S365] 텍스트 추출 및 정규화 시 토큰화의 역할 (kt cloud)
|
|
|
|
## 📝 변경 이력 (Change history)
|
|
- 2026-06-08: Initial draft generated via Datacollector_MAC P-Reinforce engine. |