textmachine/docs/experiments/01-token-calibration.md
Claude (backend session) 9bb00d49f2 Initial commit: documentation, eval polygon, backend step 0 verdict
TextMachine project repository (AI translation of literary books).
Includes: v2 architecture decisions, MVP plan, research 01-12,
polygon experiments 01-03, backend-session revalidation verdict
(03-implementation-notes.md).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 06:50:59 +03:00

14 KiB
Raw Permalink Blame History

Эксперимент 01. Токен-калибровка на реальных текстах

Дата прогона: 2026-07-04. Статус: завершён (public-domain калибровка; уточнение на реальных вебновеллах — по мере поступления файлов владельца).

TL;DR

  1. Китайский токенизируется дороже, чем заложено в cost-model: 0.860.93 ток./иероглиф у DeepSeek/Qwen/GLM (закладывали 0.650.75), 1.07 у GPT-o200k. B (токены исходника) 500-главной вебновеллы — не 1.1M, а ~1.29M (DeepSeek) / 1.61M (OpenAI), +17…+45%.
  2. Допущение «объём перевода ≈ объёму исходника ±20%» сломано для zh→ru: русский перевод «А-Кью» весит 1.88× оригинала в токенах DeepSeek (1.64× GLM, 1.34× o200k). en→ru: 1.41.53×; ja→ru: 1.01.29×. Выходная статья пайплайна для zh→ru почти вдвое больше модельной.
  3. Пересчёт COGS: дешёвый контур подорожал, но остаётся копеечным (стандарт-вебновелла DeepSeek: $1.85 → ~$2.6); главный удар — по премиум-миксу вебновеллы: ~$28 → ~$49 ($26 с batch). Под якорем GlobeScribe $100 всё ещё помещаемся, но буфер сжался вдвое.
  4. Приятные новости: японский дешевле допущений (0.810.95 ток./знак против 1.01.2 — том ранобэ 113k токенов вместо 150k), премиум-микс ранобэ даже подешевел ($3.1 против ~$3.9). Английский — в рамках модели.
  5. Нюанс выбора моделей: у Qwen-Flash дорогой ru-выход ($0.40/M × самый неэффективный ru-токенизатор 2.39 ток./слово) — для zh→ru он теперь дороже DeepSeek ($2.61 против $2.57 за стандарт-вебновеллу против прежних $1.65 vs $1.85). GLM-4.6 — самый ru-эффективный из китайских токенизаторов (2.03 ток./слово, на 13% лучше DeepSeek) — плюс к роли редактора (Р4).

Методика

  • Корпус: 16 файлов художественной прозы (см. eval/data/samples/manifest.json): zh — Лу Синь («阿Q正传» полностью, «祝福»; упрощённые иероглифы через OpenCC t2s, как в вебновеллах), ja — Акутагава, Дадзай, Сосэки (Aozora Bunko, фуригана вычищена), en — Burroughs, Wells, Howard (Project Gutenberg, жанровая проза), ru — Чехов, Гоголь, Куприн + три параллельных перевода: «А-Кью» (пер. Рогова, zh→ru), «Машина времени» гл. III (пер. Морозова 1909, en→ru), «Нос» Акутагавы (пер. А. Стругацкого, ja→ru). Соответствие параллельных пар проверено по границам глав/зачинам/концовкам. Лицензии: оригиналы PD; переводы Рогова и Стругацкого под копирайтом — используются только для приватной калибровки, в git не попадают (eval/data/ вне репо-артефактов).
  • Токенизаторы (скачаны с HuggingFace 2026-07-04): deepseek-ai/DeepSeek-V3.2-Exp, Qwen/Qwen3-8B, Qwen/Qwen2.5-7B-Instruct, zai-org/GLM-4.6 (tokenizer.json, replaceable в eval/tokenizers/); tiktoken 0.13.0: o200k_base (GPT-4o/5), cl100k_base (GPT-4, для сравнения с литературными данными). Оговорка: публичного токенизатора DeepSeek V4 на HF нет (репо закрыто/отсутствует) — использован V3.2; токенизатор Claude/Gemini/Grok не публикуется — прокси o200k, уточнение через count_tokens API при появлении ключей.
  • Скрипт: eval/token_calc.py (venv eval/.venv); сырые числа — eval/data/token_calc_results.json. Qwen3 и Qwen2.5 дали идентичные значения (один словарь 151k BBPE) — в таблицах объединены.

