Token 与 Embedding
可复习 · 原问题出处待确认我卡在哪里
看到反复出现 Embedding 和 Token,这是什么,为什么需要。
两个词总是一起出现,又都没有被单独解释过。这一页要回答三件事:Token 是什么、Token ID 和 Embedding 有什么不同、为什么不能直接用编号。
出处。卡住的具体时间点待补,补上后链接会直接跳到那里:
▶ 3Blue1Brown · Transformers, the tech behind LLMs | Deep Learning Chapter 5 · 0:00我用自己的话解释
- Token 是什么?为什么不直接按“字”或“单词”来切?
- Token ID 和 Embedding 有什么不同?
- 模型为什么需要 Embedding,不能直接拿 Token ID 计算吗?
写完再展开:参考解释
1. Token 是什么? 模型读文字之前,先由分词器(tokenizer)把文字切成一个个片段,每个片段就是一个 Token。Token 来自一张固定的词表,可以是一个完整的单词、单词的一部分、一个标点,或者一个汉字、一个常见的中文词。
为什么不直接按单词切?因为单词是切不完的:新词、人名、拼写错误层出不穷,词表永远不够。为什么不按单个字母切?因为句子会变得很长,而且单个字母本身几乎不带意思。按常见片段切(subword)是两者之间的折中:常见的词整个保留,少见的词拆成几块常见片段,任何文字都能表示出来。
2. Token ID 和 Embedding 有什么不同? 词表里的每个 Token 都有一个整数编号,就是 Token ID。它只是一个座位号:#3810 和 #3811 编号相邻,意思却可以毫无关系,编号的大小也不代表任何东西。
Embedding 则是一张大表(矩阵):词表里的每个 Token 对应其中一行,每一行是一串数字,也就是一个向量。GPT-3 的词表约有 5 万个 Token,每个 Token 的向量有 12,288 个数字。模型拿到 Token ID 后,去这张表里查出对应的那一行,这一步就叫 embedding。
3. 为什么需要 Embedding? 模型只会对数字做乘法和加法。如果直接拿编号去算,“#3810 比 #3809 大 1”会被当成有意义的信息,而它其实毫无意义。向量就不同了:表里的数字一开始是随机的,在训练中被不断调整,最后用法相似的 Token 会落在相近的位置,某些方向还会对应某种意义上的差别。这样,“意思”就变成了模型可以计算的东西。
还要注意一点:查表得到的向量还不带上下文。英文 “bank” 在 “river bank”(河岸)和 “bank account”(银行账户)里,查出来的是同一行。之后要经过 Attention,这个向量才会吸收周围词的信息,变成“在这句话里的 bank”。
来源
- 原问题的出处待确认,见本页开头的说明。
- 参考解释、交互实验和测验由 Claude 编写。分词结果、Token 编号和二维向量都是示意,不来自真实的分词器或模型。
- 学习材料:3Blue1Brown · Transformers, the tech behind LLMs(Deep Learning 第 5 章,讲到了 Token、Embedding 矩阵和 GPT-3 的 12,288 维)。