非常差的结果Word2Vec



我想我遗漏了一些东西,因为我正在尝试做Word2Vec,但结果太糟糕了,我觉得有什么不对劲。这是我的代码:

# 1.65 million documents of 15-20 words each
documents = [['example','of','input'],
['second','sentence','of','input'],
['this','is','a','list','of','lists']]
model = gensim.models.Word2Vec(documents, size=100, workers=-1, window=3)
model.train(documents, total_examples=model.corpus_count, epochs=30)

首先,训练跑得很快(我预计训练时间会很长,有30个时代?(然后,当我寻找最相似的单词时,结果似乎完全是随机的,没有任何关联。

我有什么东西不见了吗?感谢

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

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

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

第二,如果在运行任何东西之前启用INFO级别的日志记录,将会更清楚地了解发生了什么:

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

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

最后,你的症状(训练瞬间*糟糕的结果(正是你所展示的3个文本、13个单词的小语料库所期望的。当您报告您的真实数据可能是";165万个文件,每个15-20个字";,由于没有显示将数据提供给模型的代码,因此问题很可能出现在未显示的步骤中,因此实际数据没有提供给模型,或者没有以正确的格式提供。

因此,如果你在启用日志记录后仍然有一个令人困惑的问题,那么可以用更多关于如何处理真实数据的信息来扩展你的问题(或者用这些额外的细节来询问后续问题(

最新更新