🎯 课程主题
将自然语言文本转换为模型可计算的数值表示——从分词到独热向量的完整流程。
📝 核心知识点
1. 文本数值化的必要性
- 概念说明:计算机无法直接识别文字,需要将自然语言转换为数值才能进行计算。
- 关键细节:
- 输入句子(如英文)→ 转换为数值 → Transformer 计算 → 输出数值 → 转换回文字(如中文)
- 模型所有计算都是基于数值的
2. 文本数值化流程
- 概念说明:将原始文本转换为数值的标准步骤。
- 关键细节:
- 收集文本数据:如英译中任务收集大量"英语句子-汉语句子"对
- 英语句1 ↔ 汉语句1,英语句2 ↔ 汉语句2,...,英语句N ↔ 汉语句N
- 分词(Tokenization):将句子切成 token(单独的字或词)
- 例如:"我"、"是"、"一"、"条"、"狗"、"篮球"、"鸡" 各为一个 token
- 统计 token 频次并排序:按出现频率从高到低编号
- 频次最高的 token → 编号 1
- 频次第二的 token → 编号 2
- 以此类推
- 转换为独热向量(One-Hot)
- 收集文本数据:如英译中任务收集大量"英语句子-汉语句子"对
3. 独热向量(One-Hot Encoding)
- 概念说明:将每个 token 表示为只有一个位置为 1、其余为 0 的向量。
- 关键细节:
- 假设词表大小为 $V$,则每个 token 的独热向量维度为 $1 \times V$
- 例如:"我" →
[1,0,0,...,0],"是" →[0,1,0,...,0] - "我是" → 两个向量相加 →
[1,1,0,...,0]
4. 独热向量的问题
- 概念说明:独热向量虽可行但存在严重缺陷。
- 关键细节:
- 语义歧义:编号 1("我")+ 编号 2("是")= 编号 3("一"),但"我"+"是"≠"一",数值运算与语义不符
- 维度巨大:词表大小 $V$ 通常很大(如 10000 甚至 50000)
- 每个词向量维度为 $V$(如 50000 维)
- 输入矩阵大小为 $4 \times 50000$(以 4 个词为例)
- 其中大量为 0,计算浪费严重
- 词表大小 $V$ 在论文中标注为 50K(即 5 万)
🧮 核心公式与推导
独热向量表示:
设词表大小为 $V$,第 $i$ 个 token 的独热向量为:
$$\mathbf{x}_i = [0, 0, \ldots, 1, \ldots, 0] \in \mathbb{R}^{1 \times V}$$
其中第 $i$ 个位置为 1,其余为 0。
物理意义:用高维稀疏向量唯一标识词表中的每个 token,但存在维度灾难与语义无关问题。
🏗️ 模型架构与数据流向
数据维度变化:
- 单个 token:$1 \times V$($V$ 为词表大小,如 50000)
- 句子($L$ 个 token):$L \times V$
💻 代码实战
无(本节为理论讲解,词嵌入代码在后续章节)
⚠️ 常见问题与避坑指南
- 独热向量直接做数值运算会产生语义歧义(如 $1+2=3$ 但"我"+"是"≠"一")
- 词表 $V$ 过大导致输入矩阵维度爆炸,计算量巨大且大部分为 0
- 独热向量无法表达词与词之间的语义关系
💡 个人总结与延伸
独热向量是文本数值化最基础的方法,虽然可行但因维度灾难和缺乏语义信息而不实用。这引出了下一节的词嵌入(Word Embedding)方法,通过将高维稀疏向量压缩为低维稠密向量来解决这些问题。现代大模型中,词嵌入仍是输入处理的第一步,只是演变为更复杂的子词分词(如 BPE、WordPiece)配合嵌入层。