Результаты

Токены на опорную единицу (агрегат по корпусу, взвешенный по объёму)

Язык Единица o200k (GPT-4o/5) cl100k (GPT-4) DeepSeek V3.2 Qwen3/2.5 GLM-4.6
zh иероглиф 1.072 1.553 0.859 0.927 0.897
ja знак (кандзи+кана) 0.947 1.251 0.835 0.807 0.872
en слово 1.241 1.250 1.251 1.251 1.250
ru слово 1.992 3.210 2.252 2.394 2.029

Разброс по файлам внутри языка — ±58% (стиль имеет значение, но не порядково).

Символов (без пробелов) на токен

Язык o200k cl100k DeepSeek Qwen GLM-4.6
zh 1.11 0.76 1.38 1.28 1.32
ja 1.16 0.87 1.31 1.36 1.25
en 3.67 3.64 3.64 3.64 3.64
ru 2.72 1.69 2.40 2.26 2.67

Параллельные пары: токены перевода / токены оригинала (r)

Пара Объект o200k cl100k DeepSeek Qwen GLM-4.6
zh→ru «А-Кью» целиком (21.4k зн. → 69.7k зн. ru) 1.34 1.50 1.88 1.86 1.64
en→ru «Машина времени» гл. III 1.40 2.32 1.53 1.68 1.40
ja→ru «Нос» Акутагавы 1.01 1.17 1.29 1.43 1.13

Посимвольная сверка подтверждает арифметику: 1 иероглиф → ~3.26 ru-символов; 3.26 × (1.365 zh-симв./ток ÷ 2.36 ru-симв./ток) = 1.885 ✓.

Расхождение №1: цена иероглифа (>15%)

09-cost-model.md §1.1 закладывал 0.65 (DeepSeek) / 0.75 (GPT-4o) ток./иероглиф по внешним бенчмаркам. Замер на литературной прозе (упрощённые иероглифы): DeepSeek 0.86 (+32%), Qwen 0.93, GLM 0.90, o200k 1.07 (+43%). Причина, вероятно, в составе внешних замеров (новостной/веб-текст с иной долей пунктуации и частотных клише). Следствие: B вебновеллы 500 глав (1.5M иероглифов) = 1.29M токенов DeepSeek / 1.39M Qwen / 1.61M o200k вместо модельных 1.01.15M.

Расхождение №2: объём русского выхода (>15%, критично для zh→ru)

Модель считала «объём перевода в токенах ≈ объёму исходника (±20%)» и все output-множители — от B. Фактически перевод на русский систематически тяжелее оригинала в токенах, для zh→ru — почти вдвое (r=1.88 DeepSeek). Рекомендуемые коэффициенты r (перевод/оригинал, в токенах одного токенизатора):

Пара r (внутрисемейный токенизатор) r (o200k-прокси для Claude/GPT)
zh→ru 1.651.90 1.35
en→ru 1.501.70 1.40
ja→ru 1.151.30 1.00

Русская сторона также дороже допущений per-word: 2.252.39 ток./слово у DeepSeek/Qwen (закладывали 1.62.0); в норме только o200k (1.99) и GLM (2.03).

Расхождение №3 (в плюс): японский дешевле

Для смешанного литературного ja закладывали 1.01.2 ток./знак; фактически 0.810.95. Том ранобэ 135k знаков = ~113k токенов DeepSeek (модель брала 150k, 25%).

Пересчёт COGS

Множители пересчитаны покомпонентно через r (стандарт-сценарий: переводчик 2.0 in / r out; редактор (1.5+r) in / r out; судья на 20% выборки 0.2(1+2r) in / 0.1r out):

M_in(r) = 3.7 + 1.4r; M_out(r) = 2.1r — при r=1 даёт 5.1/2.1, что чуть оптимистичнее модельных 6/3 (модель включала запас; сравнение ниже — против её же табличных цифр).

