Я получаю ошибку ключа при выполнении кластеризации KMeans с использованием векторов слов, сгенерированных Word2Ve c.
Пожалуйста, помогите мне решить эту проблему. Заранее спасибо.
Мой код выглядит следующим образом:
Word2Ve c
model = Word2Vec(Text, min_count=1, size=50, window=3)
Z = model.wv.syn0;
print(Z[0].shape)
Z[0]
Kmeans Clustering
def clustering_on_wordvecs(word_vectors, num_clusters):
kmeans_clustering = KMeans(n_clusters = num_clusters, init='k-means++');
idx = kmeans_clustering.fit_predict(word_vectors);
return kmeans_clustering.cluster_centers_, idx;
centers, clusters = clustering_on_wordvecs(Z, 6);
centroid_map = dict(zip(model.wv.index2word, clusters));
def get_top_words(index2word, k, centers, wordvecs):
tree = KDTree(wordvecs);
closest_points = [tree.query(np.reshape(x, (1, -1)), k=k) for x in centers];
closest_words_idxs = [x[1] for x in closest_points];
closest_words = {};
for i in range(0, len(closest_words_idxs)):
closest_words['Cluster #' + str(i)] = [index2word[j] for j in closest_words_idxs[i][0]]
df = pd.DataFrame(closest_words);
df.index = df.index+1
return df;
top_words = get_top_words(model.wv.index2word, 20, centers, Z);
def display_cloud(cluster_num, cmap):
wc = WordCloud(background_color="black", max_words=2000, max_font_size=80, colormap=cmap);
wordcloud = wc.generate(' '.join([word for word in top_words['Cluster #' +
str(cluster_num).zfill(2)]]))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.savefig('cluster_' + str(cluster_num), bbox_inches='tight')
cmaps = cycle([
'flag', 'prism', 'ocean', 'gist_earth', 'terrain', 'gist_stern',
'gnuplot', 'gnuplot2', 'CMRmap', 'cubehelix', 'brg', 'hsv',
'gist_rainbow', 'rainbow', 'jet', 'nipy_spectral', 'gist_ncar'])
Во время выполнения следующей части я получаю ошибку
for i in range(6):
col = next(cmaps);
display_cloud(i+1, col)
Ошибка KeyError: 'Cluster # 01'