如何获得模型的所有docvecs

时间:2018-04-05 21:06:38

标签: python k-means gensim doc2vec

我有大约1000份文件,我使用gensim的doc2vec课程对他们进行了培训。我需要模型中的所有1000个docvecs执行kmeans clstering。但我能得到的最大数量是10.任何想法,如何获得所有这些?以下是我的代码段。

`

tagged_data = [TaggedDocument(words=word_tokenize(_d.lower()),tags=str(i)) for i, _d in enumerate(data)]

max_epochs = 100
vec_size = 20
alpha = 0.025

model = Doc2Vec(size=vec_size,
                alpha=alpha, 
                min_alpha=0.025,
                min_count=1,
                dm =1)

model.build_vocab(tagged_data)

for epoch in range(max_epochs):
    model.train(tagged_data,
                total_examples=model.corpus_count,
                epochs=model.iter)
    # decrease the learning rate
    model.alpha -= 0.0002
    # fix the learning rate, no decay
    model.min_alpha = model.alpha

X= model.docvecs.doctag_syn0 

print(X)

true_k = 3
km = KMeans(n_clusters=true_k, init='k-means++', max_iter=100, n_init=1)
km.fit(X)

clusters = km.labels_.tolist()

`

1 个答案:

答案 0 :(得分:0)

tags的{​​{1}}属性应为标记的列表

通过仅提供TaggedDocument,您将提供单个字符串,该字符串被视为字符列表。并且您的所有字符列表都只有数字'0'到'9'。因此,模型在训练期间只能看到10个标签,并且最后只有10个文档向量,用于标记tags=str(i)'0'

使用'9'来提供包含一个标记的列表。 (或者甚至使用tags=[str(i)] - tags=[i]可以有效地使用普通的int标签,只要它们从Doc2Vec开始是连续的。)