Pouvons-nous tirer profit de l'utilisation de l'apprentissage par transfert tout en formant des modèles word2vec?

13

Je cherche à trouver un poids pré-formé de modèles déjà formés comme les données de Google Actualités, etc. J'ai eu du mal à former un nouveau modèle avec suffisamment de données (10 Go, etc.) pour moi. Donc, je veux profiter de l'apprentissage par transfert dans lequel je serais en mesure d'obtenir des poids de couche pré-formés et de recycler ces poids sur des mots spécifiques à mon domaine. Donc, cela prendra certainement moins de temps à l'entraînement. Toute aide sera appréciée. Merci d'avance :)

Nomiluks
la source

Réponses:

10

Oui, vous pouvez bénéficier de modèles pré-formés. Le plus célèbre est le modèle formé par GoogleNewsData que vous pouvez trouver ici.

Vecteurs de mots et de phrases pré-formés https://drive.google.com/file/d/0B7XkCwpI5KDYNlNUTTlSS21pQmM/edit?usp=sharing

Vous pouvez ensuite charger les vecteurs au format binaire dans votre modèle en utilisant Gensim comme indiqué ci-dessous.

>>> model = Word2Vec.load_word2vec_format('/tmp/vectors.txt', binary=False)  # C text format
>>> model = Word2Vec.load_word2vec_format('/tmp/vectors.bin', binary=True)  # C binary format

Voici un modèle pré-construit différent pour Wikipedia anglais:

https://github.com/idio/wiki2vec/raw/master/torrents/enwiki-gensim-word2vec-1000-nostem-10cbow.torrent

Source: https://github.com/idio/wiki2vec/

Utilisation d'un modèle préconstruit

Get python 2.7
Install gensim: pip install gensim
uncompress downloaded model: tar -xvf model.tar.gz
Load model in gensim:
from gensim.models import Word2Vec
model = Word2Vec.load("path/to/word2vec/en.model")
model.similarity('woman', 'man')

Vous pouvez également utiliser Stanford NLP Glove

Voici une excellente compilation de modèles word2vec pré-formés.

Quelques modèles supplémentaires pré-formés:

Plus d'informations sur gensim et le code ici: https://radimrehurek.com/gensim/models/word2vec.html

Forum de Quora avec des questions similaires

Gourou
la source
2
D'accord, c'est une excellente information, un bon travail. Mais, puis-je utiliser des poids de couche de modèles pré-formés pour initialiser un nouveau modèle et ensuite affiner ce modèle avec mes phrases?
Nomiluks
@Nomi Oui. Depuis la [documentation gensim] ( radimrehurek.com/gensim/models/word2vec.html ), une fois le modèle chargé,model = Word2Vec.load(fname) # you can continue training with the loaded model!
Guru
1
Le lien de documentation ci-dessus mentionne: "REMARQUE: Il est impossible de continuer à entraîner les vecteurs chargés à partir du format C car les poids masqués, la fréquence du vocabulaire et l'arborescence binaire sont manquants."
pionnier
3

Les représentations distribuées (Glove) basées sur une formation sur un grand corpus sont directement disponibles auprès du groupe Stanford NLP. Vous pouvez utiliser ces incorporations de mots directement dans votre application (au lieu d'utiliser 1 vecteurs encodés à chaud, puis de former le réseau pour obtenir les incorporations). Si votre tâche n'est pas trop spécialisée, commencer avec cet ensemble d'implémentations fonctionnera bien dans la pratique.

m×VVm

wabbit
la source
Mais, je veux initialiser mon nouveau modèle word2vec avec des poids de modèle pré-formés. Est-il possible d'utiliser des poids de couche de modèle pré-formés pour initialiser un nouveau modèle. Après l'initialisation, je veux former ce modèle avec de nouvelles phrases. c'est possible?
Nomiluks
Oui, vous pouvez. Cependant, je ne pense pas que la matrice de poids soit disponible publiquement
wabbit
Ouais, c'est ça ...? Si nous formons un modèle nous-mêmes et essayons d'accéder aux poids des modèles formés en utilisant la bibliothèque Gensim. Est-il possible
Nomiluks
Je ne suis pas sûr de gensim mais parce que c'est un paramètre à optimiser, la plupart des logiciels devraient le permettre
wabbit
@HrishikeshGanu Ce lien fonctionne-t-il toujours? github.com/idio/wiki2vec/raw/master/torrents/… Source: github.com/idio/wiki2vec
Anish
1

Jetez un œil à cet article [PDF] . L'objectif principal est la tâche NER, mais l'idée est la même - prendre des vecteurs word2vec pré-formés et les adapter à une application spécifique.

De nombreuses applications communes basées sur un réseau de neurones pour la PNL commencent souvent par des vecteurs pré-formés. Par exemple, un article très récent [PDF] (tâches de marquage NER et POS) fait exactement cela.

Vladislavs Dovgalecs
la source
-1
from gensim.models import Word2Vec 
# Word2Vec is full model which is trainable but takes larger memory

from gensim.models import KeyedVectors  
# KeyedVectors is reduced vector model which is NOT trainable but takes less memory

model = KeyedVectors.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True) #load pretrained google w2v 

sen1 = 'w1 w2 w3'    
sen2 = 'word1 word2 word3'    
sentences = [[word for word in sen1.split()],[word for word in sen2.split()]]    
total_examples = model_2.corpus_count    

model_2 = Word2Vec(size=300, min_count=1) #initiate a full model    
model_2.build_vocab(sentences) #add words in training dataset

#load words from pretrained google dataset    
model_2.build_vocab([list(model.vocab.keys())], update=True)    
model_2.intersect_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True, lockf=1.0)

#retrain pretrained w2v from new dataset    
model_2.train(sentences, total_examples=total_examples, epochs=model_2.iter)
Alan Yang
la source