application de word2vec sur de petits fichiers texte

11

Je suis totalement nouveau sur word2vec, alors veuillez le porter avec moi. J'ai un ensemble de fichiers texte contenant chacun un ensemble de tweets, entre 1000-3000. J'ai choisi un mot clé commun ("kw1") et souhaite trouver des termes sémantiquement pertinents pour "kw1" en utilisant word2vec. Par exemple, si le mot-clé est "pomme", je m'attendrais à voir des termes connexes tels que "ipad" "os" "mac" ... basés sur le fichier d'entrée. Ainsi, cet ensemble de termes associés pour "kw1" serait différent pour chaque fichier d'entrée car word2vec serait formé sur des fichiers individuels (par exemple, 5 fichiers d'entrée, exécutez word2vec 5 fois sur chaque fichier).

Mon objectif est de trouver des ensembles de termes associés pour chaque fichier d'entrée en fonction du mot-clé commun ("kw1"), qui serait utilisé à d'autres fins.

Mes questions / doutes sont:

  • Est-il judicieux d'utiliser word2vec pour une tâche comme celle-ci? est-il techniquement correct d'utiliser compte tenu de la petite taille d'un fichier d'entrée?

J'ai téléchargé le code à partir de code.google.com: https://code.google.com/p/word2vec/ et je viens de lui donner un essai sec comme suit:

 time ./word2vec -train $file -output vectors.bin -cbow 1 -size 200 -window 10 -negative 25 -hs 1 -sample 1e-3 -threads 12 -binary 1 -iter 50

./distance vectors.bin 
  • D'après mes résultats, j'ai vu que j'obtiens de nombreux termes bruyants (mots vides) lorsque j'utilise l'outil 'distance' pour obtenir des termes liés à "kw1". J'ai donc supprimé les mots vides et autres termes bruyants tels que les mentions d'utilisateurs. Mais je n'ai vu nulle part que word2vec nécessite des données d'entrée nettoyées ...?

  • Comment choisissez-vous les bons paramètres? Je vois que les résultats (en exécutant l'outil de distance) varient considérablement lorsque je change des paramètres tels que «-window», «-iter». Quelle technique dois-je utiliser pour trouver les valeurs correctes pour les paramètres. (un essai manuel et une erreur ne sont pas possibles pour moi car je vais augmenter l'échelle de données).

samsamara
la source

Réponses:

9

Word2Vec n'est pas un bon choix pour un ensemble de données d'une telle taille. D'après les recherches que j'ai vues, cela libérerait sa puissance si vous nourrissez au moins quelques millions de mots, les tweets 3k ne seraient pas suffisants pour une similitude concise des mots.

chewpakabra
la source
devons-nous supprimer les mots vides comme étape de prétraitement des données?
samsamara
2
Non, dans l'approche word2vec, vous n'avez pas besoin de le faire, car l'algorithme lui-même s'appuie sur un contexte large pour trouver des similitudes dans les mots, donc les mots vides (dont la plupart sont des prépositions, des pronoms et autres) sont des ânes importants pour l'algorithme .
chewpakabra
mais lorsque j'utilisais l'outil de distance pour trouver la plupart des mots similaires à un mot donné, la version sans mots d'arrêt m'a donné des mots sensés que la version sans. pouvez-vous deviner ce que cela signifie?
samsamara
Vous utilisez probablement un contexte trop étroit: si votre modèle examine, disons, deux mots en arrière et en avant, vous aurez jusqu'à 2 mots vides en contexte et cela pourrait donner des résultats moins bons. Si vous élargissez le contexte (ce qui rendra le modèle plus grand et le temps de formation plus long), le modèle with-stopwords vous donnera de meilleurs résultats, je suppose.
chewpakabra
merci pour l'entrée, est plus logique maintenant. De plus, puisque word2vec traite la phrase entrée par phrase, que se passerait-il si je mélange les phrases dans le document d'entrée? cela devrait changer totalement les vecteurs de sortie non? Encore une fois, étant donné que le traitement est envoyé par envoyé, en quoi word2vec diffère-t-il de doc2vec? Merci encore.
samsamara