简介:本文面向开发者、架构师与技术负责人,系统梳理LLM与RAG系统中分词器与Embedding模块的评测方法:从功能完整性、编码效率、语义表达、稳定性、兼容性与成本等维度建立评测框架,给出可落地的测试流程、示意代码与结果解读要点,帮助读者科学评估数据处理链路质量,为模型选型与上线验证提供依据。
在大语言模型(LLM)与检索增强生成(RAG)系统中,原始文本并不能直接输入模型。从一段文字进入系统,到被模型理解、检索与生成,中间要经过两道关键工序:先由分词器(Tokenizer)将文字转换为Token编号序列,再由Embedding层将编号映射为高维向量。这两道工序共同构成了LLM与RAG的“数据处理机”,其质量直接决定后续模型的计算效率、语义理解上限以及RAG检索的召回效果。
本文的评测对象就是这条数据处理链路,要回答的核心问题包括:
需要强调:评测不是简单回答“好不好”,而是回答“在什么条件下、面向什么业务、表现如何”。同样的分词器,在英文语料上压缩率可观,在中文语料上可能表现平平;同样维度的Embedding,在短文本检索中够用,在细粒度语义区分任务中可能不足。通过本文,读者可以建立一套可操作、可复现的评测框架,用于模型选型、方案对比与上线前验证。适用读者包括应用开发者、算法工程师、系统架构师、技术负责人以及需要评估大模型服务能力的企业技术团队。
计算机底层以离散字符形式存储文字。若直接以字母或单字为单位训练模型,模型需要先耗费大量算力从字符序列中“拼”出词语含义,效率极低。Token的本质,是代表字、词或词片段的数字编号;分词器负责文字与Token之间的双向转换。通过这一映射,离散的字符组合被转化为模型可直接处理的数字序列,计算效率显著提升。
现代分词器普遍采用子词切分策略,主流算法包括字节对编码(BPE)及词片切分类算法,被众多主流厂商采用。以英文为例,”oldest”可能被拆分为”old”与”est”两个Token。子词切分最大的价值在于处理未见过的词汇:即便”goodest”不在词表中,模型也能通过组合已知片段(”good”+”est”)近似理解其语义。这决定了分词器面对新词、错别字、专业术语时的容错能力,是评测中的重点观察项。
词表大小决定分词器认识的Token总量。以行业公开信息为例:早期代表性模型词表约5万,对中文支持较差,一个汉字往往对应一个甚至多个Token,处理效率打折;新一代模型词表扩展至约20万,覆盖了更丰富的中文词汇,中文编码效率与理解能力明显改善。对中文业务而言,词表大小直接影响上下文窗口的有效利用率与调用成本。
另一个容易被忽略的事实是:Tokenization属于数据预处理阶段,分词器在模型训练过程中固定不变,不属于模型的可学习参数。这意味着词表能力在选型时即被“锁定”,无法通过后续微调弥补,评测必须在上线前完成。
大语言模型本质上是一个复杂的连续函数,数学上要求输入相近时输出也相近。但Token只是孤立编号(例如1代表“苹果”,2代表“香蕉”),编号本身不携带语义:数值上2与1相邻,却不能说明“香蕉”与“苹果”语义相近;同时,孤立的离散编号与连续函数的假设天然冲突。Embedding正是为解决该问题而存在:它把每个Token映射为高维向量,向量中每个维度代表某种潜在特征(语言、形状、颜色、类别等)。语义相近的词(如“苹果”与”Apple”)在向量空间中距离更近,模型得以利用函数连续性降低训练难度、提高泛化能力。
Embedding向量的长度通常记作d_model,决定了模型观察世界的细腻程度。从公开资料看,早期模型的大参数版本约为1600维,近年某推理型模型达到7168维,新一代旗舰模型更可能达到万维以上。但维度并非越高越好:更高维度意味着更强的表达能力,同时也意味着更高的显存占用、计算量与存储成本。评测应在“表达是否够用”与“资源是否可承受”之间寻找平衡点。
评测不能停留在“效果好、使用方便”的笼统判断,推荐按下表建立维度框架:
| 评测维度 | 核心观察点 | 验证方法 |
|---|---|---|
| 功能完整性 | 编解码双向无损、未知词拆分、多语言与特殊符号支持 | 往返一致性测试、词表外样本测试 |
| 编码效率 | 字符/Token压缩比、中英文差异 | 固定语料Token计数统计 |
| 语义表达 | 同义对与类别对的向量距离分布 | 相似度合理性抽查 |
| 性能表现 | 分词吞吐、向量化延迟、长文本表现 | 压测与耗时记录 |
| 稳定性 | 异常输入、超长输入、混合编码 | 边界样本测试 |
| 兼容性 | 词表与模型配套、向量维度与检索组件匹配 | 链路联调核对 |
| 可维护性与成本 | 版本迁移成本、Token用量对成本影响 | 版本对比与用量测算 |
各维度的验证逻辑展开如下:
测试前需明确以下条件,否则结果不具备可比性:
推荐按以下流程执行:
示意代码(通用伪代码,可直接改造复用):
# 示意一:分词器双向一致性与压缩率验证def round_trip_check(tokenizer, samples):for text in samples:ids = tokenizer.encode(text)restored = tokenizer.decode(ids)if restored != text:print("无损还原失败:", text[:50])def compression_ratio(text, ids):# 字符数 / Token数,数值越高编码越紧凑return len(text) / max(len(ids), 1)
# 示意二:Embedding语义合理性抽查import mathdef cosine(a, b):dot = sum(x * y for x, y in zip(a, b))na = math.sqrt(sum(x * x for x in a))nb = math.sqrt(sum(y * y for y in b))return dot / (na * nb)# 期望:cos(苹果, Apple) 显著大于 cos(苹果, 卡车);# 同类别对(苹果, 香蕉)的相似度介于两者之间
Token与Embedding是LLM与RAG系统的“数据处理机”:分词器把文字变成模型可处理的数字序列,其词表规模与子词切分能力决定了编码效率与健壮性;Embedding把孤立的编号升级为连续向量,其维度与语义空间结构决定了模型的表达上限与RAG的检索质量。评测这两道工序,应从功能完整性、编码效率、语义表达、性能、稳定性、兼容性与成本等维度建立框架,通过双向还原测试、压缩比统计、相似度抽查与异常边界测试等方法逐项验证,并在明确的版本、语料与环境边界内解读结果。评测的价值不在于给出“好/坏”的标签,而在于让选型决策建立在可观察、可复现的证据之上,并为长期维护预留回归与升级空间。