Кейс Было (09-cost-model) Стало (калибровка) Δ
Вебновелла 500 гл. zh→ru, DeepSeek V4 Flash, стандарт $1.85 $2.57 (B=1.29M, r=1.88) +39%
— то же, Qwen-Flash $1.65 $2.61 (B=1.39M, r=1.86; дорогой ru-выход $0.40/M) +58%
— то же, GPT-5 nano $1.65 $2.26 (B=1.61M, r=1.34) +37%
Премиум-микс вебновеллы (стандарт DeepSeek + Sonnet-финал) ≈$28 ≈$49 (Sonnet-проход: in (1+r+0.5)·B_o200k=4.57M×$3 + out 1.34·B_o200k=2.16M×$15 = $46.2) +75%
с Batch 50% на Sonnet ≈$15 ≈$26 +73%
Том ранобэ ja→ru, DeepSeek, стандарт $0.25 $0.17 (B=113k, r=1.29) 32%
Премиум-микс ранобэ ≈$3.9 ≈$3.1 (Sonnet-проход $2.9) 20%
Англ. роман en→ru, DeepSeek, стандарт $0.23 $0.22 (B=131k, r=1.53) ≈0

Выводы для архитектуры (Р5):

  1. Экономика жива, но буфер премиум-микса вебновеллы под якорем $100 сжался с ~3.5× до ~2× (без batch). Правило «дорогая модель — точечно, по бюджету» становится жёстче: полный Sonnet-финал 500-главной вебновеллы сам по себе — $46 (или $23 batch / $31 промо-тарифом Sonnet 5).
  2. «Бюджет премиум-токенов ≤2× (Р5) для zh→ru пересчитывать с учётом r: один полный финальный проход уже расходует ~2.8×B o200k-input + 1.34×B output — формулировку бюджета лучше привязать к «×B_o200k input-эквивалентов» с r из таблицы выше.
  3. Выбор дешёвой модели для zh→ru сместился: Qwen-Flash потерял преимущество (дорогой output на неэффективном ru-словаре), DeepSeek остаётся оптимумом с учётом cache-hit $0.0028; GPT-5 nano конкурентоспособен, GLM интересен для output-тяжёлых ролей (редактор).
  4. Cache-hit экономика и batch-скидки не зависят от калибровки — рычаги из Р5 в силе.

Оговорка: контуры «чей ключ» (v2 архитектуры)

Все цифры пересчёта выше — для контура прямых ключей (Р5 v2). Для RU-агрегаторского контура (ProxyAPI/VseGPT/AITunnel) поверх них действуют наценки: дешёвые модели ×1.21.3, флагманы ×26 — премиум-микс с Sonnet там экономически недоступен независимо от калибровки, а проброс cache-hit тарифов агрегаторами не подтверждён (эмпирическая проверка — бэклог полигона: два одинаковых запроса подряд, сравнить usage/стоимость). Калибровка токенизации от контура не зависит (токенизатор тот же), меняются только $-множители.

Ограничения

  • Корпус — классика начала XX века, не вебновеллы: проза Лу Синя плотнее вебновелльной, перевод Рогова — полный литературный (без сокращений). На реальных главах вебновелл цена иероглифа может быть чуть ниже, r — чуть ниже. Нужна довалидация на 35 главах реальных вебновелл с ru-переводами (файлы владельца → eval/data/samples/, скрипт пересчитает автоматически).
  • По одной параллельной паре на направление; перевод Морозова (1909) местами вольный. Порядок величин надёжен (подтверждён посимвольной арифметикой), второй знак — нет.
  • Токенизаторы Claude/Gemini/Grok закрыты; o200k-прокси для Sonnet-прохода может недооценивать стоимость (исторически токенизатор Anthropic на кириллице до +1520% к o200k). Уточнить через count_tokens при появлении ключа — тогда премиум-цифры могут ещё подрасти.
  • DeepSeek V4: замер на словаре V3.2 (V4-токенизатор не опубликован); если V4 сменил словарь — пересчитать (скрипт готов).

Воспроизведение

eval/.venv/bin/python eval/token_calc.py            # таблицы в stdout + JSON
# добавить свои тексты: файл в eval/data/samples/<lang>/, при наличии перевода —
# запись с parallel_of в eval/data/samples/manifest.json, и перезапустить