<p>There are a bunch of potential approaches you could try, and see which might offer what you want.</p>
<p>First &amp; foremost, some of the Gensim <code>Doc2Vec</code> modes co-train word-vectors into the same coordinate system as the doc-vectors – allowing direct comparisons betwee words &amp; docs, sometimes even to the level of compositional 'vector-arithmetic' (like in the famous word2vec analogy-solving examples).</p>
<p>You can see this potential discussed in the paper <a href="https://arxiv.org/abs/1507.07998" rel="nofollow noreferrer">&quot;Document Embedding with Paragraph Vectors&quot;</a>.</p>
<p>The default PV-DM mode (parameter <code>dm=1</code>) automatically co-trains words and docs in the same space. You can also add interleaved word-vector skip-gram training into the other PV-DBOW <code>dm=0</code> mode by adding the optional parameter <code>dbow_words=1</code>.</p>
<p>While it is still the case that <code>d2v_model.dv.most_similar(docvec_or_doctag)</code> will only return doc-vector results, and <code>d2v_model.wv.most_similar(wordvec_or_word_token)</code> will only return word-vector results, you can absolutely provide a raw vector of a document to the set of word-vectors, or a word-vector to the set of doc-vectors, to get the nearest-neighbors of the other type.</p>
<p>So in one of these modes, with doc-vector, you can use...</p>
<pre><code>d2v_model.wv.most_simlar(positive=[doc_vector]) 
</code></pre>
<p>...to get a list-of-words that are closest to that doc-vector. Whether they're sufficiently representative will vary based on lots of factors. (If they seem totally random, there may be other problems with your data-sufficiency or process, or you may be using the <code>dm=0, dbow_words=0</code> mode that leaves words random &amp; untrained.)</p>
<p>You could use this on the centroid of your clusters – but note, a centroid might hide lots of the variety of a larger grouping, which might include docs <em>not</em> all in a tight 'ball' around the centroid. So you could also use this on <em>all</em> docs in a cluster, to get the top-N closest words to each – and then summarize the cluster as the words most often appearing in those many top-N lists, or most <em>uniquely</em> appearing in those top-N lists (versus the top-N lists of other clusters). That might describe more of the full cluster.</p>
<p>Separately, there's a method from Gensim's <code>Word2Vec</code>, <a href="https://radimrehurek.com/gensim/models/word2vec.html#gensim.models.word2vec.Word2Vec.predict_output_word" rel="nofollow noreferrer"><code>predict_output_word()</code></a>, which vaguely simulates the word2vec training-predictions to give a ranked list of predictions of a word from its surrounding words. The same code <em>could</em> be generalized to predict document-words from a doc-vector – there's an <a href="https://github.com/RaRe-Technologies/gensim/issues/2459" rel="nofollow noreferrer">open pending issue to do so</a>, and it'd be a simple bit of coding, though no-one's tackled it yet. (It'd be a welcome, and pretty easy, 1ast contribution to the Gensim project.)</p>
<p>Also: after having established your clusters, you could even put the <code>Doc2Vec</code> model aside, and use more traditional direct counting/frequency methods to pick out the most-salient words in each cluster. For example, turn each cluser into a single synthetic pseudodocument. Rank the words inside by TF-IDF, compared to the other cluster pseudodocs. (Or, get the top TF-IDF terms for every one of the individual original documents; describe each cluster by the most-often-relevant words tallied across all cluster docs.)</p>
doc2vec infer words from vectors
<p>I am clustering comments.</p>
<p>After preprocessing and a vectorization of a text, I have inferred vectors from my doc2vec model and applied kmeans.</p>
<p>After that I want to convert cluster centroid vectors to words to kinda look at the semantic cores of the clusters. Is it possible?</p>
<p>Edit: I use python/gensim.</p>