Token 和 Embedding的关系
# Token与Embedding的关系
## **Token**
Token是模型处理文本时的最小离散单元,可以是一个词、子词(subword)或符号(如标点)。
大模型(如GPT、BERT)通过分词器(Tokenizer)将原始文本拆分成Token序列。
分词方式:
词级分词(如"hello"作为一个Token)。
子词分词(如BERT的WordPiece、GPT的Byte-Pair Encoding):
例如,"unhappy" → "un" + "happy"(两个Token),解决罕见词和词表膨胀问题。
词表(Vocabulary):模型所有可能Token的集合(如GPT-3的词表约5万个Token)。
数值化:每个Token被映射为词表中的整数索引(如"cat"→ID 5432)。
## Embedding
Embedding是将Token映射到一个连续向量空间的数学表示,本质是一个高维向量(如GPT-3的嵌入维度是12288)。
它捕捉Token的语义和语法特征(例如,"king"和"queen"的向量方向相似)。
生成方式:
通过嵌入层(Embedding Layer)实现,是一个可学习的矩阵,行数=词表大小,列数=嵌入维度。
例如,Token ID=5432 → 查表得到对应的d维向量(如[0.2, -0.5, ..., 1.4])。
## Token和 Embedding的关系
```java
原始文本 → Token化(离散ID) → Embedding层(连续向量) → 模型计算
```
例如:"I love NLP" → Token IDs `[32, 156, 5432]` → 3个`d`维向量 → 输入Transformer。
- Token是**标量**(一个整数),Embedding是**向量**(如`[d×1]`)。
- 模型输入的最终形式是一个**序列的Embedding矩阵**(如`[序列长度×嵌入维度]`)。