You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Gensim fastText模型无法在新语料上继续训练?

Gensim续训fastText模型未新增词汇问题的解决方法

问题根源

有两个关键环节被遗漏:

1. 文本预处理未清理标点

原语料中的"Wagagamagga,"带有逗号,直接split后得到的是"Wagagamagga,"而非"Wagagamagga",你检查的是不带逗号的单词,自然找不到匹配项。

2. 续训时未指定新词汇的最小出现次数

Gensim的fastText在更新词汇表(update=True)时,新词汇的min_count默认继承原模型的设置。如果原模型的min_count大于1(比如很多预训练模型默认值为5),仅出现1次的"Wagagamagga"会被过滤,无法加入词汇表。

修正后的代码

步骤1:正确预处理语料(清理标点)

import re
from gensim.models.fasttext import load_facebook_model
from gensim.test.utils import datapath

# 创建并预处理语料:去除标点后分词
corpus = [
    "The brown dog jumps over the kangaroo",
    "I want to ride my bicycle to Mount Everest",
    "What a lovely day it is",
    "When I Wagagamagga, everybody stops to listen"
]
# 移除所有非字母数字、非空格的字符
corpus = [re.sub(r'[^\w\s]', '', sentence).split() for sentence in corpus]

步骤2:加载模型并续训(指定min_count=1)

# 加载预训练模型
model = load_facebook_model(datapath("crime-and-punishment.bin"))

# 更新词汇表时指定min_count=1,确保单次出现的新词被保留
model.build_vocab(corpus, update=True, min_count=1)
# 执行续训
model.train(corpus, total_examples=len(corpus), epochs=model.epochs)

验证结果

此时执行'Wagagamagga' in model.wv.key_to_index会返回True。

补充说明

  • 如果你的语料中有更多复杂的标点或特殊字符,建议使用更专业的分词工具(如nltk的WordPunctTokenizer)进行预处理,确保词汇的准确性。
  • 续训时的epochs参数可以根据需求调整,原模型的epochs可能较小,适当增加可以让新词的嵌入更稳定。

内容的提问来源于stack exchange,提问作者Data

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 11:45:38