Come addestrare il livello LSTM della rete profonda


13

Sto usando una rete lstm e feed-forward per classificare il testo.

Converto il testo in vettori one-hot e inserisco ciascuno in lstm in modo da poterlo riassumere in un'unica rappresentazione. Quindi lo invio all'altra rete.

Ma come posso addestrare lstm? Voglio solo classificare in sequenza il testo: dovrei dargli da mangiare senza allenamento? Voglio solo rappresentare il passaggio come un singolo elemento che posso alimentare nel livello di input del classificatore.

Gradirei molto qualsiasi consiglio con questo!

Aggiornare:

Quindi ho un lstm e un classificatore. Prendo tutti gli output di lstm e li raggruppo in modo medio, quindi inserisco quella media nel classificatore.

Il mio problema è che non so come addestrare lstm o il classificatore. So quale dovrebbe essere l'input per lstm e quale dovrebbe essere l'output del classificatore per quell'input. Dato che sono due reti separate che vengono appena attivate in sequenza, ho bisogno di sapere e non so quale dovrebbe essere l'output ideale per lstm, che sarebbe anche l'input per il classificatore. C'è un modo per fare questo?

Risposte:


9

Il posto migliore per iniziare con gli LSTM è il post sul blog di A. Karpathy http://karpathy.github.io/2015/05/21/rnn-effectiveness/ . Se stai usando Torch7 (che consiglio vivamente) il codice sorgente è disponibile su github https://github.com/karpathy/char-rnn .

Vorrei anche provare a modificare un po 'il tuo modello. Vorrei utilizzare un approccio molti-a-uno in modo da inserire le parole attraverso una tabella di ricerca e aggiungere una parola speciale alla fine di ogni sequenza, in modo che solo quando si inserisce il segno "fine della sequenza" leggerai la classificazione generare e calcolare l'errore in base al criterio di allenamento. In questo modo ti alleneresti direttamente in un contesto controllato.

D'altra parte, un approccio più semplice sarebbe quello di utilizzare paragraph2vec ( https://radimrehurek.com/gensim/models/doc2vec.html ) per estrarre funzionalità per il testo di input e quindi eseguire un classificatore sopra le funzionalità. L'estrazione di funzionalità vettoriali di paragrafo è molto semplice e in Python sarebbe:

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

Grazie per avermi risposto. Prenderò in considerazione quelli. Hai qualche consiglio riguardo al problema specifico nella mia domanda: l'ho aggiornato.
wordSmith

Non credo che la tua procedura descritta avrebbe prodotto alcun risultato. In che cosa ti allenerai contro l'LSTM? Non sono sicuro di capire perché in questo caso utilizzerebbe un LSTM per l'apprendimento delle funzioni senza supervisione per un'intera frase. Hai qualche documentazione pertinente sul tuo approccio con cui potrei aiutarti? Questo potrebbe essere di tuo interesse anche arxiv.org/abs/1306.3584 .
Yannis Assael,

Formerò lstm sulla base di una serie di dati di passaggi passati di testo e delle loro classi. Non ho intenzione di utilizzare l'apprendimento senza supervisione. Voglio addestrarlo manualmente, ma non so come. Ecco la mia implementazione di lstm e classificatore senza la libreria di apprendimento automatico, che conosco funziona: pastebin.com/63Cqrnef lstm ha una funzione di deepActivate che attiva lstm e quindi il classificatore come ho già detto nel mio quesiton. Ecco qualcosa come quello che sto cercando di implementare: deeplearning.net/tutorial/lstm.html
wordSmith

ma quando ho provato ad attivarli entrambi come un'unica rete, non sono stato definito da ciascuno dei livelli di output. Maggiori informazioni qui: stats.stackexchange.com/q/159922/81435
wordSmith

1
Grazie mille! Hai fornito molto più aiuto del necessario. Grazie per essere andato ben oltre.
wordSmith
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.