word2vec: échantillonnage négatif (en termes simples)?

Réponses:

164

L'idée de word2vecest de maximiser la similitude (produit scalaire) entre les vecteurs des mots qui apparaissent rapprochés (dans le contexte les uns des autres) dans le texte, et de minimiser la similitude des mots qui ne le sont pas. Dans l'équation (3) de l'article auquel vous vous connectez, ignorez l'exponentiation pendant un moment. Tu as

      v_c * v_w
 -------------------
   sum(v_c1 * v_w)

Le numérateur est essentiellement la similitude entre les mots c(le contexte) et wle mot (cible). Le dénominateur calcule la similitude de tous les autres contextes c1et du mot cible w. En maximisant ce rapport, les mots qui apparaissent plus rapprochés dans le texte ont plus de vecteurs similaires que les mots qui n'en ont pas. Cependant, le calcul peut être très lent, car il existe de nombreux contextes c1. L'échantillonnage négatif est l'un des moyens de résoudre ce problème - il suffit de sélectionner quelques contextes c1au hasard. Le résultat final est que si catapparaît dans le contexte de food, alors le vecteur de foodest plus similaire au vecteur de cat(en tant que mesures par leur produit scalaire) qu'aux vecteurs de plusieurs autres mots choisis au hasard(par exemple democracy, greed, Freddy), au lieu de tous les autres mots de la langue . Cela rend word2vecbeaucoup plus rapide à former.

mbatchkarov
la source
15
merci ou la belle explication. Je pense que c'est juste de l'échantillonnage. mais savez-vous pourquoi il a appelé «négatif»?
HappyCoding
46
La terminologie est empruntée à la classification, une application courante des réseaux de neurones. Là, vous avez un tas d'exemples positifs et négatifs. Avec word2vec, pour un mot donné, vous avez une liste de mots qui doivent lui être similaires (la classe positive) mais la classe négative (les mots qui ne sont pas similaires au mot targer) est compilée par échantillonnage.
mbatchkarov
38

Le calcul de Softmax (fonction pour déterminer quels mots sont similaires au mot cible courant) est coûteux car il faut faire la somme de tous les mots en V (dénominateur), qui est généralement très grand.

entrez la description de l'image ici

Ce qui peut être fait?

Différentes stratégies ont été proposées pour approcher le softmax. Ces approches peuvent être regroupées en fonction Softmax- et par échantillonnage des approches. Les approches basées sur Softmax sont des méthodes qui conservent la couche softmax intacte, mais modifient son architecture pour améliorer son efficacité (par exemple, softmax hiérarchique). Les approches basées sur l' échantillonnage, en revanche, suppriment complètement la couche softmax et optimisent à la place une autre fonction de perte qui se rapproche du softmax (elles le font en rapprochant la normalisation du dénominateur du softmax avec une autre perte peu coûteuse à calculer comme échantillonnage négatif).

La fonction de perte dans Word2vec est quelque chose comme:

entrez la description de l'image ici

Quel logarithme peut se décomposer en:

entrez la description de l'image ici

Avec une formule mathématique et de gradient (voir plus de détails à 6 ), il s'est converti en:

entrez la description de l'image ici

Comme vous le voyez, converti en tâche de classification binaire (y = 1 classe positive, y = 0 classe négative). Comme nous avons besoin d'étiquettes pour effectuer notre tâche de classification binaire, nous désignons tous les mots de contexte c comme de vraies étiquettes (y = 1, échantillon positif), et k choisis au hasard parmi les corpus comme de fausses étiquettes (y = 0, échantillon négatif).


Regardez le paragraphe suivant. Supposons que notre mot cible soit " Word2vec ". Avec fenêtre de 3, nos mots de contexte sont: The, widely, popular, algorithm, was, developed. Ces mots de contexte sont considérés comme des étiquettes positives. Nous avons également besoin d'étiquettes négatives. Nous choisissons au hasard quelques mots du corpus ( produce, software, Collobert, margin-based, probabilistic) et les considérons comme des échantillons négatifs. Cette technique que nous avons choisie au hasard dans un corpus est appelée échantillonnage négatif.

