我有大约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()
`
答案 0 :(得分:0)
tags
的{{1}}属性应为标记的列表。
通过仅提供TaggedDocument
,您将提供单个字符串,该字符串被视为字符列表。并且您的所有字符列表都只有数字'0'到'9'。因此,模型在训练期间只能看到10个标签,并且最后只有10个文档向量,用于标记tags=str(i)
到'0'
。
使用'9'
来提供包含一个标记的列表。 (或者甚至使用tags=[str(i)]
- tags=[i]
可以有效地使用普通的int标签,只要它们从Doc2Vec
开始是连续的。)