본문으로 건너뛰기

LLM 토큰 비용을 고정하는 unigram 단어 코덱

unigram은 바이트마다 한 단어를 배정해 식별자의 LLM 토큰 비용을 고정합니다.

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

unigram은 바이트와 단어를 일대일로 대응시켜 사람이 읽을 수 있는 식별자를 만들면서 바이트 수와 같은 토큰 비용을 목표로 하는 Rust 코덱입니다. 256개의 소문자 영어 단어를 여러 지정 토크나이저에서 공백 접두와 단독 형태 모두 한 토큰이 되도록 골라 4바이트부터 32바이트까지 비용을 일정하게 유지합니다. 200개 payload 측정에서는 hex·base64url·base58보다 평균과 최악 비용의 변동이 작았지만, GPT 어휘에 base64 조각이 포함된 탓에 o200k의 32바이트 비교에서는 base64url이 더 저렴했습니다. 고정 단어표와 canonical/recover 파서, CRC-8 검사형, 문맥별 전수 측정 스크립트가 함께 제공되므로 nonce와 correlation ID처럼 짧은 값에 맞고, 표 버전 기록 없이는 장기 저장에 사용할 수 없습니다.

섹션별 상세

01
LLM 프롬프트와 로그에 들어가는 식별자는 사람이 읽고 전달하기 쉬워야 하지만, 일반적인 hex·base64url·base58 인코딩은 값에 따라 토큰 수가 달라집니다. unigram은 256개의 소문자 ASCII 영어 단어를 바이트 값에 하나씩 대응시켜 1바이트를 정확히 1단어와 1토큰으로 바꿉니다. 따라서 4바이트 값은 4토큰, 16바이트 값은 16토큰으로 고정되며, 네 단어로 된 예시는 32비트를 담습니다.
rust
use unigram::{UnigramId, CheckedUnigramId};
let id: UnigramId = UnigramId::try_random()?; // 32 fresh bits, 4 tokens
println!("{id}"); // "password email share building"
let returned = UnigramId::::parse(&text)?; // canonical: exact
let salvaged = UnigramId::::recover(&text)?; // tolerant: forgives a round trip
// One extra word of CRC-8, when a mutated value must not pass as a valid one.
let checked: CheckedUnigramId = CheckedUnigramId::try_random()?;

Rust 코드가 32비트 식별자를 생성하고 단어열로 출력한 뒤, 엄격한 parse와 관대한 recover로 다시 읽는 흐름을 나타냅니다. CRC-8을 포함한 CheckedUnigramId는 변형된 값의 통과를 검사합니다.

02
unigram은 바이트를 실제 값으로 유지하고 단어열을 표시·파싱 형식으로 분리해 길이와 동등성의 기준을 타입에 담습니다. 고정 길이 UnigramId는 canonical parse에서 소문자 단어와 단일 공백만 허용하고, recover는 대소문자·구분자·줄바꿈처럼 모델을 거친 문자열의 변형을 받아들입니다. 변수 길이 데이터에는 encode, decode, decode_recovered, try_mint를 사용하며, 알 수 없는 단어는 거부하고 위치를 지정합니다.
03
200개의 결정적 payload를 측정한 결과 unigram은 4·8·16·32바이트에서 평균과 최악 토큰 수가 각각 4.0·8.0·16·32로 일치했습니다. 같은 조건에서 32바이트 hex는 평균 42.6개와 최악 52개, base64url은 41.2개와 48개, base58은 42.0개와 47개까지 늘어났습니다. 다만 GPT 계열 어휘가 base64 조각을 학습한 영향으로 32바이트에서는 o200k 기준 base64url 평균이 29.5토큰이 되어 unigram의 32토큰보다 낮고, 4바이트에서는 unigram이 4.0 대 4.5로 우세합니다.
04
토큰 비용은 시작 위치·공백 뒤·JSON·문장 중간에서도 바이트 수에 비례하도록 설계됐으며, 표에 따르면 바로 앞 구두점 때문에 최대 한 토큰이 추가됩니다. 256개 항목을 GPT-4o, GPT-3.5/4, GPT-3, GPT-2, Llama용 지정 artifact, Claude 측정 재구성본에서 공백 접두와 단독 형태로 검사했으며, 공백은 다음 단어에 흡수되어 비용이 없습니다. 이 특성은 0.2.0에서 일부 단어가 단독으로 2~3토큰을 차지했던 문제를 전체 항목 sweep으로 고친 결과입니다.
bash
uv run verify-alphabet.py

