使用python中的亲和传播聚类word2vec向量(sklearn)

时间:2017-11-07 08:31:20

标签: python scikit-learn cluster-analysis text-mining word2vec

我想使用Affinity Propagation对word2vec群集进行聚类,并获取群集中心词。

我目前的代码如下。

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

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

据我所知,300表示word2vec隐藏层维度,77表示我的词汇量。

我只是想知道如何对不是方阵的word2vec向量使用Affinity Propagation。

请帮助我!

1 个答案:

答案 0 :(得分:4)

这是因为你说已经计算了样本之间的亲和力,它总是一个方阵。因此,您可以使用已实现的欧几里德距离,或者如果您想使用其他指标进行预计算,请参阅下面的示例代码:

# 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)