【发布时间】:2018-02-26 05:02:30
【问题描述】:
我有一个维基百科文章的语料库。我确定了 10,000 个最常见的词,找到了它们的 Word2Vec 向量,并在向量上使用球面 k-means 根据含义相似性将这些词聚类为 500 组。
我选择了 3 个词簇并将这些词转换回它们的词向量。每个词向量都是一个包含 300 个值的数组,因此我对所有这些值应用了 PCA(来自 sklearn)以将它们转换为 2D。然后我绘制了:
每个点代表一个词,每种颜色代表1个簇。问题是,这些集群不应该重叠。一个集群有计算机相关的词,另一个集群有种族相关的词,最后一个集群有关系相关的词。我用计算机单词将“鸡”这个词添加到集群中,但是在绘制时,它的点就在“键盘”的点旁边。
我不确定这里出了什么问题。我的方法有什么问题吗?这是我的 PCA 代码:
for words in theList: #theList is an array of my 3 clusters
lexicalUnitVectors = load_bin_vec("GoogleNews-vectors-negative300.bin", words) #convert words to Word2Vec vectors
lexicalUnitVectors = list(lexicalUnitVectors.values())
lexicalUnitVectors = pca.fit(lexicalUnitVectors).transform(lexicalUnitVectors) #apply pca
print(lexicalUnitVectors) #this shows a bunch of 2D points; all x and y values are close to 0 for some reason
xs = [i*1 for i in lexicalUnitVectors[:, 0]] #ignore this
ys = [i*1 for i in lexicalUnitVectors[:, 1]] #ignore this
plt.scatter(xs, ys, marker = 'o')
plt.show()
【问题讨论】:
标签: python nltk cluster-analysis k-means pca