AI
词元Token
词元到底是什么?模型读我的话,读到的真的是一个个字吗?
模型切分和处理文本的最小单位,并非每个字就是一个词元:英文约 4 个字符合一个词元,中文一个字通常要占一到两个,视模型而定。上下文窗口容量和调用费用都按词元数计算。
01 · 先这样理解
把抽象概念放进真实场景
模型切分和处理文本的最小单位,并非每个字就是一个词元:英文约 4 个字符合一个词元,中文一个字通常要占一到两个,视模型而定。上下文窗口容量和调用费用都按词元数计算。
换个角度想像乐高:一套只有固定的几百种零件,你想拼的任何东西都得先拆成这些零件——常见形状有现成的整块,奇怪的形状只能拿小零件凑。词表就是零件清单,词元就是零件;模型从头到尾只跟零件打交道,看不见你原来画的图。
02 · 点击演示
「帮我总结这份报告」发出去,模型收到的是什么?
突出显示的部分,就是当前概念在整条流程中负责的位置。
- 你发给模型的
原文「帮我总结这份报告」你眼里8 个字你发给模型的原文strawberry 里有几个 r?你眼里10 个字母,一眼数出 3 个 r 对着词表切:「总结」「报告」是常见词,各整个一条
帮我总结这份报告
对着词表切:strawberry 整个不在词表里,拆成三段
strawberry
- 模型收到 6 个编号:6 · 13 · 1552 · 27 · 310 · 2087——从这里起它看不到字模型收到 3 个编号:496 · 1027 · 15717——里面没有任何一个字母 r
- 6 词元窗口扣 6 格,账单按 6 算,不按 8 个字回答也是一个编号接一个蹦出来,再换回文字答错不奇怪它只见过 str、aw、berry 三块,没见过字母凡是要看字内部的活——数字母、倒着拼——词元都是天然障碍
Input · 你输入一句话
03 · 放进真实任务
什么时候会遇到它
数不清字母
问 strawberry 有几个 r 会答错——模型看到的是 str、aw、berry 三块编号,里面没有单个字母。
费用对不上
按字数估的账单总是不准——生僻词、代码、符号都会被拆成更多词元。
窗口提前满
「我才写了两千字怎么就满了?」窗口装的是词元,在不少模型里一个汉字要占不止一个。
04 · 想一想
用一个问题检查理解
同样一百字,中文和英文哪个占的词元多?为什么按「字数」估算费用经常翻车?
查看答案
取决于模型的词表:英文约 4 个字符合一个词元;中文在不少模型里一个字要占一到两个,所以同样字数中文往往更费。字数和词元数没有固定换算,估算要用模型厂商的 tokenizer 工具实测。
最容易踩的坑
别用字数去估窗口和费用,差几倍都正常。拿不准就用模型厂商的 tokenizer 工具实测,再决定要不要精简。