Fasttext - 简介及环境搭建
1 课程概览
本课介绍 Fasttext 工具。Fasttext 是 Facebook(现 Meta)开发的开源 NLP 工具包,用于文本分类和词向量训练。优势:快速训练和预测,1 行 API 搞定。架构:三层(输入层、隐藏层、输出层)。使用层次 softmax(底层是哈夫曼树)和负采样技术。本课重点讲文本分类,词向量迁移部分之前已讲过。
2 核心概念与定义
- Fasttext:Facebook 开发的 NLP 开源包,快速文本处理。
- 层次 softmax(Hierarchical Softmax):使用哈夫曼树,计算超多类别分类时提高效率。
- 哈夫曼树(Huffman Tree):也叫赫夫曼树,带权路径长度最小的二叉树。
- 负采样(Negative Sampling):抽取一部分样本进行训练,降低计算量。
3 模型与算法详解
Fasttext 优势
在保持较高精度的情况下,能够快速训练和预测。
| 优势 | 说明 |
|---|---|
| 三层架构 | 输入层、隐藏层、输出层 |
| 层次 softmax | 使用哈夫曼树,提高超多类别分类效率 |
| 负采样 | 抽取一部分样本训练,降低计算量 |
Fasttext 与 Word2Vec 的关系
| 对比项 | Fasttext | Word2Vec (CBOW) |
|---|---|---|
| 架构 | 三层 | 三层 |
| 预测目标 | 预测标签 | 预测中间词 |
| 相似点 | 类似 CBOW | 基于两端预测中间 |
三层架构
输入层 → 隐藏层 → 输出层
- 输入层:拆成 n-gram,进行求和加权平均,得到特征向量
- 隐藏层:特征向量
- 输出层:基于特征向量预测标签
层次 softmax
计算超多类别分类时,不再使用传统 softmax,使用哈夫曼树。
- 传统 softmax:每个类别都计算,运算量大
- 层次 softmax:分层次计算,快速出结果
- 类比:折半查找(猜数字游戏)
负采样
抽取一部分样本进行训练,降低计算量。
- 类比:复习错题本,而不是每本书都翻一遍
- 一次训练完,仅更新一小部分权重
- 降低梯度下降的计算量
4 数学原理与推导
传统 softmax
$$P(y_i) = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}}$$
其中 $K$ 是类别数,需要计算 $K$ 次。
层次 softmax
使用哈夫曼树,计算复杂度从 $O(K)$ 降到 $O(\log K)$。
$$P(y) = \prod_{i=1}^{d} P(n_i)$$
其中 $d$ 是树的深度,$n_i$ 是路径上的节点。
哈夫曼树带权路径长度(WPL)
$$\text{WPL} = \sum_{i=1}^{n} w_i \times l_i$$
其中 $w_i$ 是叶子节点的权值,$l_i$ 是叶子节点所在的层数。
5 代码示例
# Fasttext 安装(已在之前讲 Word2Vec 时安装过)
# pip install fasttext
import fasttext
# Fasttext 文本分类 API(1 行搞定)
model = fasttext.train_supervised(
input="data/cooking_train.txt", # 训练数据路径
epoch=25, # 训练轮数
lr=1.0, # 学习率
wordNgrams=2 # n-gram 特征
)
# 预测
result = model.predict("Which baking dish is best to bake a banana bread ?")
print(result)
# 评估
metrics = model.test("data/cooking_valid.txt")
print(f"Precision@1: {metrics[1]}")
print(f"Recall@1: {metrics[2]}")
代码说明
| 代码 | 说明 |
|---|---|
fasttext.train_supervised() | 训练文本分类模型(1 行 API) |
input | 训练数据路径 |
epoch | 训练轮数 |
lr | 学习率 |
wordNgrams | n-gram 特征 |
model.predict() | 预测 |
model.test() | 评估 |
6 重难点与易错提醒
- ❗重点:Fasttext 优势:快速训练和预测。
- ❗重点:层次 softmax 使用哈夫曼树,提高超多类别分类效率。
- ❗重点:负采样降低计算量。
- ⚠️易错:Fasttext 预测标签,CBOW 预测中间词。
- 💡深入理解:层次 softmax 类比折半查找。
7 课堂问答精选
Q1:Fasttext 的优势是什么?
A:在保持较高精度的情况下,能够快速训练和预测。原因:①三层架构;②层次 softmax;③负采样。
Q2:层次 softmax 的作用是什么?
A:计算超多类别分类时,不再使用传统 softmax,使用哈夫曼树,提高效率。类比折半查找,不用每个类别都计算。
Q3:负采样是什么?
A:抽取一部分样本进行训练,降低计算量。类比复习错题本,而不是每本书都翻一遍。一次训练完,仅更新一小部分权重。
Q4:Fasttext 和 Word2Vec 的 CBOW 有什么区别?
A:Fasttext 预测标签,CBOW 预测中间词。架构类似,都是三层。
8 本课小结
- Fasttext:Facebook 开发的 NLP 开源包,快速文本处理。
- 优势:三层架构、层次 softmax、负采样。
- 层次 softmax:使用哈夫曼树,提高超多类别分类效率。
- 负采样:抽取一部分样本训练,降低计算量。
- 1 行 API 搞定文本分类。
9 延伸思考
- 哈夫曼树是如何构建的?
- 负采样如何选择负样本?