我对 doc2vec 很陌生,然后我做了一些小研究,发现了一些东西。这是我的故事:我正在尝试学习使用 doc2vec 240 万个文档。起初,我只尝试使用包含 12 个文档的小型模型来这样做。我用第一个文档的推断向量检查了结果,发现它确实与第一个文档相似,余弦相似度为 0.97-0.99。我觉得这很好,即使当我尝试输入一个完全不同单词的新文档时,我得到了 0.8 度量相似度的高分。然而,我已经把它放在一边,并试图继续构建包含 240 万个文档的完整模型。在这一点上,我的问题开始了。结果完全是胡说八道,我在 most_similar 函数中收到相似度为 0.4-0.5 的结果,这与检查的新文档完全不同。我试图调整参数,但还没有结果。我还尝试从小型和大型模型中消除随机性,但是,我仍然得到不同的向量。然后我尝试在每个时期使用 get_latest_training_loss 来查看每个时期的损失如何变化。这是我的代码:
model = Doc2Vec(vector_size=300, alpha=0.025, min_alpha=0.025, pretrained_emb=".../glove.840B.300D/glove.840B.300d.txt", seed=1, workers=1, compute_loss=True)
workers=1, compute_loss=True)
model.build_vocab(documents)
for epoch in range(10):
for i in range(model_glove.epochs):
model.train(documents, total_examples = token_count, epochs=1)
training_loss = model.get_latest_training_loss()
print("Training Loss: " + str(training_loss))
model.alpha -= 0.002 # decrease the learning rate
model.min_alpha = model.alpha # fix the learning rate, no decay
我知道这段代码有点笨拙,但在这里使用它只是为了跟踪损失。我收到的错误是:
AttributeError: 'Doc2Vec' object has no attribute 'get_latest_training_loss'
我试着看模型。并自动补全,发现确实没有这个功能,找了个类似名字training_loss的东西,却给了我同样的错误。
这里有人可以给我一个想法吗?
提前致谢