1

친화도 전파를 사용하여 내 word2vec 클러스터를 클러스터링하고 클러스터 중심 단어를 가져 오려고합니다.python에서 유사도 전파를 사용하여 word2vec 벡터 클러스터링 (sklearn)

현재 코드는 다음과 같습니다. 나는 300 word2vec에게 숨겨진 레이어의 차원을 의미하고, 77 내 어휘의 크기가 알고있는 것처럼 ValueError: S must be a square array (shape=(77, 300))

:

model = word2vec.Word2Vec.load("word2vec") 
word_vectors = model.wv.syn0 
affprop = AffinityPropagation(affinity="precomputed", damping=0.5) 
af= affprop.fit(word_vectors) 

그러나, 다음과 같은 오류를 발생시킵니다.

정사각형 배열이 아닌 word2vec 벡터에 선호도 전파를 사용하는 방법에 대해 궁금합니다.

도와주세요!

답변

1

샘플 간의 유사성은 이미 계산 된 것으로, 이는 항상 정사각형입니다. 우리는 직접 :) 수있는 좋은 대답을

# some dummy data 
word_vectors = np.random.random((77, 300)) 

# using eucliden distance 
affprop = AffinityPropagation(affinity='euclidean', damping=0.5) 
af = affprop.fit(word_vectors) 

# using cosine 
from sklearn.metrics.pairwise import cosine_distances 
word_cosine = cosine_distances(word_vectors) 
affprop = AffinityPropagation(affinity='precomputed', damping=0.5) 
af = affprop.fit(word_cosine) 
+0

덕분에 많은 : 그래서 당신은 구현 유클리드 거리를 사용하거나 당신이 그것을 미리 계산해야 다른 메트릭을 사용하려는 경우, 아래의 예제 코드를 볼 수 있습니다 당신이 언급 한대로 코사인 거리를 계산하거나 우리가이 같은 방법을 사용해야 할'인덱스 = gensim.similarities.MatrixSimilarity (gensim.matutils.Dense2Corpus (word_vectors)) 지수에서 심즈에 대한 : similarity_matrix.append (심즈) 를 similarity_array = np.array (similarity_matrix)' –

+1

원하는 거리를 계산할 수 있습니다. 나는 단순화를 위해 scikit을 사용하는 경향이있다. – ncfirth

+0

어피 니티 전파에 입력 한 매트릭스가 근본적으로 거리 매트릭스 여야하는지 알려주십시오. 대신에 유사성 행렬을 입력 할 수 있습니까? :) –