FastText 模型的加载、查看与效果检验
1 课程概览
本课演示 FastText 词向量模型的加载、查看和效果检验。通过 load_model 加载已保存的模型,使用 get_word_vector 获取单个词的词向量表示,使用 get_nearest_neighbors 查找近义词来检验模型效果。
2 核心概念与定义
- 模型加载(Model Loading):使用
fasttext.load_model(path)加载已保存的.bin模型文件。 - 词向量查看(Word Vector Viewing):使用
model.get_word_vector(word)获取单个词的稠密向量表示。 - 近邻单词(Nearest Neighbors):使用
model.get_nearest_neighbors(word)查找与目标词最相似的单词,用于检验词向量模型质量。 - KNN(K-Nearest Neighbors):K 近邻算法,
nearest neighbors即"最近的邻居"。
3 模型与算法详解
三大操作流程
- 加载模型:
fasttext.load_model(model_path)加载预训练的 FastText 模型 - 获取词向量:
model.get_word_vector(word)获取指定单词的词向量 - 效果检验:
model.get_nearest_neighbors(word)查找近义词,主观判断相关性
词向量属性
| 属性 | 说明 |
|---|---|
| 类型 | numpy.ndarray(NumPy 数组) |
| 形状 | (100,)(默认 dim=100) |
| 含义 | 用 100 个数字表示一个词 |
效果检验原理
- 给定一个单词,查找其近义词
- 主观判断近义词与目标词的相关性
- 找得越准,模型效果越好
中文词的处理
- 训练数据为纯英文,但输入中文词也能生成词向量
- FastText 会做适配,但中文近义词查找可能不准确
4 数学原理与推导
词向量维度
默认维度 $d=100$,每个词 $w$ 的词向量为:
$$\text{WordVector}(w) \in \mathbb{R}^{100}$$
近邻搜索
通过余弦相似度查找最近邻:
$$\text{similarity}(w_1, w_2) = \cos(\theta) = \frac{\vec{v}(w_1) \cdot \vec{v}(w_2)}{|\vec{v}(w_1)| \cdot |\vec{v}(w_2)|}$$
5 代码示例
import fasttext
# 函数2:加载模型并获取词向量
def dm02_get_word_vector():
# 1. 加载预训练的 FastText 模型
model = fasttext.load_model("./model/wiki02_7A_fail9.bin")
# 2. 获取单个词的词向量表示
result = model.get_word_vector("the")
# 3. 打印结果
print("类型:", type(result)) # <class 'numpy.ndarray'>
print("形状:", result.shape) # (100,)
print("词向量:", result) # 100个数字
# 函数3:查看单词相似度(模型效果检验)
def dm03_get_similarity():
# 1. 加载模型
model = fasttext.load_model("./model/wiki02_7A_fail9.bin")
# 2. 查找近邻单词(近义词)
neighbors = model.get_nearest_neighbors("the")
# 3. 打印结果
for word, similarity in neighbors:
print(f"单词: {word}, 相似度: {similarity}")
# 测试
if __name__ == "__main__":
dm02_get_word_vector()
dm03_get_similarity()
6 重难点与易错提醒
- ❗重点:三大操作——加载(
load_model)、查看(get_word_vector)、检验(get_nearest_neighbors)。 - ⚠️易错:
get_word_vector返回的是 numpy.ndarray,形状为 (100,),不是列表。 - ⚠️易错:查询的词应在训练语料中存在,否则效果可能不准确。
- 💡深入理解:默认训练模式是 Skip-Gram,词向量维度为 100。
- 💡深入理解:效果检验通过主观判断近义词相关性来评估模型质量。
7 课堂问答精选
Q1:如何加载已保存的 FastText 模型?
A:使用 fasttext.load_model(model_path) 加载 .bin 二进制文件。例如 model = fasttext.load_model("./model/wiki02_7A.bin")。
Q2:get_word_vector 返回的结果是什么类型?
A:返回 numpy.ndarray(NumPy 数组),形状为 (100,),即 100 个数字表示一个词。
Q3:如何检验词向量模型的效果?
A:使用 model.get_nearest_neighbors(word) 查找近义词,主观判断这些近义词与目标词的相关性。找得越准,模型效果越好。
Q4:训练数据是英文,输入中文词会怎样?
A:FastText 会做适配,生成中文词的词向量,但近义词查找可能不准确,因为训练语料中没有中文。
8 本课小结
- 加载模型:
fasttext.load_model(path)加载.bin文件。 - 获取词向量:
model.get_word_vector(word)返回 numpy.ndarray,形状 (100,)。 - 效果检验:
model.get_nearest_neighbors(word)查找近义词,主观判断相关性。 - 词向量类型:numpy.ndarray,默认维度 100。
9 延伸思考
- 如何调整模型参数以提升近义词查找的准确性?
- 除了近义词查找,还有哪些方法可以检验词向量模型的效果?