文本张量表示法 - one-hot 编码介绍
1 课程概览
本课介绍文本张量表示方法,讲解三种主要方案:one-hot 编码(稀疏表示)、Word2Vec(稠密表示)、Word Embedding(稠密表示)。重点讲解文本张量的定义、词向量矩阵的概念,以及 one-hot 编码的基本原理。
2 核心概念与定义
- 文本张量表示(Text Tensor Representation):将一段文本使用张量进行表示的过程,即将文本转换为数值形式供模型处理。
- 词向量(Word Vector):将一个词表示成向量的形式,如用 5 个数字表示一个词,则为一维向量。
- 词向量矩阵(Word Vector Matrix):一句话中多个词的词向量组合,如 3 个词每个用 5 个数字表示,则构成 3 行 5 列的矩阵。
- one-hot 编码(One-Hot Encoding):又称独热编码、零一编码,稀疏词向量表示法。有该词为 1,无该词为 0。
- Word2Vec:稠密词向量表示法,包含 CBOW(连续词袋)和 Skip-Gram(跳字)两种模式。
- Word Embedding:词嵌入表示法,稠密词向量表示法,通过 FastText 等工具实现。
3 模型与算法详解
三种文本张量表示方法对比
| 方法 | 类型 | 特点 | 工具 |
|---|---|---|---|
| one-hot 编码 | 稀疏表示 | 有词为 1,无词为 0;数据离散 | 手动实现 |
| Word2Vec | 稠密表示 | CBOW + Skip-Gram 两种模式 | — |
| Word Embedding | 稠密表示 | 词嵌入,RNN 的词嵌入层即此 | FastText |
词向量矩阵示例
假设一个词用 4 个数字表示:
词1: [0.1, 0.2, 0.3, 0.4] → 1 维向量
词2: [0.5, 0.6, 0.7, 0.8]
词3: [0.9, 1.0, 1.1, 1.2]
词4: [1.3, 1.4, 1.5, 1.6]
4 个词 → 4 行 4 列的词向量矩阵: $$ \begin{bmatrix} 0.1 & 0.2 & 0.3 & 0.4 \ 0.5 & 0.6 & 0.7 & 0.8 \ 0.9 & 1.0 & 1.1 & 1.2 \ 1.3 & 1.4 & 1.5 & 1.6 \end{bmatrix} $$
one-hot 编码原理
- 对文本进行切词
- 去重后得到词汇表
- 每个词用长度等于词汇表总数的列表表示
- 该词对应位置为 1,其余为 0
示例:词汇表 = ["我", "爱", "学习", "AI"]
| 词 | one-hot 编码 |
|---|---|
| 我 | [1, 0, 0, 0] |
| 爱 | [0, 1, 0, 0] |
| 学习 | [0, 0, 1, 0] |
| AI | [0, 0, 0, 1] |
Word2Vec 两种模式
| 模式 | 全称 | 原理 |
|---|---|---|
| CBOW | 连续词袋(Continuous Bag-of-Words) | 基于两边预测中间 |
| Skip-Gram | 跳字/跳词(Skip-Gram) | 基于中间预测两端 |
底层本质:矩阵相乘(矩阵转换);从神经元角度:输入层 → 隐藏层 → 输出层。
4 数学原理与推导
one-hot 编码数学表示
给定词汇表 $V = {w_1, w_2, ..., w_n}$,词汇 $w_i$ 的 one-hot 编码为:
$$\text{one-hot}(w_i) = [0, 0, ..., 1, ..., 0, 0]$$
其中第 $i$ 位为 1,其余为 0,向量长度为 $n$(词汇表去重后的总数)。
词向量矩阵
若每个词用 $d$ 维向量表示,$m$ 个词构成 $m \times d$ 的矩阵:
$$M = \begin{bmatrix} v_{11} & v_{12} & \cdots & v_{1d} \ v_{21} & v_{22} & \cdots & v_{2d} \ \vdots & \vdots & \ddots & \vdots \ v_{m1} & v_{m2} & \cdots & v_{md} \end{bmatrix}$$
5 代码示例
本课为概念介绍,具体代码实现将在后续课程中演示(复杂版约 20 行,简单版约 10 行)。
6 重难点与易错提醒
- ❗重点:大模型底层只认识数字,不认识文本,因此必须将文本转换为张量形式。
- ⚠️易错:one-hot 编码的列表长度等于文本切词去重后的总数,不是切词前的总数。
- ⚠️易错:one-hot 编码中每个词的列表只有一个 1,其余全为 0,不会出现两个 1。
- 💡深入理解:one-hot 是稀疏表示(大量 0 和一个 1),因此才有后续 Word2Vec 和 Word Embedding 等稠密表示法的改进。
- ❗重点:Word2Vec 的 CBOW 是"基于两边预测中间",Skip-Gram 是"基于中间预测两端"。
7 课堂问答精选
Q1:为什么需要文本张量表示?
A:大模型无法直接处理文本,底层只认识数字。因此需要将文本转换为数值形式(张量/词向量),作为模型输入进行各种处理。
Q2:什么是词向量矩阵?
A:一句话切词后有多个词,每个词用向量表示,组合起来就是词向量矩阵。例如 3 个词每个用 5 个数字表示,构成 3 行 5 列的矩阵。
Q3:one-hot 编码的列表长度由什么决定?
A:由文本切词去重后的词汇总数决定。例如 13 条评论切词去重后剩 37 个词,则每个词的 one-hot 编码长度为 37。
Q4:Word2Vec 的 CBOW 和 Skip-Gram 有什么区别?
A:CBOW(连续词袋)是基于两边词预测中间词,Skip-Gram(跳字)是基于中间词预测两端词。底层本质是矩阵相乘,从神经元角度是输入层→隐藏层→输出层。
8 本课小结
- 文本张量表示:将文本转为数值形式供模型处理。
- 三种方法:one-hot(稀疏)、Word2Vec(稠密,含 CBOW 和 Skip-Gram)、Word Embedding(稠密)。
- 词向量矩阵:多个词向量组合成的矩阵。
- one-hot 编码:列表长度 = 去重后词汇总数,只有一个 1 其余为 0。
- Word2Vec:CBOW 预测中间,Skip-Gram 预测两端。
9 延伸思考
- one-hot 编码有什么缺点?为什么需要稠密表示法?
- Word2Vec 和 Word Embedding 的本质区别是什么?