fastText 库简介
fastText 是由 Facebook AI 研究院(FAIR)开发的 高效文本处理库,用于 词向量训练、文本分类、相似度计算,适用于 自然语言处理(NLP) 任务。
fastText 结合了 n-gram、子词信息,可以 快速训练大规模文本数据,尤其适用于 低资源语言。
1. fastText 的主要功能
- 无监督学习(词向量训练):训练 Word Embeddings,支持 Skip-gram 和 CBOW 模型。
- 有监督学习(文本分类):用于 情感分析、新闻分类、垃圾邮件检测 等任务。
- 支持 OOV(未登录词):基于 子词(subword n-grams) 处理低频词,提高泛化能力。
- 计算相似词:可以找到语义相似的词,例如
"king"
和"queen"
。 - 速度快:比 Word2Vec、GloVe 训练更快,适用于 大规模数据集。
2. 安装 fastText
2.1 通过 pip 安装
pip install fasttext
注意:官方 fastText
需要 C++ 编译,有时安装 fasttext
可能失败,可以使用以下方法:
pip install fasttext-wheel
2.2 从源码安装
如果 pip
安装失败,可以从 GitHub 编译:
git clone https://github.com/facebookresearch/fastText.git
cd fastText
pip install .
3. 训练词向量
3.1 训练 fastText 词向量
fastText 可以训练 Word Embeddings(类似 Word2Vec)。
import fasttext
# 训练 skip-gram 词向量
model = fasttext.train_unsupervised("data.txt", model="skipgram")
# 保存模型
model.save_model("fasttext_model.bin")
参数
"data.txt"
:文本语料,每行一句话。model="skipgram"
:使用 Skip-gram 训练模型(也可以使用"cbow"
)。save_model()
:保存模型为.bin
文件。
3.2 使用训练好的词向量
# 加载模型
model = fasttext.load_model("fasttext_model.bin")
# 获取单词的词向量
vector = model.get_word_vector("python")
print(vector[:10]) # 只打印前 10 维
# 查找相似词
print(model.get_nearest_neighbors("king"))
输出示例
[(0.89, 'queen'), (0.85, 'prince'), (0.81, 'monarch')]
fastText 可以查找语义相近的词,适用于 信息检索、推荐系统。
4. 训练文本分类模型
4.1 准备数据
fastText 需要 每行数据前加 __label__
作为标签。
__label__positive This movie is amazing and full of life.
__label__negative I didn't like the movie at all.
__label__positive A fantastic film with great acting.
__label__negative The worst movie I have ever seen.
4.2 训练文本分类模型
import fasttext
# 训练分类模型
model = fasttext.train_supervised("train.txt", epoch=25, lr=0.5)
# 保存模型
model.save_model("text_classification.bin")
参数
train_supervised()
:用于 监督学习(文本分类)。epoch=25
:训练 25 轮。lr=0.5
:学习率。
4.3 使用文本分类模型
# 加载模型
model = fasttext.load_model("text_classification.bin")
# 进行文本分类
print(model.predict("I love this movie!")) # 输出类别
输出
('__label__positive',)
fastText 适用于新闻分类、情感分析、垃圾邮件检测等任务。
5. 预训练 fastText 词向量
Facebook 提供了 预训练的 fastText 词向量,可以直接下载并使用:
wget https://dl.fbaipublicfiles.com/fasttext/vectors-crawl/cc.en.300.bin.gz
gunzip cc.en.300.bin.gz
加载预训练模型:
import fasttext
model = fasttext.load_model("cc.en.300.bin")
print(model.get_nearest_neighbors("computer"))
fastText 预训练模型支持 157 种语言,可用于 NLP 任务。
6. fastText vs. Word2Vec vs. BERT
模型 | 适用任务 | 速度 | 是否支持 OOV | 语义信息 |
---|---|---|---|---|
Word2Vec | 词向量训练 | 快 | ❌ | 仅基于词 |
fastText | 词向量、文本分类 | 更快 | ✅(支持子词) | 考虑子词信息 |
BERT | 句向量、NLP 任务 | 较慢 | ✅ | 基于 Transformer,语义更强 |
fastText 比 Word2Vec 更强大(支持 OOV),但不如 BERT 处理句子关系。
7. 总结
- fastText 支持词向量训练和文本分类,适用于 大规模 NLP 任务。
- 比 Word2Vec 更快,支持 子词(subword n-grams),可处理未登录词(OOV)。
- 适用于 文本分类、语义搜索、情感分析、低资源语言建模。
- 提供 预训练模型(支持 157 种语言),可直接用于 NLP 任务。