1

我是 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
4

1 回答 1

0

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

.fit(model_dm.docvecs[2000]) 

我假设您想要前 2000 个向量?

编辑:

查看 gensim 文档后,找不到获取文档向量切片的方法。但是查看源代码DocvecsArray 接受单个键(int 或 str)或键列表。有了它,您可以使用以下方法获得前 2000 个向量:

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

它看起来并不令人满意,所以如果我以后能找到另一种方法,我会修正我的答案。

还要记住,这些不是前2000 个向量,因为 gensim 似乎将 docvecs 存储为键:值对并且字典没有排序。

第二次编辑:

K-means 部分代码也需要修复,你正在调用MiniBatchKMeans类的predict函数。并将类实例 (mbk) 作为参数。predict如果您需要预测其他任何内容,则需要调用类实例的(在这种情况下为 mbk)函数。我假设你没有。

您可以使用下面的代码获取分配的标签。

mbk = MiniBatchKMeans(n_clusters=3, init_size=400, batch_size=300, verbose=1).fit(model_dm.docvecs[range(2000])
mbk.labels_
于 2017-08-02T07:40:52.500 回答