我有一组用户及其内容(每个用户包含1个包含该用户推文的文档)。我打算为每个用户使用一些大小为N的分布式矢量表示。一种方法是在twitter数据上采用预先训练过的wordvectors并对它们进行平均以得到用户的分布式矢量。我打算使用doc2vec来获得更好的结果。但我不太清楚我是否理解Distributed Representations of Sentences and Documents中给出的DM模型。
据我所知,我们正在为每个段落分配一个向量,并在预测下一个单词时使用它,然后反向传播错误以更新段落向量以及单词向量。如何使用它来预测新段落的段落向量?
编辑:用于计算新文档段落向量的gensim的任何玩具代码将不胜感激。
答案 0 :(得分:1)
以下代码基于gensim的doc2vec tutorial。我们可以实例化和训练doc2vec模型以生成大小为300的嵌入,其上下文窗口大小为10,如下所示:
from gensim.models.doc2vec import Doc2Vec
model = Doc2Vec(size=300, window=10, min_count=2, iter=64, workers=16)
model.train(train_corpus, total_examples=model.corpus_count, epochs=model.iter)
训练好我们的模型后,我们可以为新的未见文档计算一个向量,如下所示:
doc_id = random.randint(0, len(test_corpus))
inferred_vector = model.infer_vector(test_corpus[doc_id])
sims = model.docvecs.most_simlar([inferred_vector], topn=len(model.docvecs))
这将返回我们的测试文档的300维表示,并根据余弦相似度计算训练集中的前N个最相似的文档。