2016-06-18 13 views
1

Ich möchte ein LSTM mit einem speziellen Wort Einbettung, aber ich habe einige Fragen, wie dies funktionieren würde.Tensorflow Sequenz-zu-Sequenz LSTM innerhalb LSTM (verschachtelt)

Wie Sie vielleicht wissen, arbeiten einige LSTMs auf Zeichen, also sind Zeichen in, Zeichen heraus. Ich möchte das Gleiche tun, mit einer Abstraktion über Wörter, um eine robuste Einbettung mit einem verschachtelten LSTM zu lernen, um gegen leichte Zeichenfehler zu resistent zu sein.

So ein winziges LSTM würde auf jeden Buchstaben eines Wortes entrollen, dann würde dies eine Einbettung des Wortes erstellen. Jedes eingebettete Wort in einem Satz würde dann als Eingabe einem LSTM auf höherer Ebene zugeführt werden, das zu jedem Zeitschritt auf einer Wortebene und nicht auf Zeichen arbeiten würde.

Fragen: - ich kann nicht mehr die wissenschaftliche Arbeit finden, die darüber gesprochen. Wenn Sie wissen, wovon ich rede, würde ich gerne einen Namen dafür machen, was ich tun möchte. - Gibt es dafür bereits einen TensorFlow Open-Source-Code? - Sonst, haben Sie eine Idee, wie Sie das umsetzen? Die Ausgabe des neuronalen Netzwerks ist möglicherweise schwieriger zu handhaben, da wir die Worteinbettung für das Training von Zeichen mit einer Ausgabe verschachtelten LSTM rückgängig machen müssten. Das Ganze sollte einmal als eine Einheit trainiert werden (Workflow: LSTM-Zeichen, LSTM-Zeichen, LSTM-Zeichen).

Ich denke, dass rnn_cell.MultiRNNCell LSTMs auf aufeinander stapeln würde, anstatt sie zu nisten.

Else würde Ihnen empfehlen, die Einbettungen Ausbildung (in und out) als Autoencoder außerhalb des Haupt LSTM?

Antwort

3

Ich kenne das Papier, auf das Sie sich beziehen, nicht.

Aber hier ist eine Idee, wie ich so etwas wie dies in TensorFlow umsetzen würde:

Sie können 2 LSTMCells erstellen. Wenn Sie eine variable Anzahl von Zeichen pro Wort und eine variable Anzahl von Wörtern pro Sequenz unterstützen möchten, können Sie den Code für dynamic_rnn (siehe rnn.py) anstelle einer einzelnen while-Schleife kopieren und anpassen eine verschachtelte While-Schleife. Die innere arbeitet mit Zeichen, die die erste LSTMCell aufrufen und den Zustand nach jedem Wort zurücksetzen. Der äußere arbeitet mit eingebetteten Wörtern (der Ausgang von der inneren Schleife) und ruft die zweite LSTMCell auf.

Normalerweise hängt es davon ab, wie viele Daten Sie zur Verfügung haben, unabhängig davon, ob Sie Einbettungen separat trainieren sollten oder nicht. Wenn Sie nicht viel Datentraining haben, kann eine separate Einbettung (auf einem möglicherweise anderen Datensatz) sinnvoll sein. Wenn Sie es sich leisten können und Ihr Modell gut trainiert, dann kann das Einbetten der Einbettung in Ihr gesamtes Netzwerk Vorteile bringen, da die Bedeutung der Zeichen aufgabenspezifisch sein kann.

Aber ich frage mich, wie dieser Ansatz mit der Rechtschreibkorrektur zuerst vergleicht und dann eine Standard-Worteinbettung verwendet. Dann können Sie einige der standard embedding tools und eine einzelne LSTMCell mit dem Dynamic_rnn verwenden.