es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Transferencia de aprendizaje de vectores de palabras

Quiero adaptar vectores de palabras ya existentes (por ejemplo, de Spacy) y volver a entrenarlos en un conjunto de datos específico de un dominio bastante limitado. El problema es que no puedo encontrar una forma de tomar los vectores ya entrenados y adaptarlos a mis nuevos datos.
Hasta ahora he utilizado gensim, pero no parece funcionar como esperaba.

A continuación se muestra el código que utilicé con gensim, pero también agradecería cualquier indicio utilizando algo distinto a gensim.


<h1>ejemplo ilustrativo, estoy utilizando datos de un libro de texto para la aplicación real</h1> <p>training_data = [['Esto', 'es', 'un', 'ejemplo'],['para', 'datos', 'de', 'entrenamiento']] </p> <h1>construir un modelo word2vec con su conjunto de datos</h1> <p>base<em>model = Word2Vec(size=300, min</em>count=1) base<em>model.build</em>vocab(training<em>data) total</em>examples = base<em>model.corpus</em>count</p> <h1>agregar vocabulario y pesos de GloVe</h1> <p>base<em>model.build</em>vocab([list(glove_vectors.vocab.keys())], update=True)</p> <h1>base<em>model.build</em>vocab([list(glove<em>vectors.index</em>to_key)], update=True)</h1> <h1>vectores spacy ya entrenados de dimensión 300</h1> <p>base<em>model.intersect</em>word2vec<em>format('spacy</em>vecs.txt', binary=False, lockf=1.0)</p> <h1>entrenar con sus datos</h1> <p>print("Ejecutando ", base<em>model.epochs, "iteraciones") base</em>model.train(training<em>data, total</em>examples=total<em>examples, epochs=100, compute</em>loss=True, callbacks=[callback()]) base<em>model</em>wv = base_model.wv</p> <p>base<em>model.wv.save</em>word2vec<em>format('vectores</em>reentrenados.txt', binary=False)

Comprobar los vectores de palabras posteriormente no produce un resultado coherente, así que algo debe estar saliendo mal aquí.

Esto se realiza en Python 2.7, ya que la versión más reciente de gensim no parece admitir esta función.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Adaptando vectores de palabras existentes para datos específicos del dominio

    Si tienes un conjunto de vectores de palabras preentrenados, como los proporcionados por spaCy, y deseas volver a entrenarlos en datos específicos del dominio, puedes utilizar bibliotecas como gensim para hacerlo. Sin embargo, algunos usuarios han reportado problemas con este método que no producen resultados significativos.

    Un enfoque para adaptar vectores de palabras preentrenados es intersectarlos con tus datos específicos del dominio y luego ajustarlos mediante entrenamiento. Aquí tienes un ejemplo de cómo hacer esto utilizando gensim:

    from gensim.models import KeyedVectors, Word2Vec
    
    # cargar vectores de palabras preentrenados
    vectores_preentrenados = KeyedVectors.load_word2vec_format('ruta/a/los/vectores/de/palabras/preentrenados', binary=True)
    
    # cargar datos de entrenamiento específicos del dominio
    datos_entrenamiento = [['este', 'es', 'un', 'ejemplo'], ['para', 'nuevos', 'datos', 'de', 'entrenamiento']]
    
    # construir modelo word2vec
    modelo = Word2Vec(size=300, min_count=1)
    modelo.build_vocab(datos_entrenamiento)
    
    # intersectar con vectores de palabras preentrenados
    modelo.intersect_word2vec_format('ruta/a/los/vectores/de/palabras/preentrenados', binary=True, lockf=1.0)
    
    # ajustar en datos específicos del dominio
    modelo.train(datos_entrenamiento, total_examples=modelo.corpus_count, epochs=100)
    
    # guardar vectores reentrenados
    modelo.wv.save_word2vec_format('ruta/a/los/vectores/de/palabras/reentrenados', binary=True)
    

    Ten en cuenta que el método intersect_word2vec_format se utiliza para intersectar los vectores preentrenados con los datos específicos del dominio. El parámetro lockf se establece en 1.0 para evitar cambiar los vectores preentrenados durante el entrenamiento. Finalmente, después de ajustar el modelo en los datos específicos del dominio, puedes guardar los vectores reentrenados para su uso posterior.

    Si aún encuentras problemas al adaptar vectores de palabras preentrenados utilizando gensim, es posible que desees considerar otras bibliotecas para esta tarea, como PyTorch o TensorFlow. Alternativamente, podrías entrenar tus propios vectores de palabras desde cero utilizando tus datos específicos del dominio.

Comments are closed.