← 기술 백서 목록으로 돌아가기

공교육 BPE 토크나이저 시각화와 거대 모델 어휘 사전 분석: tLM의 온디바이스 Byte-Level BPE 인터랙티브 학습 엔진 및 GGUF 제로카피 메타데이터 파이프라인 아키텍처

"초·중·고 정보 교과와 AI 교육 현장에서 가장 큰 교육적 딜레마는 '인공지능이 자연어 텍스트를 어떻게 숫자로 이해하는가?'라는 첫 관문입니다. 대부분의 교안은 '토큰화'라는 개념을 단순 암기식 정의로 넘기며 블랙박스로 남겨둡니다. tLM(Tokenizer Learning Machine)은 사인 곡선을 계수 슬라이더로 조작하듯, 슬라이더 하나로 바이트(0~255)에서 단어/어휘로 병합되는 Byte-Level BPE의 전 구간을 120ms 디바운스로 실시간 체험시키고, 수십 GB GGUF 가중치의 텐서를 건드리지 않는 제로카피 메타데이터 스트리밍으로 Qwen, Llama-3, Phi-3, Gemma 등 실제 최신 오픈 가중치 모델들의 어휘 사전을 10ms 만에 분석합니다."

1. 공교육 AI 교실의 블랙박스: "토큰화는 왜 추상적인 암기 과목이 되었는가?"

AI 디지털교과서(AIDT)와 초·중·고 정보(SW/AI) 교육 과정에서 거대 언어 모델(LLM)의 동작 원리를 다루는 비중이 급격히 증가하고 있습니다. 그러나 학생들과 교사들이 마주하는 첫 번째 거대한 장벽은 바로 토큰화(Tokenization)입니다. 컴퓨터가 글자를 처리하는 방식은 인공지능 모델의 성능, 추론 속도, 비용, 그리고 문맥 길이 한계와 직결됨에도 불구하고, 교육 현장에서는 다음과 같은 한계에 부딪혀 왔습니다:

비교 항목 일반 온라인 웹 토크나이저 Python CLI / 학술 라이브러리 ZeliDesk tLM 온디바이스 엔진
구동 환경 & 보안 외부 SaaS 웹서버 (학생 데이터 외부 전송) 파이썬/C++ 빌드 환경 필수 100% 온디바이스 무설치 (Air-Gap 폐쇄망 완벽 구동)
인터랙티브 제어 고정된 어휘 결과만 출력 정적 스크립트 실행 결과 텍스트 슬라이더 조작으로 바이트(0)➔어휘(1200) 실시간 전이 관찰
실제 모델 어휘 분석 지원 모델 소수 고정 기가바이트 단위 모델 전체 로딩 필요 GGUF 제로카피 헤더 스트리밍 (10ms 내 수십만 어휘 파싱)
다국어 팽창 비교 단일 언어 단순 분절 수동 스크립트 작성 필요 영/한 동일 문장 토큰 분할 배수(Ratio) 실시간 텔레메트리
교실 특화 기능 없음 없음 프로젝터 대형 모드, BPE 병합 퀴즈, 학생 자작 코퍼스 학습 탭

2. 핵심 아키텍처 1: 슬라이더 기반 인터랙티브 Byte-Level BPE 엔진 (`BpeEngine.cs`)

ZeliDesk tLM의 핵심 설계 철학은 "사인 곡선을 계수 슬라이더로 조작하며 파동의 주기를 직관적으로 배우듯, 슬라이더 하나로 토큰화 알고리즘의 전 구간을 체득시키는 것"입니다. 이를 구현하기 위해 BpeEngine.cs는 순수 C# 기반의 초경량 교육용 Byte-Level BPE 런타임을 자체 내장하고 있습니다.

C# — BpeModel.cs: 슬라이더 기반 예산 제어 실시간 토큰화 파이프라인
// ID 0~255: 원시 바이트, 256+r: r번째 병합으로 생성된 서브워드 토큰
public sealed class BpeModel
{
    private readonly List<byte[]> _vocab = new();
    private readonly List<(int L, int R)> _merges = new();
    private readonly Dictionary<(int, int), int> _rank = new();

    public int MergeCount => _merges.Count;
    public int VocabSize => _vocab.Count;

