← 所有文章

LLM如何处理文本:我的i18n系统教会我的Token经济学

当我为网站构建i18n翻译系统时,我发现将一篇1500词的英文博客翻译成韩语所消耗的token是英文原文的2.8倍。相同的语义内容,相同的含义,却带来2.8倍的API成本。日语为2.4倍,繁体中文为2.1倍,西班牙语为1.15倍。多语言内容的token经济学让我措手不及,因为我之前并不了解分词器的工作原理。1

TL;DR

分词将人类可读的文本转换为语言模型处理的数字token。在将27篇博客翻译成6种语言后,我获得了真实的成本数据:非拉丁文字每个语义单元消耗的token是英语的2-3倍。下方的交互式可视化工具让您可以粘贴任意语言的文本并查看token分解情况。理解分词帮助我准确预算翻译流水线的成本,优化提示词以降低35%的费用,并调试了一个格式问题——韩语翻译丢失了Markdown结构,因为分词器将脚注标记拆分到了不同的token边界上。



我的i18n Token成本数据

我使用Claude将27篇博客翻译成了6种语言。翻译质量要求使用Opus级别的模型(绝不使用更便宜的模型——这是我在Haiku产出读起来像机器翻译的译文后学到的教训)。各语言的token消耗令我惊讶:

语言 平均Token/篇 相对英语的倍率 文字类型
英语(原文) 1,850 1.0x 拉丁文
西班牙语 2,128 1.15x 拉丁文
德语 2,220 1.20x 拉丁文
法语 2,090 1.13x 拉丁文
韩语 5,180 2.80x 谚文
日语 4,440 2.40x CJK混合
繁体中文 3,885 2.10x CJK

拉丁文字语言(西班牙语、德语、法语)与英语的差距在20%以内。CJK和谚文语言则跃升至2-3倍。这一成本差异在27篇文章 × 6种语言 = 162次翻译中不断累积。2

差距存在的原因

大多数分词器(BPE,Claude和GPT-4均采用此方法)主要基于英语文本训练。英语词汇拥有优化的token表示,因为训练数据中英语的占比远超其他任何语言。常见英语单词(”the”、”and”、”is”)映射为单个token。韩语音节块、日语汉字和中文字符通常被拆分为2-3个字节级token,因为分词器在训练过程中遇到它们的频率较低。3

这种效应是系统性的,而非随机的。每次韩语翻译的成本大约是英语等价内容的2.8倍。由于倍率稳定一致,我可以准确地进行预算。


分词Bug

