Cómo entrenar la capa LSTM de red profunda

13

Estoy usando una red lstm y feed-forward para clasificar el texto.

Convierto el texto en vectores únicos y los introduzco en el lstm para poder resumirlo como una representación única. Luego lo alimento a la otra red.

¿Pero cómo entreno el lstm? Solo quiero clasificar en secuencia el texto, ¿debería alimentarlo sin entrenamiento? Solo quiero representar el pasaje como un solo elemento que puedo alimentar a la capa de entrada del clasificador.

Agradecería mucho cualquier consejo con esto!

Actualizar:

Entonces tengo un lstm y un clasificador. Tomo todas las salidas del lstm y las agrupo, luego introduzco ese promedio en el clasificador.

Mi problema es que no sé cómo entrenar el lstm o el clasificador. Sé cuál debería ser la entrada para el lstm y cuál debería ser la salida del clasificador para esa entrada. Como son dos redes separadas que se están activando secuencialmente, necesito saber y no sé cuál debería ser la salida ideal para el lstm, que también sería la entrada para el clasificador. ¿Hay alguna forma de hacer esto?

wordSmith
fuente

Respuestas:

9

El mejor lugar para comenzar con los LSTM es la publicación de blog de A. Karpathy http://karpathy.github.io/2015/05/21/rnn-effectiveness/ . Si está utilizando Torch7 (que sugeriría encarecidamente), el código fuente está disponible en github https://github.com/karpathy/char-rnn .

También trataría de alterar un poco tu modelo. Usaría un enfoque de muchos a uno para que ingrese palabras a través de una tabla de búsqueda y agregue una palabra especial al final de cada secuencia, de modo que solo cuando ingrese el signo "final de la secuencia" lea la clasificación salida y calcular el error en función de su criterio de entrenamiento. De esta forma, se entrenaría directamente en un contexto supervisado.

Por otro lado, un enfoque más simple sería usar el párrafo 2vec ( https://radimrehurek.com/gensim/models/doc2vec.html ) para extraer características para su texto de entrada y luego ejecutar un clasificador sobre sus características. La extracción de características de vector de párrafo es muy simple y en Python sería:

class LabeledLineSentence(object):
    def __init__(self, filename):
        self.filename = filename

    def __iter__(self):
        for uid, line in enumerate(open(self.filename)):
            yield LabeledSentence(words=line.split(), labels=['TXT_%s' % uid])

sentences = LabeledLineSentence('your_text.txt')

model = Doc2Vec(alpha=0.025, min_alpha=0.025, size=50, window=5, min_count=5, dm=1, workers=8, sample=1e-5)
model.build_vocab(sentences)

for epoch in range(epochs):
    try:
        model.train(sentences)
    except (KeyboardInterrupt, SystemExit):
        break
Yannis Assael
fuente
Gracias por responder. Los consideraré. ¿Tiene algún consejo sobre el tema específico en mi pregunta? Lo he actualizado.
wordSmith
No creo que su procedimiento descrito produzca ningún resultado. ¿En qué entrenarás contra el LSTM? No estoy seguro de entender por qué usaría un LSTM en este caso para el aprendizaje de funciones sin supervisión para una oración completa. ¿Tiene alguna literatura relevante sobre su enfoque con la que podría ayudarlo? Esto también puede ser de su interés arxiv.org/abs/1306.3584 .
Yannis Assael
Entrenaré el lstm basado en un conjunto de datos de pasajes de texto pasados ​​y sus clases. No tengo la intención de utilizar el aprendizaje no supervisado. Quiero entrenarlo manualmente, pero no sé cómo. Aquí está mi implementación del lstm y el clasificador sin la biblioteca de aprendizaje automático, que sé que funciona: pastebin.com/63Cqrnef el lstm tiene una función de deepActivate que activa el lstm y luego el clasificador como mencioné en mi pregunta. Aquí hay algo como lo que estoy tratando de implementar: deeplearning.net/tutorial/lstm.html
wordSmith
pero cuando intenté activarlos a ambos como una red, obtuve indefiniciones de cada una de las capas de salida. Más sobre eso está aquí: stats.stackexchange.com/q/159922/81435
wordSmith
1
¡Muchas gracias! Usted proporcionó mucha más ayuda de la requerida. Gracias por ir más allá.
wordSmith