    // 슬라이더 값(mergeBudget)에 따라 적용할 병합 규칙 범위를 실시간 필터링
    public List<int> Tokenize(byte[] input, int mergeBudget)
    {
        var seq = new List<int>(input.Length);
        foreach (var b in input) seq.Add(b);
        if (mergeBudget <= 0) return seq; // budget 0 = 순수 바이트 시퀀스

        while (seq.Count >= 2)
        {
            // 현재 시퀀스에서 적용 가능한 최저 rank(가장 먼저 배운) 인접 쌍 탐색
            int bestRank = int.MaxValue;
            (int, int) bestPair = default;
            for (int j = 0; j < seq.Count - 1; j++)
            {
                if (_rank.TryGetValue((seq[j], seq[j + 1]), out int r)
                    && r < mergeBudget && r < bestRank)
                {
                    bestRank = r;
                    bestPair = (seq[j], seq[j + 1]);
                }
            }
            if (bestRank == int.MaxValue) break; // 적용 가능한 병합 규칙 소진

            // 비중첩 좌->우 일괄 치환
            MergePairInPlace(seq, bestPair, 256 + bestRank);
        }
        return seq;
    }
}

사용자가 슬라이더를 최저값 0으로 설정하면 텍스트는 순수한 UTF-8 바이트 시퀀스(ID 0~255)로 분해됩니다. 슬라이더를 오른쪽으로 서서히 이동시키면(예: budget = 50, 200, 1200), 가장 빈번하게 함께 등장했던 인접 바이트들이 단계적으로 단일 토큰으로 결합됩니다. 이를 통해 학생들은 "글자 수가 줄어드는 것이 아니라, 빈번한 바이트 조합이 하나의 새로운 어휘 번호(256+)로 승격되는 것"이라는 현대 토크나이저의 수학적 본질을 눈으로 확인하게 됩니다.

💡 비가시 문자 시각화와 UTF-8 바이트 단편화 안전 렌더링

tLM은 Visualize(string s) 메서드를 통해 스페이스 공백을 ␣, 개행을 ⏎, 탭을 ⇥로 실시간 치환하여 토큰 경계의 공백 포함 여부를 선명하게 드러냅니다.
또한 한글과 같은 멀티바이트 문자가 BPE 중간 단계에서 불완전하게 잘렸을 경우 발생하는 DecoderFallbackException을 안전하게 포획하여, 깨진 글자 대신 ·hex(예: ·EA·B7) 16진수 바이트 블록으로 정확하게 렌더링함으로써 컴퓨터 시스템의 유니코드 인코딩 원리까지 완벽히 교육합니다.

3. 핵심 아키텍처 2: GGUF 제로카피 어휘 메타데이터 스트리밍 (`GgufVocab.cs`)

교실 컴퓨터실 PC는 메모리와 스토리지가 제한적입니다. 수십 GB에 달하는 최신 거대 언어 모델(Llama-3, Qwen-2.5, Phi-3, Gemma-2)의 어휘 사전을 확인하기 위해 전체 모델 가중치를 RAM에 로드하는 것은 불가능합니다. tLM은 GgufVocab.cs를 통해 텐서 데이터를 1바이트도 메모리에 올리지 않고 헤더부(수 MB)만 직렬 스캔하는 제로카피 메타데이터 파이프라인을 구축했습니다.

C# — GgufVocab.cs: 텐서 로딩 없는 10ms 헤더 스트리밍 리더
public static GgufVocab Load(string path)
{
    // 1MB 버퍼 순차 스캔으로 디스크 I/O 극소화
    using var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read,
                                  1 << 20, FileOptions.SequentialScan);
    using var br = new BinaryReader(fs);

    if (br.ReadUInt32() != 0x46554747) // "GGUF" Magic Number 검증
        throw new InvalidDataException("GGUF 매직 넘버가 아닙니다");
    uint version = br.ReadUInt32();
    br.ReadUInt64(); // tensor count (텐서 블록은 건너뜀)
    ulong kvCount = br.ReadUInt64();

    var v = new GgufVocab { FilePath = path };
    for (ulong i = 0; i < kvCount; i++)
    {
        string key = ReadString(br);
        uint type = br.ReadUInt32();
        switch (key)
        {
            case "general.name": v.ModelName = ExpectString(br, type, key); break;
            case "general.architecture": v.Architecture = ExpectString(br, type, key); break;
            case "tokenizer.ggml.model": v.TokenizerModel = ExpectString(br, type, key); break;
            case "tokenizer.ggml.add_space_prefix": v.AddSpacePrefix = br.ReadByte() != 0; break;
            case "tokenizer.ggml.tokens": v.Tokens = ReadStringArray(br, type, key); break;
            case "tokenizer.ggml.merges": v.Merges = ReadStringArray(br, type, key); break;
            case "tokenizer.ggml.scores": v.Scores = ReadFloatArray(br, type, key); break;
            default: SkipValue(br, type); break; // 불필요한 메타데이터 고속 스킵
        }
    }
    return v;
}

