结果很差 Word2Vec

问题描述

我认为我缺少一些东西,因为我正在尝试进行 Word2Vec,但结果太糟糕了,我认为有些地方是错误的。 这是我的代码

# 1.65 million documents of 15-20 words each
documents = [['example','of','input'],['second','sentence',['this','is','a','list','lists']]

model = gensim.models.Word2Vec(documents,size=100,workers=-1,window=3)
model.train(documents,total_examples=model.corpus_count,epochs=30)

首先,训练运行速度非常快(我预计 30 个 epoch 的训练时间很长?) 然后当我寻找最相似的词时,结果似乎完全是随机的,没有任何相关性。

有什么我遗漏的吗? 谢谢

解决方法

首先,如果您向对象初始化提供了训练文本,则不需要调用 .train()。当您提供语料库时,它将自行运行必要的步骤。因此,您已经有了一个在 documents 上训练的工作模型,运行后使用默认的 5 个时期:

model = gensim.models.Word2Vec(documents,size=100,workers=-1,window=3)

在已经完成初始化训练之后再运行 30 个 epoch 可能不是一个好主意。如果您出于某种原因需要自己执行 build_vocab()/train() 步骤,请不要在对象初始化时指定语料库。另一方面,如果您只想要标准的语料库处理,只需预先指定语料库和您喜欢的 epochs/etc。

其次,如果您在运行任何内容之前在 INFO 级别启用日志记录,那么正在发生的事情会更清楚——如果有的话:

import logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s',level=logging.INFO)

如果日志输出显示即使在应该是大量数据的情况下也能立即完成步骤,或者报告发现/处理的与预期不符的无意义字数,那么您可能会更好地提示哪些不是按预期工作。

最后,您的症状(训练即时 * 糟糕的结果)正是您所展示的 3 个文本、13 个单词的小语料库所预期的。虽然您报告您的真实数据可能是“165 万个文档,每个文档 15-20 个单词”,但由于未显示将该数据提供给模型的代码,问题很可能出在未显示的步骤中,例如实际数据没有提供给模型,或者没有以正确的格式提供。

因此,如果您在启用日志记录后仍然遇到令人困惑的问题,请使用有关如何处理真实数据的更多信息扩展您的问题(或询问有关这些额外细节的后续信息。)