【fastText】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 + 子词分片
的组合,同时保持超快的速度和小巧的文件体积。

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

### 如何使用 FastText 训练词向量 FastText 是一种由 Facebook 开源的工具,用于高效地训练词向量以及执行其他自然语言处理任务。它支持多种模式下的词嵌入学习,并能够很好地捕捉词语之间的语义关系。 以下是关于如何使用 FastText 训练词向量的相关说明: #### 1. 安装 FastText 为了使用 FastText 进行词向量训练,首先需要安装该库。可以通过 pip 命令完成安装: ```bash pip install fasttext ``` #### 2. 数据准备 FastText 的输入数据通常是纯文本文件,每行为一句或多句分隔开的文字内容。假设有一个名为 `corpus.txt` 的文件作为训练集,则其格式如下所示: ``` This is the first sentence. Here comes another one with more words and context. And yet, this line continues to add variety into our dataset for training purposes. ... ``` #### 3. Python 示例代码 下面是一个简单的例子展示如何利用 FastText 来生成词向量模型并保存结果到本地磁盘中去。 ```python import fasttext # 设置超参数 dim = 100 # 向量维度大小 ws = 5 # 上下文窗口长度 epoch = 5 # 整个语料迭代次数 min_count = 1 # 被忽略单词的最小频率,默认值为1意味着不会丢弃任何单词 # 加载预处理后的文本数据路径 input_file_path = 'corpus.txt' output_model_name = 'word_vectors' # 创建模型 (skipgram 或 cbow) model = fasttext.train_unsupervised( input=input_file_path, model='skipgram', # 可选 "cbow" dim=dim, ws=ws, epoch=epoch, minCount=min_count) # 将训练好的模型存储下来以便后续加载使用 model.save_model(f"{output_model_name}.bin") print("Model has been successfully saved.") ``` 上述脚本实现了以下几个功能: - **指定输入文件**:指定了包含训练样本的 `.txt` 文件位置; - **调整超参**:设置了诸如 embedding 维度 (`dim`)、滑动窗口宽度(`ws`) 和最大轮次(`epoch`) 等重要参数; - **选择算法类型**:可以选择基于 skip-gram 方法或者连续袋模型(CBOW),这里选择了前者[^2]; - **持久化输出**:最后一步会把构建完毕的 word embeddings 存储成二进制形式供以后调用[^3]; #### 4. 关键参数解释 | 参数名 | 描述 | |--------------|----------------------------------------------------------------------------------------| | `input` | 输入文件路径 | | `model` | 指定使用的模型架构 ('skipgram' or 'cbow') | | `lr` | 初始学习率 | | `dim` | 输出向量的空间尺寸 | | `ws` | 单侧的最大上下文范围 | | `epoch` | 对整个训练集合重复遍历的总次数 | | `minCount` | 如果某个字典项在整个文档集中出现少于这个数值则会被移除 | #### 注意事项 当实际操作过程中遇到内存不足等问题时可以尝试减少 batch size 或者降低 vector dimensionality 。另外值得注意的是,在某些特定场景下可能还需要额外的数据清洗工作比如去除停用词等等[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值