Ich versuche zu lernen, wie man RNN für Spracherkennung mit TensorFlow baut. Am Anfang wollte ich einige Beispielmodelle ausprobieren, die auf der TensorFlow-Seite TF-RNN
Wie bereits erwähnt, hatte ich mir etwas Zeit genommen, um zu verstehen, wie Wort-IDs in eine dichte Repräsentation (Vektorrepräsentation) eingebettet werden, indem die Basisversion des word2vec-Modellcodes durcharbeitet wird. Ich hatte ein Verständnis dafür, was tf.nn.embedding_lookup
tatsächlich tut, bis ich tatsächlich die gleiche Funktion wie in einem zweidimensionalen Array in TF-RNN ptb_word_lm.py
, wenn es keinen Sinn mehr macht.
tf.nn.embedding_lookup
getan: Bei einem 2-d-Array params
und einem 1-d-Array ids
ruft die Funktion tf.nn.embedding_lookup
Zeilen von params ab, die den in ids
angegebenen Indizes entsprechen. Dies gilt für die Dimension output it kommt zurück.
Wenn es mit denselben Parametern und dem 2-d-Array ids
versucht wird, gibt tf.nn.embedding_lookup
das 3-d-Array anstelle von 2-d zurück, was ich nicht verstehe.
Ich habe das Handbuch nach Einbettung nachschlagen gesucht, aber ich finde es immer noch schwierig zu verstehen, wie die Partitionierung funktioniert und welches Ergebnis zurückgegeben wird. Ich habe vor kurzem ein einfaches Beispiel mit tf.nn.embedding_lookup
versucht und es scheint, dass es jedes Mal unterschiedliche Werte zurückgibt. Liegt dieses Verhalten an der Zufälligkeit der Partitionierung?
Bitte helfen Sie mir zu verstehen, wie tf.nn.embedding_lookup
funktioniert, und warum wird in word2vec_basic.py
und ptb_word_lm.py
verwendet, d. h. was ist der Zweck, sie sogar zu verwenden?
Es gibt bereits eine Antwort darauf, was tf.nn.embedding_lookup
hier
Wenn es mit denselben Parametern und 2D-Array-IDs versucht wird, gibt tf.nn.embedding_lookup das 3-d-Array statt 2-d zurück, was ich nicht verstehe.
Wenn Sie eine 1-D-Liste der IDs [0, 1]
hatten, würde die Funktion eine Liste der Einbettungen ausgeben [embedding_0, embedding_1]
, wobei embedding_0
ein Array mit der Form embedding_size
ist. Zum Beispiel könnte die Liste von IDs ein Stapel von Wörtern sein.
Nun haben Sie eine Matrix mit IDs oder eine Liste von IDs. Zum Beispiel haben Sie jetzt einen Stapel von Sätzen , d. H. Einen Stapel von Wortlisten, d. H. Eine Liste von Wortlisten.
Wenn Ihre Satzliste lautet: [[0, 1], [0, 3]]
(Satz 1 ist [0, 1]
, Satz 2 ist [0, 3]
) berechnet die Funktion eine Matrix von Einbettungen, die die Form [2, 2, embedding_size]
haben und wie folgt aussehen :
Was das Argument partition_strategy
betrifft, müssen Sie sich nicht darum kümmern. Im Grunde erlaubt es Ihnen, eine Liste von Einbettungsmatrizen als params
anstelle von 1 Matrix anzugeben, wenn Sie Einschränkungen bei der Berechnung haben.
Sie können also Ihre Einbettungsmatrix der Form [1000, embedding_size]
in zehn Matrizen der Form [100, embedding_size]
aufteilen und diese Liste der Variablen als params
übergeben. Das Argument partition_strategy
behandelt die Verteilung des Vokabulars (die 1000 Wörter) unter den 10 Matrizen.
Tags und Links tensorflow word2vec recurrent-neural-network language-model