Gensim Doc2vec模型聚类成K-means

时间:2017-08-02 07:38:26

标签: python k-means gensim doc2vec

我是doc2vec的新手,我希望你们中的一些人可以帮我解决这个问题。 我已经向很多人询问了这个问题,但没有人知道解决方案。

我想做的是将Doc2vec结果集中到k-means中。请参阅下面的代码。

mbk = MiniBatchKMeans(n_clusters=3, init_size=400, batch_size=300, verbose=1).fit(model_dm.docvecs[range([2000])                                                                                                 
MiniBatchKMeans.predict(mbk,mbk.labels_ )

我收到此错误。

TypeErrorTraceback (most recent call last)
<ipython-input-19-fbc57a13bf4b> in <module>()
      6 
      7 
----> 8 mbk = MiniBatchKMeans(n_clusters=3, init_size=400, batch_size=300, verbose=1).fit(model_dm.docvecs[:2000])
      9 
     10 #model_dm.docvecs.doctag_syn0[2000]

/usr/local/lib64/python2.7/site-packages/gensim/models/doc2vec.pyc in __getitem__(self, index)
    351             return self.doctag_syn0[self._int_index(index)]
    352 
--> 353         return vstack([self[i] for i in index])
    354 
    355     def __len__(self):

TypeError: 'slice' object is not iterable

1 个答案:

答案 0 :(得分:0)

您正试图在代码的这一部分上聚类单个文档向量(准确地说是第2001个向量):

.fit(model_dm.docvecs[2000]) 

我假设你想要前2000个载体?

修改

在查看gensim文档之后,无法找到获取文档向量的方法。但是查看source code DocvecsArray接受单个键(int或str)或键列表。有了它,您可以使用以下方法获取前2000个向量:

.fit(model_dm.docvecs[range(2000)])

它看起来并不令人满意,所以如果我以后可以找到另一种方法,我会解决问题。

另外请记住,这些不是第一个 2000向量,因为gensim似乎将docvecs存储为键:值对和字典不是有序的。

第二次修改:

K-means部分代码也需要修复,您正在调用MiniBatchKMeans class&#39; predict功能。并将类实例(mbk)作为参数。如果你需要预测其他任何东西,你需要调用类实例(在这种情况下它是mbk)predict函数。我认为你不会这样做。

您可以使用以下代码获取指定的标签。

mbk = MiniBatchKMeans(n_clusters=3, init_size=400, batch_size=300, verbose=1).fit(model_dm.docvecs[range(2000])
mbk.labels_