¿Podemos aprovechar el uso del aprendizaje de transferencia mientras entrenamos modelos de word2vec?

13

Estoy buscando encontrar pesos pre-entrenados de modelos ya entrenados como datos de Google News, etc. Me resultó difícil entrenar un nuevo modelo con suficiente cantidad (10 GB, etc.) de datos para mí. Por lo tanto, quiero aprovechar el aprendizaje de transferencia en el que podría obtener pesos de capa previamente entrenados y volver a entrenar esos pesos en las palabras específicas de mi dominio. Entonces, definitivamente tomará relativamente menos tiempo en el entrenamiento. Cualquier tipo de ayuda será muy apreciada. Gracias por adelantado :)

Nomiluks
fuente

Respuestas:

10

Sí, puede beneficiarse de modelos pre-entrenados. El más famoso es el modelo entrenado GoogleNewsData que puedes encontrar aquí.

Vectores pre-entrenados de palabras y frases https://drive.google.com/file/d/0B7XkCwpI5KDYNlNUTTlSS21pQmM/edit?usp=sharing

Luego puede cargar los vectores en formato binario en su modelo usando gensim como se muestra a continuación.

>>> 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

Aquí hay un modelo prefabricado diferente para Wikipedia en inglés:

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

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

Usar un modelo preconstruido

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')

También puede usar Stanford NLP Glove

Aquí hay una gran compilación de modelos word2vec previamente entrenados.

Algunos modelos adicionales pre-entrenados:

Más información sobre gensim y código aquí: https://radimrehurek.com/gensim/models/word2vec.html

Foro de Quora con preguntas similares

Gurú
fuente
2
Bien, esa es una gran pieza de información, buen trabajo. Pero, ¿puedo usar pesos de capa de modelos previamente entrenados para inicializar un nuevo modelo y luego ajustar ese modelo con mis oraciones?
Nomiluks
@Nomi Sí. De [documentación de gensim] ( radimrehurek.com/gensim/models/word2vec.html ), una vez que cargue el modelo,model = Word2Vec.load(fname) # you can continue training with the loaded model!
Guru
1
El enlace de documentación anterior menciona: "NOTA: Es imposible continuar entrenando los vectores cargados desde el formato C porque los pesos ocultos, la frecuencia de vocabulario y el árbol binario faltan".
pionero
3

Las representaciones distribuidas (Guante) basadas en la capacitación en un gran corpus están disponibles directamente en el grupo de Stanford NLP. Puede usar esas incrustaciones de palabras directamente en su aplicación (en lugar de usar 1 vectores codificados en caliente y luego entrenar a la red para obtener las incrustaciones). Si su tarea no es demasiado especializada, comenzar con este conjunto de incrustaciones funcionará bien en la práctica.

m×VVm

wabbit
fuente
Pero, quiero inicializar mi nuevo modelo de word2vec con pesos de modelo previamente entrenados. ¿Es posible utilizar pesos de capa de modelo ya entrenados para inicializar un nuevo modelo? Después de la inicialización, quiero entrenar ese modelo con nuevas oraciones. ¿Es posible?
Nomiluks
Sí tu puedes. Sin embargo, no creo que la matriz de peso esté disponible públicamente
wabbit
Sí, ¿verdad ...? Si entrenamos un modelo nosotros mismos e intentamos acceder al acceso a los pesos del modelo entrenado usando la biblioteca Gensim. ¿Es posible
Nomiluks
No estoy seguro sobre gensim sino porque es un parámetro para optimizar la mayoría del software debe permitir que
WabbIT
@HrishikeshGanu ¿Sigue funcionando este enlace? github.com/idio/wiki2vec/raw/master/torrents/… Fuente: github.com/idio/wiki2vec
Anish
1

Eche un vistazo a este documento [PDF] . El enfoque principal es sobre la tarea NER, pero la idea es la misma: tomar vectores word2vec previamente entrenados y adaptarlos para una aplicación específica.

Muchas aplicaciones comunes basadas en redes neuronales para PNL frecuentemente comienzan con vectores pre-entrenados. Por ejemplo, un documento muy reciente [PDF] (tareas de etiquetado NER y POS) hace exactamente esto.

Vladislavs Dovgalecs
fuente
-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
fuente