【问题标题】:Why isn't my Gensim fastText model continuing to train on a new corpus?为什么我的 Gensim fastText 模型没有继续在新的语料库上训练?
【发布时间】:2022-11-04 01:33:52
【问题描述】:

我正在尝试使用我自己的文本语料库继续使用 Gensim 训练 fastText 模型。

我已经按照这里的文档进行了操作: https://radimrehurek.com/gensim/models/fasttext.html

我写了以下代码:

首先,创建一个小型语料库:

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 = [sentence.split() for sentence in corpus]

然后加载一个测试模型:

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

model = load_facebook_model(datapath("crime-and-punishment.bin"))

然后我检查一下模型是否知道我在语料库中奇怪的新词:

'Wagagamagga' in model.wv.key_to_index

哪个返回 False。

然后我尝试继续训练:

model.build_vocab(corpus, update=True)
model.train(corpus, total_examples=len(corpus), epochs=model.epochs)

该模型现在应该知道我奇怪的新词,但是当我期望它返回 True 时,它​​返回 False:

'Wagagamagga' in model.wv.key_to_index

我错过了什么?

【问题讨论】:

    标签: python nlp gensim fasttext


    【解决方案1】:

    模型的min_count 值通常至少为 5 - 表示出现次数较少的单词将被忽略。通常丢弃最稀有的词改善模型质量,因为两者:

    1. 这样的生词用例太少,无法自己获得好的向量;并进一步…
    2. 通过将周围的词推到彼此的窗口之外,并将训练周期和内部权重更新花费在仍然不好的向量上,它们会使其他词向量变得更糟

      随着更大的训练数据,增加min_count 甚至更高是有意义的。

      因此,您的问题很可能是因为该单词的一次出现不足以使其成为被跟踪的单词。使用具有多个对比使用示例的更大、多样化的语料库,至少与model.min_count 值一样多,将是最好的解决方法。

      另外:请注意,最好同时使用所有数据训练模型。

      将执行增量更新,但会引入新旧会话之间相对平衡的棘手问题。如果新会话仅使用单词的子集和具有代表性的单词用法,则可以通过训练轻推那些包含的单词出去与仅在早期会话中知道的单词具有可比性。

      因此,如果尝试增量更新,请确保您的质量评估足够强大,以检测模型在您的实际目标上是否真的在改进,或者变得更糟。

    【讨论】:

      猜你喜欢
      • 2019-02-04
      • 2018-09-08
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 2021-03-29
      • 1970-01-01
      相关资源
      最近更新 更多