词向量--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 通过引入子词建模,增强了词向量对真实语言现象的适应能力。

浙公网安备 33010602011771号