1.fastText 文本分类的核心原理

fastText 的文本分类,其实就是在词向量模型上,接入一个线性分类器,并用标签监督来一起训练。
它会:

  • 先把输入句子平均池化成一个向量(对句子里的词向量做平均)
  • 然后直接用一个线性层分类
  • 同时词向量会和分类器一并更新

相比深度模型,fastText 这种结构极其简单,却能在大规模语料上取得很高的准确率。

2.fastText 文本分类的数据格式

最关键的就是标注格式,fastText 约定:

  • 每一行是一条样本
  • 每条样本的标签放在句子前
  • 标签必须以 label 开头
    比如:
__label__sports   Messi scored the winning goal
__label__finance  The stock market fell sharply
__label__sports   Ronaldo scored a hat-trick
__label__finance  Interest rates rise

如果你要做垃圾邮件检测,也可以:

__label__spam  Win a million dollars now
__label__ham   Hello, how are you today

这个格式非常简洁,是 fastText 的核心。

3. 安装 fastText

python 版本

pip install fasttext

4. 训练 fastText 分类模型

只需要一行:

import fasttext
 
model = fasttext.train_supervised(
    input="train.txt",   # 上面说的格式
    lr=0.5,              # 学习率
    epoch=25,            # 训练轮次
    wordNgrams=2,        # 使用2-gram
    verbose=2
)
 
# 保存
model.save_model("classifier.bin")

就完成了分类模型的训练。

5. 使用 fastText 分类预测

比如,你想测试一条新文本:

label, prob = model.predict("Messi wins another Ballon d'Or", k=1)
print(label, prob)

输出可能是:

['__label__sports'] [0.93]

也就是预测为 “体育” 类别,置信度 93%。

如果你想一次预测多个候选类别:

model.predict("Messi wins another Ballon d'Or", k=3)

6. fastText 分类优势

训练速度极快
模型文件小(只有几 MB)
在新闻、评论、邮件等短文本分类里非常实用
支持多语言(可训练自己的语料)

7. fastText 分类的一个可执行 demo

下面给你一个从零到预测的最小可运行示例:

import fasttext
 
# step 1: 假设已经有 train.txt
# 格式:
# __label__positive   I love this movie
# __label__negative   I hate this film
 
# step 2: 训练
model = fasttext.train_supervised("train.txt")
 
# step 3: 预测
print(model.predict("What a wonderful movie!"))

8. 进阶技巧

  • wordNgrams=2 可以显著提升句子级别的分类准确度
  • epoch 越大,模型会学得更好,但训练也更慢
  • loss=‘hs’ 可以使用层次 softmax,数据量大时加速
  • pretrainedVectors 可加载预训练的词向量,初始化更快收敛

9. fastText 在工业场景的用法

fastText 在很多企业中依然被使用,比如:

  • 评论情感分析
  • 新闻话题归类
  • 知识问答的快速路由
  • 电商商品类别预测

因为它对低延迟、训练效率要求极高的场景特别友好。

10. 总结

fastText 的文本分类 = 词向量 + 简单线性分类器 + 超快的学习方式

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