2017-12-21 18 views
1

doc2vecモデルでは、ベクター自体でクラスター化できますか?結果として得られる各ベクトルmodel.docvecs[1]をクラスタ化する必要がありますか?クラスタリングモデルの実装方法Doc2vec:結果のベクトルをクラスタ化

model = gensim.models.doc2vec.Doc2Vec(size= 100, min_count = 5,window=4, iter = 50, workers=cores) 
    model.build_vocab(res) 
    model.train(res, total_examples=model.corpus_count, epochs=model.iter) 


    # each of length 100 
    len(model.docvecs[1]) 

答えて

0

モデルから直接ドキュメントベクトルを使用して、k-meansクラスタリングアルゴリズムなどに適合させることができます。次に、重心を使用してドキュメントにラベルを付けます。クラスタにすべてのドキュメントをマッチングが必要でない場合

from scipy.cluster.vq import kmeans,vq 

NUMBER_OF_CLUSTERS = 15 

centroids, _ = kmeans(model.docvecs, NUMBER_OF_CLUSTERS) 

# computes cluster Id for document vectors 
doc_ids,_ = vq(model.docvecs,centroids) 

# zips cluster Ids back to document labels 
doc_labels = zip(model.docvecs.doctags.keys(), doc_ids) 

# outputs document label and the corresponding cluster label 
[('doc_216', 0), 
('doc_217', 12), 
('doc_214', 13), 
('doc_215', 11), 
('doc_212', 13), 
('doc_213', 11), 
('doc_210', 5), 
('doc_211', 13), 
('doc_165', 0), 
... ] 

、重心は(gensimを使用して)検索するために使用することができます。たとえば、セントロイド(クラスタ)1に最も近い10のドキュメントを取得します。

model.docvecs.most_similar(positive = [centroids[1]], topn = 10) 

# outputs document label and a similarity score 
[('doc_243', 0.9186744689941406), 
('doc_74', 0.9134798049926758), 
('doc_261', 0.8858329057693481), 
('doc_88', 0.8851054906845093), 
('doc_276', 0.8691701292991638), 
('doc_249', 0.8666893243789673), 
('doc_233', 0.8334537148475647), 
('doc_292', 0.8269758224487305), 
('doc_98', 0.8193566799163818), 
('doc_82', 0.808419942855835)] 
関連する問題