在 python (sklearn) 中使用亲和传播对 word2vec 向量进行聚类

4 python cluster-analysis text-mining scikit-learn word2vec

我想使用亲和力传播对我的 word2vec 集群进行聚类并获取集群中心单词。

我当前的代码如下。

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

但是,这会引发以下错误: ValueError: S must be a square array (shape=(77, 300))

据我了解,300 意味着 word2vec 隐藏层维度,77 是我的词汇量。

我只是想知道如何对非方阵的 word2vec 向量使用亲和传播。

请帮我!

pim*_*314 5

这是因为你说过样本之间的亲和力已经计算出来,它始终是一个方阵。因此,您可以使用已实现的欧几里得距离,或者如果您想使用不同的度量,则必须预先计算它,请参阅下面的示例代码:

# 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)
Run Code Online (Sandbox Code Playgroud)