gensim 模型 return 与输入 doc2vec 无关的 ID

gensim model return ids not related with input 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 我的问题在哪里!?

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

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

单独的观察和提示:

  • 您使用的 'pretrained_emb' 参数不是标准 gensim 的一部分。如果您使用的是基于较旧 gensim 的非官方变体,您可能会遇到其他问题。预训练词嵌入 不是 Doc2Vec 工作所必需的,并且可能不会提供太多好处。 (我总是会在没有任何此类额外并发症的情况下进行尝试,首先,然后仅在您有一个简单的方法作为基线后,尝试这些添加的调整并始终评估它们是否真的有帮助。)

  • 不清楚您使用了多少 iter passes,但 10-20 是典型值,如果您的语料库很小,可能更多 and/or 典型文本很短

  • dm=1, dm_concat=1(具有连接输入层的 PV-DM)会产生更大、更慢的模型,可能需要更多数据才能训练有素。目前尚不清楚这种 dm_concat=1 模式是否值得麻烦。充其量,它应该被认为是实验性的。因此,在可能将其作为高级实验进行尝试之前,我会在没有它的情况下使事情正常进行。