Incorporation de mots de gants

Régularités linguistiques

Examinons maintenant comment fonctionne l’incorporation de gants. Comme on le sait généralement, les vecteurs de mots word2vec capturent de nombreuses régularités linguistiques. Pour donner l’exemple canonique, si nous prenons des vecteurs de mots pour les mots « paris », « france » et « allemagne » et effectuons l’opération suivante:

\

le vecteur résultant sera proche du vecteur pour « berlin »

Téléchargeons les mêmes données Wikipedia utilisées comme démo par word2vec:

Dans l’étape suivante, nous créerons un vocabulaire, un ensemble de mots pour lesquels nous voulons apprendre des vecteurs de mots. Notez que toutes les fonctions de text2vec qui fonctionnent sur des données de texte brutes (create_vocabulary, create_corpus, create_dtm, create_tcm) avoir une API de streaming et vous devez itérer sur les jetons comme premier argument pour ces fonctions.

Ces mots ne devraient pas être trop rares. Par exemple, nous ne pouvons pas calculer un vecteur de mot significatif pour un mot que nous n’avons vu qu’une seule fois dans tout le corpus. Ici, nous ne prendrons que des mots qui apparaissent au moins cinq fois. text2vec fournit des options supplémentaires pour filtrer le vocabulaire (voir ?prune_vocabulary).

Maintenant, nous avons 71 290 termes dans le vocabulaire et sommes prêts à construire une matrice de co-occurrence de termes (TCM).

Maintenant, nous avons une matrice TCM et pouvons la factoriser via l’algorithme de gant.
text2vec utilise un algorithme de descente de gradient stochastique parallèle. Par défaut, il utilisera tous les cœurs de votre machine, mais vous pouvez spécifier le nombre de cœurs si vous le souhaitez.

Ajustons notre modèle. (Cela peut prendre plusieurs minutes pour s’adapter!)

## INFO epoch 1, loss 0.1755 ## INFO epoch 2, loss 0.1228 ## INFO epoch 3, loss 0.1085 ## INFO epoch 4, loss 0.1005 ## INFO epoch 5, loss 0.0954 ## INFO epoch 6, loss 0.0918 ## INFO epoch 7, loss 0.0890 ## INFO epoch 8, loss 0.0869 ## INFO epoch 9, loss 0.0851 ## INFO epoch 10, loss 0.0837
## 71290 50

Notez que le modèle apprend deux ensembles de vecteurs de mots – main et contexte. Ils sont essentiellement les mêmes puisque le modèle est symétrique. De notre expérience, l’apprentissage de deux ensembles de vecteurs de mots conduit à des intégrations de meilleure qualité. Le modèle de gant est un modèle de « décomposition » (hérite de mlapiDecomposition – classe générique de modèles qui décomposent la matrice d’entrée en deux matrices de bas rang). Ainsi, à égalité avec tout autre modèle mlapiDecomposition, une deuxième matrice de rang bas (vecteurs de mots de contexte) est disponible dans le champ components:

## 50 71290

Notez que, comme dans tous les modèles héritant de mlapiDecomposition la matrice transformée aura nrow = nrow(input), ncol = rank et la seconde matrice component aura nrow = rank, ncol = ncol(input).

Alors que les deux matrices de vecteurs de mots peuvent être utilisées comme résultat, il est généralement préférable (idée de papier gant) de faire la moyenne ou de prendre une somme de vecteur principal et de contexte:

Nous pouvons trouver les vecteurs de mots les plus proches pour notre exemple paris -france + allemagne:

## paris berlin munich germany versailles ## 0.7724678 0.7156243 0.6962157 0.6381500 0.6170311

Vous pouvez obtenir de bien meilleurs résultats en expérimentant avec skip_grams_window et les paramètres de la classe GloVe (y compris la taille des vecteurs de mots et le nombre d’itérations). Pour plus de détails et des expériences à grande échelle sur les données de Wikipédia, consultez cet ancien article sur mon blog.

You might also like

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.