一、Token:把文本变成数字
神经网络只能处理数字。Tokenization 就是把人类语言拆成离散的数字 ID。
import { getEncoding } from 'js-tiktoken';
const enc = getEncoding('cl100k_base');
const tokens = enc.encode("你好,世界!");
console.log(tokens); // Token ID 数组
GPT 的词汇表约 10 万个 Token。一个英文字符约 0.3 个 Token,一个中文字符约 0.6 个 Token——这就是为什么中文内容消耗更多 Token。
二、Embedding:给数字赋予语义
Token ID 本身没有语义——41 不比 42 "小"。Embedding 把离散的 Token ID 映射到高维连续向量空间。
function cosineSimilarity(vecA, vecB) {
let dot = 0, magA = 0, magB = 0;
for (let i = 0; i < vecA.length; i++) {
dot += vecA[i] * vecB[i];
magA += vecA[i] ** 2;
magB += vecB[i] ** 2;
}
return dot / (Math.sqrt(magA) * Math.sqrt(magB));
}
在向量空间中,"Karpathy"和"卡帕西"的向量方向接近(余弦相似度 > 0.85),而和"天气"的向量几乎垂直。
三、总结
- Tokenization 把文本变成数字 ID
- Embedding 把数字 ID 映射到语义向量空间
- 语义相似的文本在向量空间中距离更近 > 4. 这两个概念是理解 Transformer 的基础前提