2017-07-31 3 views
0

Cela pourrait être la question naïve que je vais poser. J'ai un corpus tokenisé sur lequel j'ai formé le modèle Word2vec de Gensim. Le code est comme ci-dessousPython: regrouper des mots similaires basés sur word2vec

site = Article("http://www.datasciencecentral.com/profiles/blogs/blockchain-and-artificial-intelligence-1") 
site.download() 
site.parse() 

def clean(doc): 
    stop_free = " ".join([i for i in word_tokenize(doc.lower()) if i not in stop]) 
    punc_free = ''.join(ch for ch in stop_free if ch not in exclude) 
    normalized = " ".join(lemma.lemmatize(word) for word in punc_free.split()) 
    snowed = " ".join(snowball.stem(word) for word in normalized.split()) 
    return snowed 

b = clean(site.text) 
model = gensim.models.Word2Vec([b],min_count=1,size=32) 
print(model) ### Prints: Word2Vec(vocab=643, size=32, alpha=0.025) #### 

Pour regrouper des mots similaires, j'utilise PCA pour visualiser les groupes de mots similaires. Mais le problème est qu'il ne forme que de gros groupes comme on le voit sur l'image.

PCA & dispersion Code parcelle:

vocab = list(model.wv.vocab) 
X = model[vocab] 
pca = PCA(n_components=2) 
X_pca = pca.fit_transform(X) 

df = pd.concat([pd.DataFrame(X_pca), 
       pd.Series(vocab)], 
       axis=1) 
df.columns = ['x','y','word'] 

fig = plt.figure() 
ax = fig.add_subplot(1,1,1) 
ax.scatter(df['x'],df['y']) 
plt.show() 

Donc, j'ai trois questions ici:

1) Est-ce qu'un seul article suffit d'avoir la séparation claire des clusters?

2) Si j'ai un modèle formé avec d'énormes corpus et que je veux prédire les mots similaires dans le nouvel article et les visualiser (c'est-à-dire des mots dans l'article que je prédis) sous la forme de clusters, y at-il un façon de le faire?

J'apprécie grandement vos suggestions. Je vous remercie.

Répondre

1
  1. Non, pas vraiment. À titre de référence, les modèles courants word2vec qui sont formés sur wikipedia (en anglais) se compose d'environ 3 milliards de mots.
  2. Vous pouvez utiliser KNN (ou quelque chose de similaire). Gensim a la fonction most_similar pour obtenir les mots les plus proches. En utilisant une réduction dimensionnelle (comme PCA ou tsne), vous pouvez obtenir un joli cluster. (Je ne sais pas si gensim a un module tsne, mais sklearn a, donc vous pouvez l'utiliser)

btw vous faites référence à une image, mais elle n'est pas disponible.

+0

Merci @lazary. Oui, je suis totalement d'accord avec les exigences de taille des données de formation. J'ai utilisé le cluster k-means alors qui m'a donné de beaux clusters clairs. J'ai joint l'image en posant la question mais ça ne s'est pas montré. Quand j'ai essayé de modifier, il y avait un lien vers mon présent de pièce jointe. –