2017-08-02 6 views
1

Je suis nouveau sur doc2vec et j'espère que l'un d'entre vous pourra m'aider avec ce problème. J'ai posé cette question à un certain nombre de personnes, mais personne ne connaît la solution.Gensim Doc2vec modèle en cluster dans K-means

Ce que je veux faire est de regrouper le résultat Doc2vec dans k-means. S'il vous plaît voir ci-dessous le code.

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

Je reçois cette erreur.

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 

Répondre

0

Vous essayez de regrouper un seul vecteur de document (vecteur 2001th pour être précis) sur cette partie de votre code:

.fit(model_dm.docvecs[2000]) 

Je suppose que vous voulez que les premiers vecteurs 2000?

Edit:

Après avoir examiné la documentation gensim ne pouvait pas voir un moyen d'obtenir une tranche de vecteurs de document. Mais en regardant le source code DocvecsArray accepte une seule clé (int ou str) ou une liste de clés. Avec cela, vous pouvez obtenir les premiers vecteurs 2000 en utilisant:

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

Il ne semble pas satisfaisant, donc je vais corriger ma réponse si je peux trouver une autre façon plus tard.

Gardez également à l'esprit que ce sont pas les premiers vecteurs 2000 puisque gensim semble stocker des docvecs comme une clé: la paire valeur et les dictionnaires ne sont pas commandés.

Deuxième édition:

K-means partie du code doit également être fixe, vous appelez MiniBatchKMeans classe fonction predict. Et donnez l'instance de classe (mbk) en argument. Vous devez appeler la fonction predict de l'instance de classe (dans ce cas, c'est mbk) si vous avez besoin de prévoir quoi que ce soit d'autre. Ce que je suppose que vous ne faites pas.

Vous pouvez obtenir les étiquettes affectées en utilisant le code ci-dessous.

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

Salut Umutto, je vous remercie pour vos réponses. J'ai essayé mais j'ai une nouvelle erreur. S'il vous plaît voir ci-dessous. –

+0

@ El-moro hmm désolé à ce sujet, j'ai vérifié la documentation, vous avez raison. Éditera ma réponse. – umutto

+0

Je me bats quelques jours avec ce problème. J'espère que vous pouvez m'aider avec ça ou quelqu'un d'autre, on dirait que personne ne connaît la solution. –