Was macht die Funktion tf.nn.embedding_lookup?
tf.nn.embedding_lookup(params, ids, partition_strategy='mod', name=None)
Ich kann nicht verstehen, die Pflicht, diese Funktion. Es ist wie eine lookup-Tabelle? Was bedeutet die Rückkehr der Parameter für jeden entsprechenden id (ids)?
Beispielsweise in der skip-gram
Modell, wenn wir die tf.nn.embedding_lookup(embeddings, train_inputs)
dann für jede train_input
findet, entsprechen einbetten?
InformationsquelleAutor der Frage Poorya Pzm | 2016-01-19
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
embedding_lookup
Funktion ruft Zeilen ab, von derparams
tensor. Das Verhalten ist ähnlich wie mit der Indizierung von arrays in numpy. E. g.params
argument kann auch eine Liste von Tensoren in diesem Fall dieids
verteilt werden unter den Tensoren. Zum Beispiel, eine Liste von 3 Tensoren[2, 64]
das Standard-Verhalten ist, dass Sie repräsentierenids
:[0, 3]
[1, 4]
[2, 5]
.partition_strategy
steuert die Art und Weise, wie dieids
verteilt die Liste. Die Partitionierung ist nützlich für größere Probleme, wenn die matrix zu groß zu halten, in einem Stück.InformationsquelleAutor der Antwort Rafał Józefowicz
Ja, diese Funktion ist schwer zu verstehen, bis Sie den Punkt.
In seiner einfachsten form, es ist ähnlich wie
tf.gather
. Es gibt die Elemente vonparams
nach den festgelegten Indizes vonids
.Beispielsweise (vorausgesetzt, Sie sind innerhalb
tf.InteractiveSession()
)zurückkehren würde
[10 20 30 40]
weil das erste element (index 0) von params ist10
das zweite element params (index 1) ist20
usw.Ähnlich,
zurückkehren würde
[20 20 40]
.Aber
embedding_lookup
ist mehr als das. Dieparams
- argument kann eine Liste von Tensoren, sondern als eine einzige tensor ist.In diesem Fall die Indizes angegeben, die in
ids
entsprechen, die Elemente der Tensoren nach einem partition Strategiewo die Standard-partition-Strategie 'mod'.In der 'mod' - Strategie, index 0 entspricht dem ersten element des ersten tensor in der Liste. Index 1 entspricht dem ersten element der zweiten tensor. Index 2 entspricht dem ersten element der Dritten - tensor, und so weiter. Einfach index
i
entspricht das erste element des (i+1) - te tensor , für alle Indizes0..(n-1)
vorausgesetzt, params ist eine Liste vonn
Tensoren.Nun, index
n
nicht entsprechen tensor n+1, da die Listeparams
enthält nurn
Tensoren. Also indexn
entspricht der zweiten element des ersten tensor. Ähnlich, indexn+1
entspricht dem zweiten element des zweiten tensor, etc.So, in den code
index 0 entspricht dem ersten element des ersten Tensors: 1
index 1 entspricht dem ersten element des zweiten Tensors: 10
index 2 entspricht dem zweiten element des ersten Tensors: 2
index 3 entspricht dem zweiten element des zweiten Tensors: 20
So, das Ergebnis wäre:
InformationsquelleAutor der Antwort Asher Stern
Ja, der Zweck
tf.nn.embedding_lookup()
Funktion ist die Ausführung eines lookup in der embedding matrix und wieder die Einbettungen (oder in einfachen Worten, der Vektor-Darstellung) der Wörter.Einer einfachen Einbettung matrix (der Form:
vocabulary_size x embedding_dimension
) würde wie folgt Aussehen. (d.h. jeder Wort wird vertreten durch ein Vektor von zahlen; daher der name word2vec)Embedding Matrix
Aufgeteilt ich die oben genannten embedding matrix geladen und nur die Worte in
vocab
denen unser Vokabular und die entsprechenden Vektoren inemb
array.Einbettung Lookup in TensorFlow
Nun werden wir sehen, wie können wir durchführen Einbettung lookup für einige beliebige Eingangs-Satz.
Beobachten, wie wir uns das Einbettungen von unseren ursprünglichen Einbettung matrix (mit Worten) über die Indizes der Worte in unserem Wortschatz.
In der Regel, wie eine Einbettung lookup wird durchgeführt, indem die erste Schicht (die so genannte Embedding layer), die geht dann diese Einschlüsse zu RNN/LSTM/GRU Ebenen für die weitere Verarbeitung.
Seite Hinweis: in der Regel der Wortschatz wird auch eine spezielle
unk
token. Also, wenn ein token von unserer input-Satz ist nicht in unserem Wortschatz, dann wird der index entsprechendunk
gesucht in der einbettenden matrix.P. S. Beachten Sie, dass
embedding_dimension
ist ein hyperparameter, dass man tune für Ihre Anwendung, sondern auch beliebte Modelle wie Word2Vec und Handschuh verwendet300
dimension Vektor für die Repräsentation jedes Wort.Bonus Lesen word2vec skip-Gramm-Modell
InformationsquelleAutor der Antwort kmario23
Wenn die params-tensor ist im hohen Maße, die ids bezieht sich nur auf top-dimension. Vielleicht ist es offensichtlich für die meisten Menschen, aber ich habe auf ausführen den folgenden code zu verstehen, dass:
Versucht nur die 'div' - Strategie und für ein tensor ist, macht es keinen Unterschied.
Hier ist die Ausgabe:
InformationsquelleAutor der Antwort Yan Zhao
Andere Möglichkeit es zu betrachten ist , davon ausgehen, dass Sie abflachen der Tensoren zu eindimensionalen array, und dann sind Sie nachschlagen
(eg) Tensor0=[1,2,3], Tensor1=[4,5,6], Tensor2=[7,8,9]
Die abgeflacht tensor wie folgt aus
[1,4,7,2,5,8,3,6,9]
Nun, wenn Sie tun, eine Suche [0,3,4,1,7] es wird yeild [1,2,5,4,6]
(i,e), falls lookup-Wert ist 7, zum Beispiel , und wir haben 3 Tensoren (oder einen tensor mit 3 Zeilen), dann,
7 /3 : (zur Erinnerung 1, der Quotient ist 2), So, 2. element von Tensor1 angezeigt werden, die 6
InformationsquelleAutor der Antwort Shanmugam Ramasamy
Da war ich auch fasziniert von dieser Funktion, ich gebe meine zwei Cent.
Die Art und Weise sehe ich es in der 2D-Fall ist nur als eine matrix-Multiplikation (es ist einfach zu verallgemeinern und auf anderen Dimensionen).
Betrachten ein Vokabular mit N Symbolen.
Dann können Sie ein symbol x als einen Vektor der Dimensionen Nx1, one-hot codiert ist.
Aber Sie wollen eine Darstellung von diesem symbol nicht als ein Vektor, der Nx1, aber, wie man mit den Abmessungen Mx1, genannt y.
So, zu transformieren x in ydie Sie verwenden können, und die Einbettung matrix Emit den Abmessungen MxN:
y = E x.
Dies ist im wesentlichen das, was tf.nn.embedding_lookup(params, ids, ...) tut, mit der nuance, dass ids sind nur eine Zahl für die position der 1 in der one-hot codierten Vektor x.
InformationsquelleAutor der Antwort joaoaccarvalho
Hier ist ein Bild, darstellend die Einbettung von lookup.
Prägnant ist, bekommt es die entsprechenden Zeilen des embedding layer, spezifiziert durch eine Liste von IDs und bieten, wie ein tensor. Es wird erreicht durch den folgenden Prozess.
lookup_ids = tf.placeholder([10])
embeddings = tf.Variable([100,10],...)
embed_lookup = tf.embedding_lookup(embeddings, lookup_ids)
lookup = session.run(embed_lookup, feed_dict={lookup_ids:[95,4,14]})
InformationsquelleAutor der Antwort thushv89
Hinzufügen zu Asher Stern, die Antwort,
params
istinterpretiert als Partitionierung einer großen embedding tensor. Es kann ein einzelner tensor repräsentiert die vollständige Einbettung tensor,
oder eine Liste von X-Tensoren alle gleiche Form, außer der ersten dimension,
Vertretung sharded embedding Tensoren.
Die Funktion
tf.nn.embedding_lookup
geschrieben ist, in Anbetracht der Tatsache, dass die Einbettung (params) wird groß sein. Deshalb brauchen wirpartition_strategy
.InformationsquelleAutor der Antwort Aaron