gensim模型返回id与输入doc2vec无关

时间:2018-04-14 09:10:01

标签: word2vec gensim cosine-similarity doc2vec

我从mongodb db news创建了一个模型,并通过mongo collection id标记了文档

from gensim.models.doc2vec import TaggedDocument
i=0
docs=[]
for artical in lstcontent:
    doct = TaggedDocument(clean_str(artical), [lstids[i]])
    docs.append(doct)
    i+=1

之后我通过

创建了模型
pretrained_emb='tweet_cbow_300/tweets_cbow_300'
saved_path = "documentmodel/doc2vec_model.bin"
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
model = g.Doc2Vec(docs, size=vector_size, window=window_size, min_count=min_count, sample=sampling_threshold, workers=worker_count, hs=0, dm=dm, negative=negative_size, dbow_words=1, dm_concat=1, pretrained_emb=pretrained_emb, iter=train_epoch)
model.save(saved_path)

当我使用代码模型时:

import gensim.models as g
import codecs
model="documentmodel/doc2vec_model.bin"
start_alpha=0.01
infer_epoch=1000
m = g.Doc2Vec.load(model)
sims = m.docvecs.most_similar(['5aa94578094b4051695eeb10'])
sims

输出

[('5aa944c1094b4051695eeaef', 0.9255372881889343),
('5aa945c1094b4051695eeb1d', 0.9222575426101685),
('5aa94584094b4051695eeb12', 0.9210859537124634),
('5aa945d2094b4051695eeb20', 0.9083569049835205),
('5aa945c7094b4051695eeb1e', 0.905883252620697),
('5aa9458f094b4051695eeb14', 0.9054019451141357),
('5aa944c7094b4051695eeaf0', 0.9019848108291626),
('5aa94589094b4051695eeb13', 0.9012798070907593),
('5aa945b1094b4051695eeb1a', 0.9000773429870605),
('5aa945bc094b4051695eeb1c', 0.8999895453453064)]

与5aa94578094b4051695eeb10无关的ID 我的问题在哪里??

1 个答案:

答案 0 :(得分:0)

看起来您可能会提供一个字符串作为words文本的TaggedDocument。它应该是一个单词列表。 (如果你提供一个字符串,它会将它看作一个单字符单词列表,并尝试将该算法作为字符到字符的预测运行 - 这不会导致非常好的向量。)

如果您启用INFO级别日志记录并观察输出,您可能会看到这是一个问题的提示,其形式是词汇量非常少,数十个而不是数万个。或者,如果这不是问题,您可能会看到其他差异,暗示出现了什么问题。

单独观察&提示:

  • 您正在使用&prequoined_emb'这个论点不是标准gensim的一部分。如果您使用非官方变体,基于较旧的gensim,您可能会遇到其他问题。 Doc2Vec工作所需的预训练词嵌入,并且可能无法提供太多好处。 (我总是会尝试没有任何这样的额外复杂性,首先,只有在你有一个简单的方法作为基线后,尝试这样的附加调整,并总是评估他们是否真的有帮助。)

    < / LI>
  • 目前还不清楚你使用了多少iter,但10-20是典型值,如果你的语料库很小和/或典型的文字很短,可能会更多/ p>

  • dm=1, dm_concat=1(具有拼接输入图层的PV-DM)导致更大,更慢的模型,可能需要更多数据才能获得良好的训练。目前尚不清楚这种dm_concat=1模式是否值得一试。充其量,它应该被认为是实验性的。因此,在将其作为高级实验尝试之前,我会在没有它的情况下工作。