C.W.K.
Stream
Lesson 05 of 06 · published

토큰, 컨텍스트 한도, Truncation

~20 min · tokens, models, gotchas

Level 0Scout
0 XP0/41 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

임베딩 모델은 hard token limit 가 있어

임베딩 호출은 글자가 아니라 토큰 최대치까지 받아. 토큰은 모델 tokenizer 의 subword 조각 — 영어는 대충 0.75 단어/토큰. 한국어, 일본어, 코드는 훨씬 dense 함.

2026년 흔한 한도:

  • OpenAI text-embedding-3-large: 8,192 토큰
  • Voyage voyage-3-large: 32,000 토큰
  • BGE-M3: 8,192 토큰
  • BGE-small-en-v1.5: 512 토큰 (이거에 사람들 발 걸려)
  • all-MiniLM-L6-v2: 256 토큰

한도 넘으면 무슨 일

거의 모든 API 가 조용히 truncate 해. 에러도 안 줘 — 모델은 텍스트 앞부분만 임베딩하고 나머지는 버림. 벡터는 멀쩡해 보이고, 검색은 잘 도는 것처럼 보이고, 긴 문서들의 뒷부분 절반을 다 잃어버리지.

silent truncation 방어법

  1. 전송 전 모델 tokenizer 로 토큰 수 카운트.
  2. tokens > limit 이면 청킹 (다음 트랙) 하거나 long-context 모델로.
  3. ingest 후 청크 길이 분포 로깅. P99 가 정확히 limit 에 박혀있으면 데이터 잃고 있는 거야.

Code

임베딩 전 토큰 수 카운트 (OpenAI)·python
import tiktoken

enc = tiktoken.encoding_for_model('text-embedding-3-large')

def count_tokens(text: str) -> int:
    return len(enc.encode(text))

long_text = open('white_paper.md').read()
print(count_tokens(long_text))   # 8192 넘으면 청킹 필요
HuggingFace 모델 토큰 카운트·python
from transformers import AutoTokenizer

tok = AutoTokenizer.from_pretrained('BAAI/bge-m3')
print(len(tok.encode(long_text)))   # 실제 모델 tokenizer 사용

External links

Exercise

코퍼스에서 가장 큰 문서 5개. 본인 임베딩 모델의 진짜 tokenizer 로 토큰 수 카운트. 한도 넘는 게 몇 갠지 보고. 분포 보고 청킹 budget 결정 — 추측 말고.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.