【问题标题】:gensim model return ids not related with input doc2vecgensim 模型返回 id 与输入 doc2vec 无关
【发布时间】:2018-09-24 13:38:42
【问题描述】:

我从 mongodb db news 创建了一个模型,并通过 mongo 集合 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 我的问题在哪里!?

【问题讨论】:

  • 可以使用内置的“simple_preprocess”实用程序代替clean_str函数。

标签: word2vec gensim cosine-similarity doc2vec


【解决方案1】:

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

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

单独的观察和提示:

  • 您正在使用不属于标准 gensim 的“pretrained_emb”参数。如果您使用的是基于较旧 gensim 的非官方变体,您可能会遇到其他问题。预训练的词嵌入对于Doc2Vec 的工作来说不是必要的,并且可能不会提供太多好处。 (首先,我会尽量避免任何额外的复杂情况,然后只有在你有一个简单的方法作为基准之后,再尝试这些额外的调整,并始终评估它们是否真的有帮助。)

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

  • dm=1, dm_concat=1(具有串联输入层的 PV-DM)会导致模型更大、速度更慢,可能需要更多数据才能得到良好训练。目前尚不清楚这种dm_concat=1 模式是否值得麻烦。充其量,它应该被认为是实验性的。所以我会在没有它的情况下让事情顺利进行,然后再将其作为高级实验进行尝试。

【讨论】:

    猜你喜欢
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 2017-02-12
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多