在我第一批韩语翻译中,翻译后的文章丢失了所有Markdown格式:脚注引用([^1])消失了,代码块丢失了语言标签,标题标记(##)被合并到正文中。

诊断花了一个小时。根本原因:我的翻译提示词只写了”将这篇博客翻译成韩语”,而没有指定格式保留要求。在韩语上下文中,分词器对Markdown语法的token边界拆分方式与英语上下文不同。模型将[^1]视为可翻译内容,而非结构性标记。

修复方法:我在翻译提示词中添加了明确的约束条件:

Preserve all markdown formatting exactly:
- Keep [^N] footnote references unchanged
- Keep ``` code fences with language tags unchanged
- Keep ## heading markers unchanged
- Keep **bold** and *italic* markers unchanged

每条约束消除了一种故障模式。约束列表最终比翻译指令本身还长——这是我在OODA提示词工程框架中描述的一种模式。4


什么是Token

从字符到Token

处理文本的朴素方法是将每个字符作为一个输入单元。”Hello world”变成11个字符。字符级处理捕获了每一个细节,但会产生极长的序列:一篇1000词的文档大约变成5000个字符。5

词级处理减少了序列长度,但无法处理未知词汇。一个包含50,000个条目的词级词汇表无法处理”unfathomability”,除非该词在训练中精确出现过。

子词分词找到了一个折中方案。常见词汇(”the”、”and”)保持为单个token。不常见的词汇被拆分为子词片段。”Unfathomability”被拆分为[“un”, “fath”, “om”, “ability”],其中每个片段出现的频率足够高,拥有经过训练的表示。

字节对编码(BPE)

BPE被Claude和GPT-4采用,它从单个字节开始,迭代地合并最频繁的相邻对:6

  1. 从单个字符开始:[l, o, w, e, r]
  2. 最频繁的对:(l, o) → 合并为[lo, w, e, r]
  3. 最频繁的对:(e, r) → 合并为[lo, w, er]
  4. 最频繁的对:(lo, w) → 合并为[low, er]
  5. 最频繁的对:(low, er) → 合并为[lower]

最终词汇表包含所有原始字节加上每个合并后的token,通常有50,000-100,000个条目。英语词汇在合并token中占主导地位,因为英语在训练数据中占据主导。


我如何优化提示词

在发现token成本差距后,我优化了翻译流水线,将成本降低了35%:

优化1:按语系分批处理

拉丁文字语言(西班牙语、法语、德语)具有结构相似性。当源文章足够短,能在上下文窗口中容纳三种输出时,我将翻译提示词批量化,在单次API调用中产出所有三种语言。共享上下文(英语原文)只需支付一次费用,而不是三次。7

优化2:约束去重

我原始的翻译提示词为每种语言重复了约束条件。优化后的版本只定义一次约束,然后应用于所有输出:

# Constraints (apply to ALL translations below):
- Preserve markdown structure, footnotes, code blocks
- Keep proper nouns in English
- Adapt idioms, don't transliterate

# Translate the following post into: Spanish, French, German

约束部分只消耗一次token。替代方案(每种语言重复约束)则消耗3倍。

优化3:精简指令

我原始的提示词使用了340个token的指令。优化后:180个token。47%的缩减在162次翻译中不断累积。

指标 优化前 优化后 节省
指令token数 340 180 47%
拉丁语系每批总计 6,780 4,438 35%
CJK语言每种总计 5,520 5,180 6%

CJK语言从提示词优化中获益较少,因为输出token(翻译本身)主导了成本。无论指令多么精简,输出在token层面本质上就更长。8


实际应用

成本估算

对于英文文本的粗略估算:1个token大约等于0.75个单词,或大约4个字符。一篇1000词的文档大约消耗1,333个token。对于非英语内容,请应用上表中的语言倍率。9

代码分词

代码的分词方式与散文不同。常见关键字(defreturnif)映射为单个token。变量名根据出现频率进行拆分:

# "def calculate_total(items):" splits approximately as:
# ["def", " calculate", "_total", "(", "items", "):", ]

一致的命名规范可以减少token数量。我的Hook基础设施使用verb-noun.sh命名约定(git-safety-guardian、recursion-guard、blog-quality-gate)。一致的模式帮助分词器高效地预测和合并常见子词。

调试意外行为

当模型产生意外输出时,分词可以解释原因。我的韩语格式Bug发生的原因是分词器在韩语上下文中对[^1]的拆分方式与英语不同。理解拆分模式直接指向了修复方案(显式的格式保留约束)。


核心要点

面向使用LLM API的工程师: - 在承诺多语言支持之前,测量每种语言的token成本;CJK语言每个语义单元的成本是英语的2-3倍 - 优化提示词指令(精简措辞、去重约束),可在高频翻译流水线上实现30-50%的成本降低 - 在生产部署前测试领域特定术语和Markdown语法的分词效果;意外的拆分会导致格式Bug

面向预算AI功能的产品经理: - 非英语语言支持的每次API调用成本是英语的1.5-3倍;使用语言倍率来预算多语言AI功能,而非按语言统一估算 - 上下文窗口限制对CJK语言的影响更大;200K token的窗口容纳的韩语内容比英语少40%


参考文献


  1. 作者的i18n翻译流水线。27篇文章翻译成6种语言。按语言测量token消耗,揭示了韩语2.8倍的倍率。 

  2. 作者的翻译成本数据。各语言token平均值基于27篇文章分别使用Claude Opus独立翻译计算得出。 

  3. Petrov, Aleksandar et al., “Language Model Tokenizers Introduce Unfairness Between Languages,” NeurIPS 2023

  4. 作者的翻译格式修复。在韩语翻译丢失脚注、代码块和标题标记后,添加了明确的Markdown保留约束。 

  5. Sennrich, Rico et al., “Neural Machine Translation of Rare Words with Subword Units,” ACL 2016

  6. Gage, Philip, “A New Algorithm for Data Compression,” The C Users Journal, 12(2), 23-38, 1994. 

  7. 作者的提示词优化。拉丁文字语言批量处理和约束去重将总流水线成本降低了35%。 

  8. 作者的提示词优化指标。指令token从340减少到180(47%)。每批总节省:拉丁语系35%,CJK 6%。 

  9. Anthropic, “Claude API Pricing,” 2025. 基于token的定价模型。