FastText 模型参数设定
1 课程概览
本课讲解 FastText 训练时的超参数设定,包括模型类型(CBOW/Skip-Gram)、词向量维度(dim)、训练轮数(epoch)、学习率(lr)、线程数(thread)等。通过手动调整参数,可以优化词向量训练效果。
2 核心概念与定义
- 超参数(Hyperparameters):训练前手动设定的参数,如 model、dim、epoch、lr、thread。
- CBOW 模式:基于两端预测中间的词向量训练模式。
- Skip-Gram 模式:基于中间预测两端的词向量训练模式(FastText 默认)。
3 模型与算法详解
默认参数 vs 手动参数
| 参数 | 默认值 | 手动设定示例 | 说明 |
|---|---|---|---|
| input | - | "./data/wiki02_7A" | 训练数据路径 |
| model | skipgram | cbow | 模型类型 |
| dim | 100 | 50 | 词向量维度 |
| epoch | 5 | 1 | 训练轮数 |
| lr | 0.05 | 0.01 | 学习率 |
| thread | CPU核数-1 | 10 | 线程数 |
常用超参数详解
- input:训练数据路径
- model:模型类型(
skipgram或cbow) - dim:词向量维度,每个词用多少数字表示
- epoch:训练轮数,数据遍历次数
- lr:学习率,控制参数更新步长
- thread:线程数,并行训练加速
线程数说明
- 默认值:
multiprocessing.cpu_count() - 1(CPU 核数 - 1) - 示例:16 核 16 线程 CPU → 默认 15 个线程
- 手动设定:10 已经足够多
训练流程回顾
- 获取序列数据(file9 数据集)
- 词向量的训练、保存、加载和查看
- 方式一:直接用默认参数训练
- 方式二:手动调整超参数训练
- 模型效果的检验(找近义词)
- 模型超参的设定
4 数学原理与推导
CBOW vs Skip-Gram 训练目标
CBOW(基于两端预测中间):
$$\max_\theta \frac{1}{T} \sum_{t=1}^{T} \log p(w_t | w_{t-c}, ..., w_{t-1}, w_{t+1}, ..., w_{t+c}; \theta)$$
Skip-Gram(基于中间预测两端):
$$\max_\theta \frac{1}{T} \sum_{t=1}^{T} \sum_{-c \leq j \leq c, j \neq 0} \log p(w_{t+j} | w_t; \theta)$$
词向量维度
$$\text{WordVector}(w_i) \in \mathbb{R}^{d}$$
其中 $d$ 为 dim 参数,默认 100,可手动调整为 50、500 等。
5 代码示例
import fasttext
# 函数4:超参数设定
def dm04_set_hyperparameters():
# 1. 直接开始训练(默认参数,注释掉)
# my_model = fasttext.train_unsupervised(input="./data/wiki02_7A")
# 2. 手动调整超参数
my_model = fasttext.train_unsupervised(
input="./data/wiki02_7A", # 训练数据路径
model="cbow", # 模型类型:CBOW(默认 skipgram)
dim=50, # 词向量维度:50(默认 100)
epoch=1, # 训练轮数:1(默认 5)
lr=0.01, # 学习率:0.01(默认 0.05)
thread=10 # 线程数:10(默认 CPU核数-1)
)
# 3. 保存模型为二进制文件
my_model.save_model("./model/wiki02_7A_new.bin")
print("训练完毕,模型保存成功!")
# 测试
if __name__ == "__main__":
dm04_set_hyperparameters()
6 重难点与易错提醒
- ❗重点:常用超参数有 6 个——input、model、dim、epoch、lr、thread。
- ⚠️易错:epoch 不宜过大(如 1000),否则训练时间过长。
- ⚠️易错:dim 过大会增加计算量,过小可能丢失语义信息。
- 💡深入理解:thread 默认为 CPU 核数 - 1,手动设为 10 已足够。
- 💡深入理解:手动参数与默认参数训练流程一致,只是参数不同。
7 课堂问答精选
Q1:FastText 默认使用哪种训练模式?如何切换为 CBOW?
A:默认使用 Skip-Gram(model="skipgram")。切换为 CBOW 只需设置 model="cbow"。
Q2:常用超参数有哪些?
A:6 个常用参数:①input(数据路径);②model(模型类型);③dim(词向量维度,默认 100);④epoch(训练轮数,默认 5);⑤lr(学习率,默认 0.05);⑥thread(线程数,默认 CPU 核数 - 1)。
Q3:为什么 epoch 不宜设为 1000?
A:训练时间与 epoch 成正比,epoch=5 时 100MB 数据约 2 分钟,epoch=1000 会导致训练时间过长,影响效率。
Q4:thread 默认值如何确定?
A:默认为 multiprocessing.cpu_count() - 1,即 CPU 核数减 1。例如 16 核 16 线程 CPU 默认为 15 个线程。
8 本课小结
- 超参数设定:通过
train_unsupervised的参数手动调整。 - 6 个常用参数:input、model、dim、epoch、lr、thread。
- model:可选
skipgram(默认)或cbow。 - dim:词向量维度,默认 100。
- thread:默认 CPU 核数 - 1。
- 训练流程四步:获取数据 → 训练/保存 → 效果检验 → 超参设定。
9 延伸思考
- 如何选择最优的超参数组合?
- CBOW 和 Skip-Gram 在不同数据规模下的表现差异?