我是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
答案 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_