[PYTHON] Liste des vecteurs d'incorporation de mots prêts à l'emploi

introduction

L'incorporation de mots est une technique permettant d'exprimer des mots sous forme de vecteurs de nombres réels de faible dimension (bien qu'il y ait environ 200 dimensions). Il se caractérise par sa capacité à associer des mots avec des significations similaires à des vecteurs proches, et en ajoutant et en soustrayant des vecteurs, un résultat significatif (par exemple, roi - homme + femmes = reine) peut être obtenu.

Les vecteurs d'incorporation de mots sont une technique importante utilisée dans diverses applications de traitement du langage naturel telles que le balisage de mots partiels, la recherche d'informations et les questions-réponses. Cependant, ** le travail à préparer est une tâche ardue **. Téléchargez une grande quantité de données, prétraitez-les, entraînez-les sur une longue période, voyez les résultats et ajustez les paramètres.

Donc ** il est plus facile d'utiliser un vecteur entraîné si vous voulez simplement l'utiliser **. Donc, j'ai choisi ceux qui peuvent être utilisés maintenant à partir de ces vecteurs d'incorporation de mots.

Les informations sur le vecteur intégré sont résumées dans le référentiel suivant, veuillez donc également les consulter. awesome-embedding-models

Tout d'abord, les trois classiques: Word2Vec, GloVe, fastText

Word2Vec

Commentaire d'un mot Inutile de dire que le vecteur pré-formé de Word2Vec. Si vous ne savez pas quoi utiliser, vous pouvez l'utiliser.
Années d'annonce 2013
URL https://code.google.com/archive/p/word2vec/

Des vecteurs formés multilingues, y compris le japonais, peuvent être obtenus à partir des liens ci-dessous:

GloVe

Commentaire d'un mot GloVe dont Stanford est fier. Il prétend avoir de meilleures performances que Word2Vec. Nous avons appris un vecteur de mot qui peut être combiné avec un modèle de décomposition matricielle globale et un modèle de fenêtre contextuelle locale.
Années d'annonce 2014
URL http://nlp.stanford.edu/projects/glove/

fastText

Commentaire d'un mot FastText créé par Mikolov, le génie qui a créé Word2Vec. Quoi qu'il en soit, l'apprentissage est rapide. Afin de considérer la morphologie, chaque mot est exprimé par la lettre ngram et leur expression vectorielle est apprise.
Années d'annonce 2016
URL1 Download Word Vectors
URL2 Download Word Vectors(NEologd)

※ uniquement japonais

J'ai écrit ci-dessous, y compris comment l'utiliser. Le modèle entraîné de fastText a été publié

Trois vecteurs de pré-apprentissage avec les dernières réalisations appliquées

Dependency-Based Word Embeddings

Commentaire d'un mot Vecteur d'incorporation de mots par Levy et al. En m'entraînant à l'utilisation des dépendances, je suis devenu plus fort dans les tâches syntaxiques. Cela peut être utile si vous souhaitez l'utiliser pour des tâches syntaxiques.
Années d'annonce 2014
URL https://levyomer.wordpress.com/2014/04/25/dependency-based-word-embeddings/

Meta-Embeddings

Commentaire d'un mot Meta annoncé à l'ACL 2016-Embeddings. De meilleurs vecteurs en combinant des ensembles de vecteurs incorporés dans des mots avec différentes propriétés(meta embedding)A réussi à obtenir. L'avantage est que la couverture du vocabulaire peut être augmentée en combinant des ensembles de vecteurs.
Années d'annonce 2016
URL http://cistern.cis.lmu.de/meta-emb/

LexVec

Commentaire d'un mot C'est également LexVec annoncé à ACL2016. La tâche de similarité de mots surpasse Word2Vec dans certains ensembles de notation.
Années d'annonce 2016
URL https://github.com/alexandres/lexvec

Bonus: comment utiliser le vecteur téléchargé

J'écrirai comment lire le vecteur pré-entraîné de Word2Vec qui sera souvent utilisé.

C'est super facile à lire. Installez simplement gensim et écrivez le code suivant.

import gensim

# Load Google's pre-trained Word2Vec model.
model = gensim.models.KeyedVectors.load_word2vec_format('./GoogleNews-vectors-negative300.bin', binary=True)

Vous pouvez écrire le code suivant pour faire une évaluation. Notez que vous devez télécharger les données d'évaluation questions-words.txt avant d'exécuter.

import logging
import pprint

# for logging                                                                                                                                                                                                                                                                      
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
# Load evaluation dataset of analogy task                                                                                                                                                                                                                                          
model.accuracy('questions-words.txt')
# execute analogy task like king - man + woman = queen                                                                                                                                                                                                                             
pprint.pprint(model.most_similar(positive=['woman', 'king'], negative=['man']))

Lorsque vous exécutez le code écrit, les résultats d'évaluation suivants sont générés.

2017-01-20 09:29:11,767 : INFO : loading projection weights from ./GoogleNews-vectors-negative300.bin
2017-01-20 09:30:10,891 : INFO : loaded (3000000, 300) matrix from ./GoogleNews-vectors-negative300.bin
2017-01-20 09:30:10,994 : INFO : precomputing L2-norms of word weight vectors
2017-01-20 09:30:42,097 : INFO : capital-common-countries: 83.6% (423/506)
2017-01-20 09:30:49,899 : INFO : capital-world: 82.7% (1144/1383)
2017-01-20 09:30:50,795 : INFO : currency: 39.8% (51/128)
2017-01-20 09:31:03,579 : INFO : city-in-state: 74.6% (1739/2330)
2017-01-20 09:31:05,574 : INFO : family: 90.1% (308/342)
2017-01-20 09:31:09,928 : INFO : gram1-adjective-to-adverb: 32.3% (262/812)
2017-01-20 09:31:12,052 : INFO : gram2-opposite: 50.5% (192/380)
2017-01-20 09:31:19,719 : INFO : gram3-comparative: 91.9% (1224/1332)
2017-01-20 09:31:23,574 : INFO : gram4-superlative: 88.0% (618/702)
2017-01-20 09:31:28,210 : INFO : gram5-present-participle: 79.8% (694/870)
2017-01-20 09:31:35,082 : INFO : gram6-nationality-adjective: 97.1% (1193/1229)
2017-01-20 09:31:43,390 : INFO : gram7-past-tense: 66.5% (986/1482)
2017-01-20 09:31:49,136 : INFO : gram8-plural: 85.6% (849/992)
2017-01-20 09:31:53,394 : INFO : gram9-plural-verbs: 68.9% (484/702)
2017-01-20 09:31:53,396 : INFO : total: 77.1% (10167/13190)
[('queen', 0.7118192315101624),
 ('monarch', 0.6189674139022827),
 ('princess', 0.5902431011199951),
 ('crown_prince', 0.5499460697174072),
 ('prince', 0.5377321839332581),
 ('kings', 0.5236844420433044),
 ('Queen_Consort', 0.5235946178436279),
 ('queens', 0.5181134343147278),
 ('sultan', 0.5098593235015869),
 ('monarchy', 0.5087412595748901)]

En regardant ce résultat, nous pouvons voir que la précision totale est de ** 77,1% **.

À propos, les vecteurs de mots tels que GloVe peuvent être lus presque de la même manière.

en conclusion

Dans cet article, nous avons présenté quelques vecteurs pré-entraînés de vecteurs d'incorporation de mots. Sauf si vous avez un motif spécifique pour apprendre vous-même, nous vous recommandons d'utiliser ces vecteurs pré-entraînés.

Recommended Posts

Liste des vecteurs d'incorporation de mots prêts à l'emploi
Liste des modules python
Copie de plusieurs listes
Liste des fonctions d'activation (2020)
Profondeur de la liste imbriquée
Affichage des fractions (liste)
GloVe: Prototype d'incorporation de mots par des vecteurs Gloval pour la représentation de mots
Résumé des opérations de liste Python3
Fonctionnement du filtre (Aucun, liste)
Liste des nœuds dans les diagrammes
Liste des images Docker personnalisées
Initialisation de tableau multidimensionnel de la liste
[Python] Copie d'une liste multidimensionnelle
Liste des styles de codage utiles