2017-09-17 5 views
0

J'ai un corpus d'articles de Wikipédia. J'ai identifié les 10 000 mots les plus fréquents, trouvé leurs vecteurs Word2Vec, et utilisé des moyennes k sphériques sur les vecteurs pour regrouper les mots en 500 groupes en fonction de la similarité de signification. J'ai repéré 3 des groupes de mots et ai converti les mots en leurs vecteurs de mot. Chaque vecteur de mot est un tableau de 300 valeurs, donc j'ai appliqué PCA (de sklearn) sur chacun d'eux pour les convertir en 2D. Puis je comploté:PCA et K-means pour le regroupement de mots

plot of 3 clusters

Chaque point représente un mot, chaque couleur représente 1 groupe. Le problème est que ces groupes ne devraient pas se chevaucher. Un cluster a des mots liés à l'ordinateur, un autre cluster a des mots liés à la race, et le dernier cluster a des mots liés aux relations. J'ai ajouté le mot «poulet» à la grappe avec des mots informatiques, mais une fois tracé, son point était juste à côté du point pour «clavier».

Je ne suis pas sûr de ce qui ne va pas ici. Y a-t-il quelque chose qui ne va pas avec mon approche? Voici mon code 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() 

Répondre

1

1) En général, je pense que vous devez appliquer PCA avant de faire le regroupement. C'est le but de la PCA, réduire la dimensionnalité de sorte que vous puissiez vous concentrer sur des aspects uniques. 2) Je ne sais pas si je suis d'accord avec votre idée que les deux premiers vecteurs propres doivent nécessairement être séparés - il y a beaucoup de vecteurs propres qui sont importants pour chaque cluster si votre dimensionnalité est réduite des mots. Combien de vecteurs propres gardez-vous? En règle générale, vous ne conservez que 90% de la variabilité des données, mais vous devriez jouer avec cela.