我正在使用推文准备Doc2Vec模型。每条推文的单词数组都被视为一个单独的文档,标记为“SENT_1”,SENT_2“等。
taggeddocs = [] for index,i in enumerate(cleaned_tweets): if len(i) > 2: # Non empty tweets sentence = TaggedDocument(words=gensim.utils.to_unicode(i).split(), tags=[u'SENT_{:d}'.format(index)]) taggeddocs.append(sentence) # build the model model = gensim.models.Doc2Vec(taggeddocs, dm=0, alpha=0.025, size=20, min_alpha=0.025, min_count=0) for epoch in range(200): if epoch % 20 == 0: print('Now training epoch %s' % epoch) model.train(taggeddocs) model.alpha -= 0.002 # decrease the learning rate model.min_alpha = model.alpha # fix the learning rate, no decay
我希望找到类似于给定推文的推文,说“SENT_2”。怎么样?
我得到类似推文的标签:
sims = model.docvecs.most_similar('SENT_2') for label, score in sims: print(label)
打印为:
SENT_4372 SENT_1143 SENT_4024 SENT_4759 SENT_3497 SENT_5749 SENT_3189 SENT_1581 SENT_5127 SENT_3798
但鉴于标签,我如何获得原始推文词/句子?例如。什么是推文,比如“SENT_3497”。我可以向Doc2Vec模型查询吗?
答案 0 :(得分:1)
Gensim的Word2Vec / Doc2Vec模型不存储语料库数据 - 他们只在多次通过中检查它以训练模型。如果需要检索原始文本,则应填充自己的按键查找数据结构,例如Python dict(如果所有示例都适合内存)。
另外,在最新版本的gensim中,您的代码实际上会对您的taggeddocs
进行1,005次培训,其中包括许多具有非敏感/破坏性负alpha
值的培训。
通过将其传递给构造函数,您可以使用参数和默认值告诉模型自我训练,其中包括默认的iter=5
次传递次数。
然后再做200个循环。每次调用train()
都会执行默认的5次传递。通过将alpha
从0.025减去0.002 199次,最后一个循环将使用0.025-(200 * 0.002)= - 0.375的有效alpha
- 一个负值,基本上告诉模型做大在每个训练例子的改进的相反方向上进行校正。
只需使用iter
参数选择所需的通过次数即可。让班级自己管理alpha
更改。如果在实例化模型时提供语料库,则不需要进一步的步骤。但是,如果您未在实例化时提供语料库,则需要执行model.build_vocab(tagged_docs)
一次,然后model.train(tagged_docs)
一次。