Ошибка ключа при кластеризации текста с Kmeans и Word2Vec - PullRequest
0 голосов
/ 09 января 2020

Я получаю ошибку ключа при выполнении кластеризации 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'

...