이 아키텍처를 통해 80GB 이상의 초대형 가중치 파일일지라도, 모델 메타데이터와 10만~25만 개에 달하는 어휘 사전 목록, 병합 규칙(Merges), 토큰 점수(Scores)를 단 10~50밀리초(ms) 만에 추출하여 실시간 메모리에 탑재합니다.

4. 핵심 아키텍처 3: 실제 LLM 토크나이저 듀얼 런타임 (`RealTokenizers.cs`)

현대 오픈소스 LLM 생태계의 토크나이저는 크게 두 가지 계열로 양분됩니다. tLM은 IRealTokenizer 공통 추상화를 바탕으로 두 가지 방식을 모두 순수 C#으로 완벽하게 구현하여 상호 비교를 지원합니다.

구분 Byte-Level BPE (Gpt2BpeTokenizer) SentencePiece SPM (SpmTokenizer)
대표 모델 Qwen 2.5, Llama 3.2, SmolLM2, GPT-4o Gemma 2, Phi-3, Mistral, TinyLlama
GGUF 식별자 tokenizer.ggml.model == "gpt2" tokenizer.ggml.model == "llama"
사전 분할 (Pre-tok) 정규식 기반 어휘/숫자/기호/공백 덩어리 분절 공백을 특수 기호 ▁(U+2581)로 치환 후 단일 스트림 처리
병합 알고리즘 Merges 텍스트 파일의 등록 순위(Rank) 최우선 병합 어휘 사전에 정의된 음수 로그 확률 점수(Score) 최고값 병합
미등록 문자 처리 모든 256개 바이트가 초기 어휘에 존재하므로 OOV 없음 <0xXX> 바이트 토큰으로 동적 폴백
C# — RealTokenizers.cs: SentencePiece 그리디 점수 기반 병합 루프
// SentencePiece(SPM) 런타임: 점수 최고 쌍부터 그리디 병합
while (parts.Count >= 2)
{
    float bestScore = float.NegativeInfinity;
    int bestIdx = -1;
    for (int i = 0; i < parts.Count - 1; i++)
    {
        if (_tokenToId.TryGetValue(parts[i] + parts[i + 1], out int id))
        {
            float score = id < _scores.Count ? _scores[id] : 0f;
            if (score > bestScore) { bestScore = score; bestIdx = i; }
        }
    }
    if (bestIdx < 0) break; // 더 이상 어휘에 존재하는 인접 쌍 없음

    parts[bestIdx] += parts[bestIdx + 1];
    parts.RemoveAt(bestIdx + 1);
}

// 미등록 유니코드 문자 ➔ <0xXX> 바이트 토큰 안전 폴백
foreach (var p in parts)
{
    if (_tokenToId.TryGetValue(p, out int id)) ids.Add(id);
    else foreach (var b in Encoding.UTF8.GetBytes(p))
        if (_byteTokenId[b] >= 0) ids.Add(_byteTokenId[b]);
}

5. 다국어 토큰 팽창(Token Inflation) 텔레메트리 & 모델별 비교 분석

동일한 의미를 지닌 교과 문장을 각 모델에 투입했을 때 발생하는 토큰 수 차이는 AI 인프라 운영 비용 및 추론 속도에 결정적인 영향을 미칩니다. tLM의 모델 비교 탭(Model Comparison)을 통해 도출한 4대 최신 오픈 LLM의 다국어 토큰 효율 텔레메트리는 다음과 같습니다:

모델명 (Model) 어휘 사전 크기 (Vocab) 토크나이저 방식 영문 예문 토큰 수 한국어 예문 토큰 수 한/영 팽창 배수 (Inflation)
Qwen 2.5 7B 152,064 Byte-Level BPE 12 토큰 15 토큰 1.25x (최고 효율)
Llama 3.2 3B 128,256 Byte-Level BPE 12 토큰 19 토큰 1.58x
Gemma 2 9B 256,000 SentencePiece 13 토큰 21 토큰 1.61x
Phi-3 Mini 3.8B 32,064 SentencePiece 13 토큰 38 토큰 2.92x (심각한 분절)

위 텔레메트리 데이터는 학생들에게 매우 강력한 교육적 시사점을 제공합니다: 어휘 크기가 32k에 불과한 소형 토크나이저(Phi-3)는 한국어 한 음절을 표현하기 위해 2~3개의 개별 바이트 토큰을 소모하므로, 동일한 내용을 전달하는 데 영문 대비 약 3배의 컨텍스트 윈도우와 연산 비용을 낭비합니다. 반면 15만 개 이상의 다국어 어휘를 확보한 Qwen 2.5는 한국어 형태소 단위가 어휘 사전에 미리 등록되어 있어 팽창률이 1.25배 수준으로 억제됩니다. tLM은 이러한 분석 리포트를 버튼 하나로 텍스트 파일(.txt)로 추출하여 교사용 연구 리포트나 학생 과제물로 즉시 활용할 수 있도록 지원합니다.

