2017-10-21 24 views
1

Mon code doc2vec actuel est le suivant.Doc2vec et word2vec avec échantillonnage négatif

# Train doc2vec model 
model = doc2vec.Doc2Vec(docs, size = 100, window = 300, min_count = 1, workers = 4, iter = 20) 

J'ai aussi un code word2vec comme ci-dessous.

# Train word2vec model 
model = word2vec.Word2Vec(sentences, size=300, sample = 1e-3, sg=1, iter = 20) 

Je suis intéressé à utiliser les deux DM et DBOW dans doc2vec et à la fois Skip-gramme et CBOW dans word2vec.

En Gensim je trouve la phrase mentionnée ci-dessous: « vecteurs Produire des mots avec l'apprentissage en profondeur Vïa word2vec « skip-gramme et modèles CBOW », en utilisant softmax hiérarchique ou d'échantillonnage négatif »

Ainsi, je suis confondu soit d'utiliser softmax hiérarchique ou d'échantillonnage négatif. S'il vous plaît laissez-moi savoir quelles sont les différences dans ces deux méthodes.

Aussi, je suis intéressé à connaître quels sont les paramètres qui doivent être modifiés utiliser softmax hiérarchique ET/OU échantillonnage négatif par rapport à dm, DBOW, Skip-gramme et CBOW?

P.s. mon application est un système de recommandation :)

Répondre

3

Skip-gram ou CBOW sont différentes façons de choisir les contextes d'entrée pour le réseau de neurones. Skip-gram sélectionne un mot proche, puis le fournit en entrée pour essayer de prédire un mot cible; CBOW fait la moyenne d'un groupe de mots voisins, puis fournit cette moyenne en entrée pour essayer de prédire un mot cible.

DBOW est le plus similaire à skip-gram, en ce sens qu'un seul paragraphe-vecteur pour un texte entier est utilisé pour prédire des mots cibles individuels, indépendamment de la distance et sans aucun moyennage. Il peut bien se mélanger avec un entraînement par sauts simultanés, où en plus de l'utilisation du vecteur de paragraphe unique, des vecteurs de mots proches sont également utilisés. L'option gensim dbow_words=1 ajoutera une formation de type skip-gram à une formation DBOW dm=0.

DM est le plus similaire à CBOW: le vecteur de paragraphe est moyenné avec un certain nombre de mots environnants pour tenter de prédire un mot cible. Donc dans Word2Vec, vous devez choisir entre skip-gram (sg=1) et CBOW (sg=0) - ils ne peuvent pas être mélangés. Dans Doc2Vec, vous devez choisir entre DBOW (dm=0) et DM (dm=1) - ils ne peuvent pas être mélangés. Mais vous pouvez, quand vous utilisez Doc2Vec DBOW, ajouter également un programme d'apprentissage par mot-clé (avec dbow_words=1).

Le choix entre hiérarchique-softmax et négatif-échantillonnage est séparé et indépendant des choix ci-dessus. Il détermine comment les prédictions de mots-cibles sont lues à partir du réseau neuronal. Avec l'échantillonnage négatif, chaque nœud de sortie du réseau est affecté à chaque prédiction possible. Afin d'améliorer la prédiction créée par un contexte d'entrée particulier, il vérifie les nœuds de sortie pour le mot «correct» (de l'extrait d'exemple d'entraînement actuel du corpus), et pour N autres mots «faux» (qui ne correspondent pas l'exemple d'entraînement actuel).Il pousse ensuite les poids internes du réseau et les vecteurs d'entrée pour rendre un peu plus fort l'activation du nœud de sortie du mot «correct» et les activations du nœud de sortie du mot «mauvais» un peu plus faible. (On appelle cela une approche « clairsemée », car il évite d'avoir à calculer chaque noeud de sortie, ce qui est très élevé dans les grandes vocabulaires, au lieu que calcul N + 1 nœuds et en ignorant le reste.)

Vous pouvez définir negative-sampling avec 2 exemples négatifs avec le paramètre (dans Word2Vec ou Doc2Vec, avec n'importe quel type de mode contexte d'entrée). Le mode par défaut, si aucun negative spécifié, est negative=5, en suivant la valeur par défaut dans le code Google word2vec.c d'origine. Avec une hiérarchie-softmax hiérarchique, au lieu que chaque mot prévisible ait son propre nœud de sortie, un certain nombre d'activations de plusieurs nœuds de sortie est interprété comme signifiant des mots spécifiques. Les nœuds qui devraient être plus proches de 1.0 ou 0.0 pour représenter un mot sont affaire de codage du mot, qui est calculé de sorte que les mots communs ont des codages courts (impliquant seulement quelques nœuds), tandis que les mots rares auront des encodages plus longs. nœuds). Encore une fois, cela permet d'économiser du temps de calcul: pour vérifier si un contexte d'entrée conduit juste le bon ensemble de nœuds aux bonnes valeurs pour prédire le mot «correct» (pour l'exemple d'entraînement actuel), quelques nœuds doivent être vérifié, et poussé, au lieu de l'ensemble.

Vous activez hiérarchique-softmax dans le gensim avec l'argument hs=1. Par défaut, il n'est pas utilisé.

Vous devez généralement désactiver l'échantillonnage négatif, en fournissant negative=0, si vous activez hiérarchique-softmax - typiquement l'un ou l'autre fonctionnera mieux pour une quantité donnée de temps CPU/RAM. Cependant, en suivant l'architecture du code Google word2vec.c d'origine, il est possible mais non recommandé de les activer tous les deux en même temps, par exemple negative=5, hs=1, ce qui se traduira par un modèle plus grand et plus lent, qui pourrait apparaître pour fonctionner mieux puisque vous lui donnez plus de RAM/temps pour s'entraîner, mais il est probable que donner une RAM/heure équivalente à l'un ou à l'autre serait préférable.)

Hiérarchie-softmax tend à devenir plus lent avec des vocabulaires plus grands (parce que le nombre moyen de nœuds impliqués dans chaque exemple d'apprentissage augmente); l'échantillonnage négatif ne fonctionne pas (parce que c'est toujours N + 1 nœuds). Les projets avec des corpus plus importants ont tendance à préférer l'échantillonnage négatif.

+0

Merci beaucoup pour votre excellente explication! Très bien décrit. Ceci est exactement ce que je cherchais. Un grand merci encore une fois :) –

+0

S'il vous plaît laissez-moi savoir si vous connaissez une réponse à cette question: https://stackoverflow.com/questions/46970376/issues-in-gensim-wordrank-embeddings –