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>
14 KiB
Эксперимент 01. Токен-калибровка на реальных текстах
Дата прогона: 2026-07-04. Статус: завершён (public-domain калибровка; уточнение на реальных вебновеллах — по мере поступления файлов владельца).
TL;DR
- Китайский токенизируется дороже, чем заложено в cost-model: 0.86–0.93 ток./иероглиф у DeepSeek/Qwen/GLM (закладывали 0.65–0.75), 1.07 у GPT-o200k. B (токены исходника) 500-главной вебновеллы — не 1.1M, а ~1.29M (DeepSeek) / 1.61M (OpenAI), +17…+45%.
- Допущение «объём перевода ≈ объёму исходника ±20%» сломано для zh→ru: русский перевод «А-Кью» весит 1.88× оригинала в токенах DeepSeek (1.64× GLM, 1.34× o200k). en→ru: 1.4–1.53×; ja→ru: 1.0–1.29×. Выходная статья пайплайна для zh→ru почти вдвое больше модельной.
- Пересчёт COGS: дешёвый контур подорожал, но остаётся копеечным (стандарт-вебновелла DeepSeek: $1.85 → ~$2.6); главный удар — по премиум-миксу вебновеллы: ~$28 → ~$49 ($26 с batch). Под якорем GlobeScribe $100 всё ещё помещаемся, но буфер сжался вдвое.
- Приятные новости: японский дешевле допущений (0.81–0.95 ток./знак против 1.0–1.2 — том ранобэ
113k токенов вместо 150k), премиум-микс ранобэ даже подешевел ($3.1 против ~$3.9). Английский — в рамках модели. - Нюанс выбора моделей: у 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), «Машина времени» гл. I–II (пер. Морозова 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(venveval/.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 |
Разброс по файлам внутри языка — ±5–8% (стиль имеет значение, но не порядково).
Символов (без пробелов) на токен
| Язык | 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 | «Машина времени» гл. I–II | 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.0–1.15M.
Расхождение №2: объём русского выхода (>15%, критично для zh→ru)
Модель считала «объём перевода в токенах ≈ объёму исходника (±20%)» и все output-множители — от B. Фактически перевод на русский систематически тяжелее оригинала в токенах, для zh→ru — почти вдвое (r=1.88 DeepSeek). Рекомендуемые коэффициенты r (перевод/оригинал, в токенах одного токенизатора):
| Пара | r (внутрисемейный токенизатор) | r (o200k-прокси для Claude/GPT) |
|---|---|---|
| zh→ru | 1.65–1.90 | 1.35 |
| en→ru | 1.50–1.70 | 1.40 |
| ja→ru | 1.15–1.30 | 1.00 |
Русская сторона также дороже допущений per-word: 2.25–2.39 ток./слово у DeepSeek/Qwen (закладывали 1.6–2.0); в норме только o200k (1.99) и GLM (2.03).
Расхождение №3 (в плюс): японский дешевле
Для смешанного литературного ja закладывали 1.0–1.2 ток./знак; фактически 0.81–0.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):
- Экономика жива, но буфер премиум-микса вебновеллы под якорем $100 сжался с ~3.5× до ~2× (без batch). Правило «дорогая модель — точечно, по бюджету» становится жёстче: полный Sonnet-финал 500-главной вебновеллы сам по себе — $46 (или $23 batch / $31 промо-тарифом Sonnet 5).
- «Бюджет премиум-токенов ≤2×B» (Р5) для zh→ru пересчитывать с учётом r: один полный финальный проход уже расходует ~2.8×B o200k-input + 1.34×B output — формулировку бюджета лучше привязать к «×B_o200k input-эквивалентов» с r из таблицы выше.
- Выбор дешёвой модели для zh→ru сместился: Qwen-Flash потерял преимущество (дорогой output на неэффективном ru-словаре), DeepSeek остаётся оптимумом с учётом cache-hit $0.0028; GPT-5 nano конкурентоспособен, GLM интересен для output-тяжёлых ролей (редактор).
- Cache-hit экономика и batch-скидки не зависят от калибровки — рычаги из Р5 в силе.
Оговорка: контуры «чей ключ» (v2 архитектуры)
Все цифры пересчёта выше — для контура прямых ключей (Р5 v2). Для RU-агрегаторского контура (ProxyAPI/VseGPT/AITunnel) поверх них действуют наценки: дешёвые модели ×1.2–1.3, флагманы ×2–6 — премиум-микс с Sonnet там экономически недоступен независимо от калибровки, а проброс cache-hit тарифов агрегаторами не подтверждён (эмпирическая проверка — бэклог полигона: два одинаковых запроса подряд, сравнить usage/стоимость). Калибровка токенизации от контура не зависит (токенизатор тот же), меняются только $-множители.
Ограничения
- Корпус — классика начала XX века, не вебновеллы: проза Лу Синя плотнее вебновелльной, перевод Рогова — полный литературный (без сокращений). На реальных главах вебновелл цена иероглифа может быть чуть ниже, r — чуть ниже. Нужна довалидация на 3–5 главах реальных вебновелл с ru-переводами (файлы владельца →
eval/data/samples/, скрипт пересчитает автоматически). - По одной параллельной паре на направление; перевод Морозова (1909) местами вольный. Порядок величин надёжен (подтверждён посимвольной арифметикой), второй знак — нет.
- Токенизаторы Claude/Gemini/Grok закрыты; o200k-прокси для Sonnet-прохода может недооценивать стоимость (исторически токенизатор Anthropic на кириллице до +15–20% к 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, и перезапустить