6. 공교육 특화 학습 기능 및 하드웨어 거버넌스 아키텍처

tLM은 단순히 엔지니어용 분석기에 머물지 않고, 실제 일선 초·중·고 교실과 대학 랩실의 교육 환경에 최적화된 5대 특화 기능을 제공합니다:

  1. 6대 인터랙티브 학습 탭 오케스트레이션:
    • 플레이그라운드: 실시간 슬라이더, 바이트 토글, 토큰/문자 비율 계측.
    • BPE 학습 과정: TrainWithSteps 기반 단계별 스냅샷, 상위 빈도 쌍 시각화, 다음 병합 예측.
    • 토크나이징 파이프라인: 정규화 ➔ 사전분할 ➔ BPE ➔ 후처리의 4단계 파이프라인 개념도.
    • 실제 모델 분석: 로컬 GGUF 모델 선택, 실시간 다국어 비교표 및 리포트 내보내기.
    • AI 튜터 (`TutorEngine`): 상주 llama-cli 프로세스를 활용한 실시간 질의응답 및 창 종료 시 Kill(entireProcessTree)을 통한 좀비 프로세스 원천 방어.
    • 내 토크나이저: 학생이 직접 입력한 문장과 코퍼스로 즉시 BPE를 학습시켜 나만의 어휘 사전을 생성.
  2. 단계별 퀴즈 모드 (`_quizMode`): BPE 학습 과정 탭에서 다음 단계로 넘어가기 전, "이 텍스트에서 다음에 병합될 가장 유력한 쌍은 무엇일까요?"를 4지선다로 출제하여 정답률과 피드백을 실시간 제공합니다.
  3. 프로젝터 대형 글씨 모드 (`_bigMode`): 교실 앞 빔프로젝터 및 전자칠판 화면 공유 시, 칩 글씨 크기를 1.35배 확대(_chipScale = 1.35)하여 맨 뒷자리 학생까지 선명하게 토큰 경계를 식별할 수 있도록 지원합니다.
  4. 게이미피케이션: 토큰 수 추측 챌린지 (`TlmProgress`): 주어진 문장의 토큰 수를 직관으로 맞히는 미니 게임을 탑재하고, 로컬 JSON(tlm_progress.json)에 정답 수와 달성 배지(초보 토크나이저, BPE 마스터 등)를 안전하게 영속화합니다.
  5. 120ms 타이머 디바운싱 & 1200개 칩 렌더링 락다운: 학생이 텍스트를 빠르게 타이핑하거나 슬라이더를 고속으로 드래그할 때 발생하는 UI 스레드 프리징을 방지하기 위해 DispatcherQueueTimer 120ms 디바운싱을 적용하고, 칩 렌더링 상한(MaxChips = 1200)을 두어 저사양 학교 PC에서도 부드러운 60fps 인터랙션을 보장합니다.

7. 결론: 인공지능 기초 공학을 손끝으로 체험하는 차세대 교육 인프라

인공지능 교육이 '단순한 프롬프트 입력과 결과 감상'에 그친다면, 미래 세대는 AI의 기술적 한계와 비용 구조를 이해하지 못하는 수동적 소비자에 머물게 됩니다.

ZeliDesk의 tLM(Tokenizer Learning Machine)은 블랙박스로 감춰져 있던 LLM의 관문을 활짝 열어젖혔습니다. 완전한 오프라인 환경, 제로 텔레메트리 보안, 그리고 수학적 알고리즘을 손끝의 슬라이더로 조작하는 직관적인 UX를 통해 대한민국 초·중·고 교실과 국방 AI 교육 현장에 진정한 공학적 탐구의 장을 제공합니다.

← 이전 기술 백서 #912 컴퓨터실 40대 PC의 스토리지 고갈과 네트워크 마비 0초 차단: sLMdown의 대용량 AI 모델 90초 스톨 가드 스트리밍 및 사전 디스크 쿼터 거버넌스 아키텍처 다음 기술 백서 → #910 공교육 자율 탐구와 에이전틱 사고력 확장: yLM의 상주 llama-cli 세션 기반 질문 분해 및 온디바이스 다단계 종합 추론 파이프라인 아키텍처
⚡ ZeliDesk tLM 인터랙티브 토크나이저 엔진 체험하기

슬라이더 조작으로 체감하는 Byte-Level BPE 학습 과정, GGUF 제로카피 모델 메타데이터 분석 및 다국어 토큰 팽창률 텔레메트리를 직접 경험하세요.

ZeliDesk Suite 무료 다운로드