1

私はドメインテキストコーパスを使用して一般的なフレーズをマージする100D word2vecモデルを生成しました(たとえば、good bye => good_bye)。それから私は1000語の所望の単語を抽出しました。Python - word2vecベクトルの階層的クラスタリングを計算し、結果を樹立図としてプロットする

だから私はそうのような1000年numpy.arrayあります

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

が、私は私のデータにK-手段を走っていると、結果は私が得た:そうのような

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

と言葉の配列を製センス:

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ページにあるように多かれ少なかれ、どのようなものになるでしょうか? enter image description here

+0

「AgglomerativeClustering」では何が問題になりましたか?あなたが再現可能な例を提供できるなら、それは最高の –

+0

でしょう私はちょうど私が周りを推測していると感じ、タスクを完了するための知識が不足しています –

答えて

2

私は今まで同じ問題がありました! オンラインで検索した後、あなたの投稿を常に見つけたら(キーワード= 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() 
関連する問題