¿Qué son las iteraciones de entrenamiento doc2vec?

Soy nuevo en doc2vec. Inicialmente estaba tratando de entender doc2vec y se menciona a continuación mi código que usa Gensim. Como quiero, recibo un modelo entrenado y documentos de vectores para los dos documentos.

Sin embargo, me gustaría saber los beneficios de volver a entrenar el modelo en varias épocas y cómo hacerlo en Gensim. ¿Podemos hacerlo utilizando el parámetro iter o alpha o tenemos que entrenarlo en un for loop separado? Por favor, hágame saber cómo debo cambiar el siguiente código para entrenar el modelo durante 20 épocas.

También me interesa saber que las repeticiones de entrenamiento son necesarias para el modelo word2vec.

 # Import libraries from gensim.models import doc2vec from collections import namedtuple # Load data doc1 = ["This is a sentence", "This is another sentence"] # Transform data docs = [] analyzedDocument = namedtuple('AnalyzedDocument', 'words tags') for i, text in enumerate(doc1): words = text.lower().split() tags = [i] docs.append(analyzedDocument(words, tags)) # Train model model = doc2vec.Doc2Vec(docs, size = 100, window = 300, min_count = 1, workers = 4) # Get the vectors model.docvecs[0] model.docvecs[1] 

Word2Vec y los algoritmos relacionados (como ‘Paragraph Vectors’, también Doc2Vec como Doc2Vec ), suelen realizar varias pasadas de capacitación sobre el cuerpo del texto.

Word2Vec / Doc2Vec permite que el parámetro iter especifique el número de pases, si también está suministrando el corpus en la inicialización del objeto para activar el entrenamiento inmediato. (Su código anterior hace esto al proporcionar docs a la Doc2Vec(docs, ...) del Doc2Vec(docs, ...) ).

Si no se especifica, el valor iterador predeterminado utilizado por gensim es 5, para que coincida con el valor predeterminado utilizado por la versión original de Google word2vec.c. Así que su código anterior ya está utilizando 5 pases de entrenamiento.

Doc2Vec trabajo publicado de Doc2Vec menudo utiliza 10-20 pases. Si quisiera hacer 20 pases en su lugar, podría cambiar su inicialización de Doc2Vec a:

 model = doc2vec.Doc2Vec(docs, iter=20, ...) 

Debido a que Doc2Vec menudo usa tags de identificación únicas para cada documento, más iteraciones pueden ser más importantes, de modo que cada doc-vector aparece para el entrenamiento varias veces durante el curso del entrenamiento, a medida que el modelo mejora gradualmente. Por otro lado, debido a que las palabras en un cuerpo de Word2Vec pueden aparecer en cualquier parte del cuerpo, los vectores asociados de cada palabra obtendrán múltiples ajustes, al principio y al final del proceso, a medida que el modelo mejore, incluso con una sola pasada. (Por lo tanto, con un corpus Word2Vec gigante y variado, se puede pensar que se use menos que el número predeterminado de pases).

No necesita hacer su propio bucle, y la mayoría de los usuarios no deberían hacerlo. Si administra los build_vocab() separados build_vocab() y train() usted mismo, en lugar del paso más fácil de suministrar el cuerpo docs en la llamada de inicialización para activar el entrenamiento inmediato, entonces debe proporcionar un argumento de epochs para train() – y lo hará realice ese número de pases, por lo que solo necesita una llamada para train() .