TensorFlow Einbettungssuche

9

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.

was habe ich 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.

Worüber ich verwirrt bin:

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?

    
VM_AI 18.06.2016, 14:15
quelle

1 Antwort

15

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 :

%Vor%

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.

    
Olivier Moindrot 20.06.2016, 22:45
quelle