Deep learning Gensim word2vec模型损失在几个时代后变为0

Deep learning Gensim word2vec模型损失在几个时代后变为0,deep-learning,gensim,word2vec,loss-function,Deep Learning,Gensim,Word2vec,Loss Function,正在尝试构建gensim word2vec模型。语料库包含1百万个句子。 我正在使用callback打印每个时代之后的损失。几个时代之后,损失变成零。 知道为什么损失变成0吗 Loss after epoch 0: 17300302.0 Loss after epoch 1: 11381698.0 Loss after epoch 2: 8893964.0 Loss after epoch 3: 7105532.0 ... ...

正在尝试构建gensim word2vec模型。语料库包含1百万个句子。 我正在使用callback打印每个时代之后的损失。几个时代之后,损失变成零。 知道为什么损失变成0吗

Loss after epoch 0: 17300302.0
Loss after epoch 1: 11381698.0
Loss after epoch 2: 8893964.0
Loss after epoch 3: 7105532.0
           ...
           ...
           ...
Loss after epoch 54: 1283432.0
Loss after epoch 55: 1278048.0
Loss after epoch 56: 316968.0
Loss after epoch 57: 0.0
Loss after epoch 58: 0.0
Loss after epoch 59: 0.0
Loss after epoch 60: 0.0
Loss after epoch 61: 0.0
Loss after epoch 62: 0.0
Loss after epoch 63: 0.0
Loss after epoch 64: 0.0
Loss after epoch 65: 0.0
Loss after epoch 66: 0.0

更新:用于此(也是次优)多历元运行计数的类型精度存在问题。请参阅以进行讨论

--

先前的答复:

很难说没有看到代码,没有对数据的一些想法,你就用它来做培训

但请注意:

  • gensim
    Word2Vec
    报告的损失目前不是每历元损失,而是自上次调用
    .train()
    开始以来的运行总数。(参见gensim项目bug#2617,以及其中提到的拉取请求/问题)要获得每历元损失(一个你预计会下降一段时间然后停滞的值),你必须通过将报告的值与之前报告的值进行比较来撤销此计数。(你在这么做吗?)

  • 我认为每个历元的损失实际上为零的唯一两种方法是(1)语料库迭代器中的某种错误,因此每个历元实际上没有发生新的训练-如果启用信息级日志记录,这可能在日志输出中很明显;(2) 极端过度拟合——对于实际训练数据的变化来说,模型太大了——在这种情况下,模型可能真的可以在其附近的单词预测任务中变得“完美”

在gensim项目支持列表上有一篇关于类似行为的报道——见——但在我提出了一些建议并问了一些后续问题后,最初的记者再也没有跟进。所以不清楚他们在代码中犯了什么错误,也不清楚gensim中是否有bug。不过,您可能会发现该线程中的问题和注释很有用


如果您无法以其他方式解决您的问题,那么在您的问题中查看您如何培训模型(代码、参数和数据)的更多详细信息,以及您如何报告这些损失数字,以及该线程中询问的任何其他详细信息,将有助于解决问题。

首先,如果您可以添加用于获得结果的代码,这将非常有帮助(请参阅以获取参考)。否则,就有很多可能性。