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.

¿Existe alguna forma de ampliar el tamaño del vocabulario de los embeddings pre-entrenados (volver a entrenar los embeddings de palabras en un conjunto de datos personalizado sobre los existentes)?

TL;DR: ¿Existe alguna forma en Gensim de utilizar el Embedding existente y ampliar su vocabulario + aprendizaje al entrenarlo nuevamente en un conjunto de datos personalizado?

Uno puede simplemente entrenar su propio Embedding en Gensim de la siguiente manera:

from gensim.models import FastText # o cualquier otro modelo
corpus = your<em>custom</em>text_corpus</p>

<p>model = FastText(vector<em>size=4, window=3, min</em>count=1)  # instanciar
model.build<em>vocab(corpus)
model.train(corpus, total</em>examples=len(common_texts), epochs=10)

En segundo lugar, puedes cargar los Embeddings en Keras / Tensorflow / PyTorch y configurar trainable = True de la siguiente manera:
layers.Embedding(vocab_size, embed_dim, weights=[embedding_matrix], trainable = True) lo cual puede ayudarte a actualizar tu contexto de Embedding más rápidamente y tal vez de manera más utilizable.

En tercer lugar, puedes utilizar Retrofitting para ampliar el conocimiento existente pero no puedes ampliar el vocabulario en ese caso.

Tengo un conjunto de datos de entrenamiento etiquetado de ciencia / PCMB / STEM) con más de 100000 instancias para una tarea de clasificación. PERO también tengo más de 1.5 millones de datos no etiquetados que pueden ayudarme a entrenar mi corpus desde cero para crear un nuevo Glove / Word2Vec desde cero.

Lo que quiero saber es:

¿Existe alguna forma de utilizar el Embedding entrenado existente y luego, utilizando eso como base, agregar algún vocabulario? Para que cuando entrene mis datos de 100000 instancias, sea relativamente fácil y se base en el Aprendizaje Anterior también, pero con un poco de cambio en mi conjunto de datos?

Aquí se presenta una especie de idea. ¿Alguien puede confirmar si se puede usar?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible utilizar el Embedding entrenado existente en Gensim y agregar vocabulario nuevo a él. Una forma de hacerlo es cargar el modelo de embedding preentrenado y agregarle el vocabulario del nuevo corpus de la siguiente manera:

    from gensim.models import KeyedVectors
    
    # Cargar el modelo preentrenado
    modelo_preentrenado = KeyedVectors.load_word2vec_format('embedding_preentrenado.bin', binary=True)
    
    # Cargar el nuevo corpus para entrenar
    nuevo_corpus = tu_nuevo_corpus
    
    # Actualizar el vocabulario
    modelo_preentrenado.build_vocab(nuevo_corpus, update=True)
    
    # Entrenar el modelo
    modelo_preentrenado.train(nuevo_corpus, total_examples=modelo_preentrenado.corpus_count, epochs=10)
    

    De esta manera, el Embedding existente se actualizará con el nuevo vocabulario y se entrenará con el nuevo corpus. El parámetro update en el método build_vocab indica al modelo que agregue nuevo vocabulario en lugar de reemplazar el existente.

    Sin embargo, se recomienda entrenar el modelo de Embedding desde cero si tienes una gran cantidad de datos nuevos, como tu conjunto de datos de 1.5 millones sin etiquetar, para asegurarte de que el modelo capture la nueva información de manera efectiva. Esto puede llevar más tiempo, pero probablemente resulte en un Embedding más preciso y útil.

    La idea mencionada en el enlace proporcionado es similar al enfoque mencionado anteriormente y se puede utilizar, pero es importante tener en cuenta las limitaciones y posibles compensaciones.

Comments are closed.