fastText 训练词向量

fastText 是 Facebook AI Research 提出的高效文本向量化工具,既能做文本分类,也能高效训练词向量。这里重点讲它的词向量(word embedding)部分,从原理到实操,一步步带大家掌握。

一、fastText 词向量的原理

fastText 的核心理念:
在 Word2Vec 的基础上,把一个词拆分成多个子词(subword),再对这些子词进行向量建模。

举例:
“playing” 这个词,会被拆成

  • pla

  • play

  • lay

  • ing
    等 3~6 个字符的子片段。

这样“playing”的向量就等于这些子词向量的加和或平均。
因此即使出现一个未登录词,比如“playzzz”,fastText 也能用其子词的向量来进行大致推断,具备更好的泛化能力。

二、训练模式

fastText 同样提供 Word2Vec 风格的两种训练模式:

  • Skipgram:给定中心词预测上下文

  • CBOW:给定上下文预测中心词

Skipgram 能学到更细粒度的向量,适合小语料;CBOW 训练速度快,适合大规模语料。

三、训练前的语料准备

训练词向量时只需要纯文本文件,每一行就是一句话,例如:

I love machine learning
fastText is a powerful tool
deep learning is amazing

无需标签,也不要求特殊格式,越大规模越好。

四、安装 fastText

Python 下可直接安装:

pip install fasttext

五、训练词向量

下面是一个最小可运行的示例,基于 skipgram:

import fasttext

model = fasttext.train_unsupervised(
    input="corpus.txt",
    model="skipgram",
    dim=100,      # 维度
    minn=3,       # 子词最短
    maxn=6,       # 子词最长
    epoch=5       # 迭代次数
)

# 查看向量
print(model.get_word_vector("learning"))

# 保存
model.save_model("fasttext_skipgram.bin")

如果需要 CBOW,只需 model="cbow"

六、词向量使用

训练好之后,使用非常简单:

vector = model.get_word_vector("computer")

也可以遍历词表:

for word in model.words:
    print(word, model.get_word_vector(word))

七、模型文件

fastText 训练后会保存一个 .bin 文件,包括:

  • 词表

  • 子词信息

  • 词向量

可直接用 fasttext.load_model("xxx.bin") 加载。

八、fastText 词向量的优势

  1. 对未登录词友好
    因为子词分片机制,即使没见过的新词也能组合其表示。

  2. 训练速度快
    内部实现高度并行,适合超大语料

  3. 模型体积小
    一般几十 MB,就可覆盖大规模词表

  4. 易于迁移
    能快速被下游模型(如分类器、聚类器)调用

九、工业落地案例

fastText 词向量在实际中广泛用于:

  • 商品标题向量化

  • 评论语义搜索

  • 知识问答召回

  • 新闻分类预训练

  • 多语言迁移学习

特别适合大规模、对响应速度要求高的工业系统。

十、进阶技巧

  1. 子词 n-gram 范围 (minn, maxn)
    一般 3~6 比较合理

  2. 维度 (dim)
    100~300 是常见选择

  3. 负采样 (neg)
    控制负样本数量

  4. 层次 softmax (loss='hs')
    如果语料大,可以极大加速

  5. 迭代次数 (epoch)
    语料小可多跑几轮

十一、总结

fastText 可以看作是
Word2Vec + 子词分片
的组合,同时保持超快的速度和小巧的文件体积。

它是一个非常务实、工程化的词向量方案,尤其在海量文本和多语言环境下表现优秀。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

00&00

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值