1

도메인 글자체를 사용하여 일반적인 문구를 병합하여 100D word2vec 모델을 생성했습니다 (예 : good bye => good_bye). 그런 다음 원하는 단어의 1000 개의 벡터를 추출했습니다.Python - word2vec 벡터의 계층 적 클러스터링을 계산하고 그 결과를 dendrogram으로 그립니다.

[[-0.050378,0.855622,1.107467,0.456601,...[100 dimensions], 
[-0.040378,0.755622,1.107467,0.456601,...[100 dimensions], 
... 
...[1000 Vectors] 
] 

그리고 단어 배열과 같이 :

그래서 나는 1000 numpy.array과 같이이 내 데이터를 K-수단을 실행 한

["hello","hi","bye","good_bye"...1000] 

, 그 결과는 내가 가지고 만든 의미 :

X = np.array(words_vectors) 
kmeans = KMeans(n_clusters=20, random_state=0).fit(X) 
for idx,l in enumerate(kmeans.labels_): 
    print(l,words[idx]) 

--- Output --- 
0 hello 
0 hi 
1 bye 
1 good_bye 

0 = 인사 1 = 작별

,

그러나 일부 단어는 계층 적 클러스터링이 작업에 더 적합하다고 생각하게했습니다. AgglomerativeClustering을 사용해 보았습니다. 불행히도 ...이 Python nobee에게는 복잡한 일이 일어나고 길을 잃었습니다.

벡터를 클러스터링하려면 어떻게해야합니까? this wiki 페이지에서 볼 수있는 것과 같이 출력이 더 많은 또는 더 적은 dendrogram이 될 수 있습니까? enter image description here

+0

'집계 클러스터링'의 문제점은 무엇입니까? 재현 가능한 예제를 제공 할 수 있다면 가장 좋을 것입니다. –

+0

저는 방금 주위를 짐작하고 있다고 느꼈고, 작업을 완료하기위한 지식이 부족합니다. –

답변

2

나는 지금까지 동일한 문제가있었습니다! 온라인에서 검색 한 후 항상 게시물을 찾은 후에 (keyword = word2vec에서 키워드 = 계층 클러스터링). 나는 아마도 당신에게 유효한 해결책을 제시해야만했다.

sentences = ['hi', 'hello', 'hi hello', 'goodbye', 'bye', 'goodbye bye'] 
sentences_split = [s.lower().split(' ') for s in sentences] 

import gensim 
model = gensim.models.Word2Vec(sentences_split, min_count=2) 

from matplotlib import pyplot as plt 
from scipy.cluster.hierarchy import dendrogram, linkage 

l = linkage(model.wv.syn0, method='complete', metric='seuclidean') 

# calculate full dendrogram 
plt.figure(figsize=(25, 10)) 
plt.title('Hierarchical Clustering Dendrogram') 
plt.ylabel('word') 
plt.xlabel('distance') 

dendrogram(
    l, 
    leaf_rotation=90., # rotates the x axis labels 
    leaf_font_size=16., # font size for the x axis labels 
    orientation='left', 
    leaf_label_func=lambda v: str(model.wv.index2word[v]) 
) 
plt.show()