고정된 단어표를 모든 지정 토크나이저에서 재측정하고 문맥별 토큰 비용을 점검하는 검증 명령입니다.

05
기존 BIP39 단어 2048개는 여러 토크나이저에서 한 토큰인 항목이 349개뿐이어서, 256개로 줄이면 unigram과 같은 8비트/토큰 밀도에 머뭅니다. BIP39는 종이에 적는 seed phrase를 위해 네 글자 접두사와 전사 오류 거리를 최적화하지만, unigram은 bare 형태와 공백 접두 형태의 토큰 비용을 최적화합니다. 값 사이의 공백은 무료인 반면 밑줄·마침표·하이픈·쉼표·줄바꿈은 추가 비용을 만들기 때문에, 문자열 내부에서 공백으로 단어를 잇는 구조가 핵심입니다.
06
단어표는 바이트 n을 ALPHABET[n]에 영구적으로 대응시키며, 항목을 바꾸면 과거에 발급된 모든 값의 해석이 달라집니다. 각 단어는 한 글자 편집으로 다른 항목이 되지 않고 서로의 접두사·접미사 파생형도 아니어서 오타나 잘린 문자열이 다른 유효 값으로 바뀔 가능성을 줄입니다. 표의 digest와 FORMAT_VERSION 기록이 필요하며, 변형 검출이 필요할 때는 CRC-8 단어 하나를 추가하는 CheckedUnigramId를 사용합니다.
07
검증 체계는 codec 자체와 단어표 구조를 검사하는 cargo test, 실제 토큰 비용을 재측정하는 verify-alphabet.py, Claude 공식 count_tokens endpoint와 재구성 카운터를 대조하는 verify-claude.py로 나뉩니다. cargo test만 통과해도 토큰 비용을 보장하지 않으므로 표를 수정할 때마다 다섯 계열의 토크나이저와 모든 256개 항목을 다시 측정해야 합니다. 런타임 의존성은 OS CSPRNG뿐이고 코덱은 실행 중 토크나이징하지 않으며, 프로젝트는 MIT License로 배포됩니다.

용어 해설

전단사 코덱(Bijective Codec)
바이트 값과 단어열을 서로 중복 없이 일대일로 변환하는 인코딩 방식입니다. unigram은 각 바이트를 하나의 고정 단어에 대응시켜 인코딩하고, 같은 단어열을 다시 원래 바이트로 복원합니다. 값의 길이와 토큰 비용을 일정하게 유지하는 데 중요합니다.
토크나이저(Tokenizer)
텍스트를 LLM이 처리하는 토큰 단위로 나누는 구성 요소입니다. 같은 문자열도 모델과 주변 문맥에 따라 토큰 수가 달라질 수 있어, 문자열 기반 식별자의 실제 비용을 좌우합니다. unigram은 여러 토크나이저에서 단어당 한 토큰이 되도록 단어 목록을 고정했습니다.
CRC-8 오류 검출 코드(CRC-8)
데이터가 전송되거나 복사되는 과정에서 변형됐는지 확인하는 8비트 검사용 값입니다. unigram의 CheckedUnigramId는 원래 바이트 값에 CRC-8 단어 하나를 추가해 잘못 바뀐 식별자가 유효한 값으로 통과하는 상황을 막습니다.
암호학적 안전 의사난수 생성기(CSPRNG)
예측이 어려운 난수를 생성하는 운영체제 기반 난수원입니다. unigram은 실행 시 별도 런타임 의존성 없이 OS CSPRNG로 새 식별자의 바이트를 만들며, 생성된 바이트를 고정 단어표에 대응시킵니다.
SentencePiece 토크나이저(SentencePiece)
문자열을 서브워드 토큰으로 분할하는 토크나이징 방식입니다. 이 프로젝트는 특정 SentencePiece artifact를 Llama 계열 측정에 사용했으며, 글에 적힌 검증 대상이 모든 Llama 모델이나 같은 이름의 모든 모델을 뜻하지 않는다고 구분합니다.

기술

  • Rust
  • Cargo
  • OS CSPRNG
  • GPT-4o
  • GPT-3.5/4
  • GPT-3
  • GPT-2
  • Llama
  • Claude
  • SentencePiece
  • Anthropic count_tokens API

활용 사례

  • nonce 식별자
  • correlation ID
  • 프롬프트 내 추적 값
  • 로그와 오류 메시지용 사람이 읽는 식별자
  • 모델을 거친 문자열의 식별자 복구

언급된 리소스

AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 08. 19.수집 2026. 08. 19.출처 타입 RSS

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.