词向量--FastText

FastText

一、为什么要引入 FastText

在使用 Word2Vec 的过程中,我逐渐遇到一个实际问题:
如果一个词在训练语料中从未出现过,模型将无法为它生成向量。

这种情况在真实文本中非常常见,例如:

  • 新词
  • 拼写变化
  • 组合词
  • 专有名词

FastText 正是为了解决这一问题而提出的。


二、FastText 的核心思想

FastText 的一个关键改进是:

不再只把词作为最小单位,而是引入子词(n-gram)进行建模。

一个词会被拆分成多个字符级的子词片段,每个子词都会学习对应的向量,最终词向量由这些子词向量组合而成。

这样带来的好处是:

  • 即使词本身没见过
  • 只要子词见过
  • 就可以生成合理的词向量

三、FastText 与 Word2Vec 的区别

两者的主要差异可以概括为:

  • Word2Vec:以“词”为最小单位
  • FastText:以“子词”为最小单位

因此,FastText 在处理:

  • 未登录词
  • 拼写相似词
  • 中文复合词

时,往往表现得更加稳定。


四、使用 Python 训练 FastText 词向量

在实践中,我使用 gensim 提供的 FastText 接口进行实验。

1. 示例语料

sentences = [
    ["我", "喜欢", "自然语言处理"],
    ["自然语言处理", "是", "人工智能", "方向"],
    ["我", "正在", "学习", "NLP"]
]

2. 训练 FastText 模型

from gensim.models import FastText

model = FastText(
    sentences=sentences,
    vector_size=50,
    window=3,
    min_count=1
)

3. 测试未登录词

vector = model.wv["自然语言"]
print("词向量维度:", vector.shape)

similar_words = model.wv.most_similar("自然语言处理")
print("相似词:", similar_words)

即使某些词在训练语料中出现频率较低,FastText 仍然可以生成向量。


五、FastText 的优势与适用场景

通过实践,我对 FastText 的优势有了更直观的理解:

  • 对低频词和新词更友好
  • 对拼写变化更鲁棒
  • 在小数据集上也能有较好表现

因此,FastText 非常适合:

  • 实际工程场景
  • 语料规模有限的任务
  • 中文文本处理

六、FastText 的局限性

FastText 虽然改进了 Word2Vec,但仍然存在局限:

  • 仍然是静态词向量
  • 无法处理词在不同上下文中的多义性
  • 表达能力受限于模型结构

这也是后续上下文相关词向量和预训练模型出现的原因之一。


七、小结

FastText 通过引入子词建模,增强了词向量对真实语言现象的适应能力。

posted @ 2025-11-11 15:03  元始天尊123  阅读(5)  评论(0)    收藏  举报