entrez la description de l'image ici

Référence :

Amir
la source
1
Salut @amir, ma question initiale est que j'ai du mal à comprendre le concept d'échantillonnage négatif ...
Andy K
1
Très bien expliqué et un peu plus technique que la réponse acceptée. Donc une situation SO parfaite: lisez la réponse acceptée pour avoir l'idée et ensuite cette réponse pour la comprendre en détail.
Ursin Brunner
21

J'ai écrit un article de tutoriel sur l'échantillonnage négatif ici .

Pourquoi utilisons-nous un échantillonnage négatif? -> pour réduire les coûts de calcul

La fonction de coût pour l'échantillonnage négatif de Skip-Gram (SG) et Skip-Gram négatif (SGNS) ressemble à ceci:

entrez la description de l'image ici

Notez que Tc'est le nombre de tous les vocabulaires. C'est équivalent à V. En d'autres termes, T= V.

La distribution de probabilité p(w_t+j|w_t)dans SG est calculée pour tous les Vvocabulaires du corpus avec:

entrez la description de l'image ici

Vpeut facilement dépasser des dizaines de milliers lors de la formation du modèle Skip-Gram. La probabilité doit être calculée en Vtemps, ce qui la rend coûteuse en calcul. De plus, le facteur de normalisation du dénominateur nécessite des Vcalculs supplémentaires .

D'autre part, la distribution de probabilité dans SGNS est calculée avec:

entrez la description de l'image ici

c_posest un vecteur de mot pour un mot positif et W_negest un vecteur de mot pour tous Kles échantillons négatifs dans la matrice de poids de sortie. Avec SGNS, la probabilité doit être calculée uniquement K + 1fois, où Kest typiquement entre 5 ~ 20. De plus, aucune itération supplémentaire n'est nécessaire pour calculer le facteur de normalisation dans le dénominateur.

Avec SGNS, seule une fraction des pondérations est mise à jour pour chaque échantillon de formation, tandis que SG met à jour tous les millions de pondérations pour chaque échantillon de formation.

entrez la description de l'image ici

Comment SGNS y parvient-il? -> en transformant la tâche multi-classification en tâche de classification binaire.

Avec SGNS, les vecteurs de mots ne sont plus appris en prédisant les mots de contexte d'un mot central. Il apprend à différencier les mots contextuels réels (positifs) des mots tirés au hasard (négatifs) de la distribution du bruit.

entrez la description de l'image ici

Dans la vraie vie, vous n'observez généralement pas regressionavec des mots aléatoires comme Gangnam-Style, ou pimples. L'idée est que si le modèle peut distinguer les paires probables (positives) des paires improbables (négatives), de bons vecteurs de mots seront appris.

entrez la description de l'image ici

Dans la figure ci-dessus, la paire mot-contexte positive actuelle est ( drilling, engineer). K=5échantillons négatifs sont tirés au hasard de la distribution du bruit : minimized, primary, concerns, led, page. Au fur et à mesure que le modèle parcourt les échantillons d'apprentissage, les poids sont optimisés de sorte que la probabilité d'une paire positive s'affiche p(D=1|w,c_pos)≈1et la probabilité de paires négatives s'affiche p(D=1|w,c_neg)≈0.

Eric Kim
la source
1
T est le nombre de jetons (occurrences de mots dans un texte). V pour le vocabulaire (mots uniques) je dirais.
Adam le
Si nous définissons Kcomme V -1, alors l'échantillonnage négatif est le même que le modèle de skip-gramme vanille. Ma compréhension est-elle correcte?
Shashwat
@Shashwat, le nombre de vecteurs de mots mis à jour pour chaque échantillon de formation est le même, mais la fonction d'objectif de formation sera toujours fondamentalement différente
Eric Kim