So trainieren Sie die LSTM-Schicht des Deep-Network

13

Ich benutze ein LSTM- und Feed-Forward-Netzwerk, um Text zu klassifizieren.

Ich konvertiere den Text in One-Hot-Vektoren und speise jeden in den lstm ein, damit ich ihn als eine einzige Darstellung zusammenfassen kann. Dann füttere ich es dem anderen Netzwerk.

Aber wie trainiere ich das lstm? Ich möchte den Text nur nacheinander klassifizieren - soll ich ihn ohne Training füttern? Ich möchte die Passage nur als einzelnes Element darstellen, das ich in die Eingabeebene des Klassifikators einspeisen kann.

Ich würde mich über einen Rat dazu sehr freuen!

Aktualisieren:

Ich habe also einen lstm und einen Klassifikator. Ich nehme alle Ausgaben des lstm und bündele sie, dann speise ich diesen Durchschnitt in den Klassifikator ein.

Mein Problem ist, dass ich nicht weiß, wie ich den lstm oder den Klassifikator trainieren soll. Ich weiß, was die Eingabe für das lstm sein sollte und was die Ausgabe des Klassifikators für diese Eingabe sein sollte. Da es sich um zwei separate Netzwerke handelt, die nur nacheinander aktiviert werden, muss ich wissen und weiß nicht, wie die ideale Ausgabe für den lstm aussehen soll, die auch die Eingabe für den Klassifizierer sein würde. Gibt es eine Möglichkeit, dies zu tun?

wordSmith
quelle

Antworten:

9

Der beste Ort, um mit LSTMs zu beginnen, ist der Blog-Beitrag von A. Karpathy http://karpathy.github.io/2015/05/21/rnn-effectiveness/ . Wenn Sie Torch7 verwenden (was ich sehr empfehlen würde), ist der Quellcode unter github https://github.com/karpathy/char-rnn verfügbar .

Ich würde auch versuchen, Ihr Modell ein bisschen zu ändern. Ich würde einen 1: 1-Ansatz verwenden, bei dem Sie Wörter über eine Nachschlagetabelle eingeben und am Ende jeder Sequenz ein spezielles Wort hinzufügen, sodass Sie die Klassifizierung nur dann lesen, wenn Sie das Zeichen "Ende der Sequenz" eingeben Ausgabe und Berechnung des Fehlers anhand Ihres Trainingskriteriums. Auf diese Weise trainieren Sie direkt unter Aufsicht.

Ein einfacherer Ansatz wäre jedoch, mithilfe von paragraph2vec ( https://radimrehurek.com/gensim/models/doc2vec.html ) Features für Ihren Eingabetext zu extrahieren und anschließend einen Klassifikator über Ihren Features auszuführen. Die Extraktion von Absatzvektor-Features ist sehr einfach und in Python wäre dies:

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
quelle
Vielen Dank für Ihre Antwort. Ich werde diese prüfen. Haben Sie in Bezug auf das spezifische Problem in meiner Frage einen Rat? Ich habe ihn aktualisiert.
WordSmith
Ich glaube nicht, dass Ihre beschriebene Vorgehensweise zu Ergebnissen führen würde. In was trainierst du gegen den LSTM? Ich bin mir nicht sicher, warum ich in diesem Fall ein LSTM für unbeaufsichtigtes Feature-Learning für einen ganzen Satz verwenden sollte. Haben Sie relevante Literatur zu Ihrer Vorgehensweise, bei der ich Ihnen helfen könnte? Dies könnte Sie auch interessieren arxiv.org/abs/1306.3584 .
Yannis Assael
Ich werde das lstm auf der Grundlage eines Datensatzes früherer Textpassagen und ihrer Klassen trainieren. Ich beabsichtige nicht, unbeaufsichtigtes Lernen anzuwenden. Ich möchte es manuell trainieren, weiß aber nicht wie. Hier ist meine Umsetzung des LSTM und Sichter ohne maschinelles Lernen Bibliothek, die ich sicher wissen: pastebin.com/63Cqrnef die LSTM hat eine Funktion des deepActivate, die die LSTM aktivieren und dann den Klassifikator , wie ich in meinem quesiton erwähnt. Folgendes
wordSmith
Aber als ich versuchte, beide als ein Netzwerk zu aktivieren, wurde ich von jeder der Ausgabeebenen undefiniert. Mehr dazu hier: stats.stackexchange.com/q/159922/81435
wordSmith
1
Vielen Dank! Sie haben viel mehr Hilfe geleistet, als benötigt wurde. Danke, dass Sie alles getan haben.
WordSmith