1

我有一组用户及其内容(每个用户一个包含该用户推文的文档)。我计划为每个用户使用某个大小为 N 的分布式矢量表示。一种方法是在 twitter 数据上使用预先训练好的词向量,然后对它们进行平均以获得用户的分布式向量。我打算使用 doc2vec 来获得更好的结果。但我不太确定我是否理解Distributed Representations of Sentences and Documents 中给出的 DM 模型。

我知道我们为每个段落分配一个向量,在预测下一个单词时,我们正在使用它,然后反向传播错误以更新段落向量和词向量。如何使用它来预测新段落的段落向量?

编辑:任何用于 gensim 计算新文档段落向量的玩具代码将不胜感激。

4

1 回答 1

1

以下代码基于 gensim 的 doc2vec教程。我们可以实例化和训练一个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 个最相似的文档。

于 2017-08-27T02:33:12.623 回答