2016-07-07 7 views
1

Ich versuche, word2vec für convolution neuronales Netzwerk anzuwenden. Ich bin neu mit Tensorflow. Hier ist mein Code für Pre-Train Layer.Worteinbettung für Convolution Neuronales Netzwerk

W = tf.Variable(tf.constant(0.0, shape=[vocabulary_size, embedding_size]), 
       trainable=False, name="W") 
embedding_placeholder = tf.placeholder(tf.float32, [vocabulary_size, embedding_size]) 
embedding_init = W.assign(embedding_placeholder) 
sess = tf.Session() 
sess.run(embedding_init, feed_dict={embedding_placeholder: final_embeddings}) 

Ich glaube, ich embedding_lookup verwenden sollte, aber nicht sicher, wie es zu benutzen. Ich glaube wirklich, dass jemand einen Rat geben könnte.

Danke

Antwort

1

Sie auf dem richtigen Weg sind. Da embedding_lookup unter der Annahme arbeitet, dass Wörter als Ganzzahl-IDs dargestellt werden, müssen Sie Ihre Eingabevektoren so umwandeln, dass sie damit übereinstimmen. Außerdem müssen Sie sicherstellen, dass Ihre transformierten Wörter korrekt in die Einbettungsmatrix indiziert werden. Was ich getan habe, war, dass ich die Informationen über das aus dem Einbettungsmodell generierte Index-zu-Wort-Mapping verwendet habe (ich habe Gensim zum Trainieren meiner Einbettungen verwendet), um eine Wortindex-Nachschlagetabelle zu erstellen, die ich anschließend zur Transformation meiner Eingabevektoren verwendet habe .

+0

Dank Frobb, ich bin so glücklich, das zu hören. Ich habe versucht, "embedding_lookup" zu verwenden, allerdings habe ich Probleme, Argumente zu übergeben. Ich habe Trainingsdaten, die gekennzeichnet sind, ich habe Word2vec_basic.py verwendet, um meine Daten vorzutrainieren. Ich las auf vielen Webseiten, einige sagten, dass ich Wortvektor dem Wörterbuch zuordnen muss. Gefallen Sie dieses 'embedded_chars = tf.nn.embedding_lookup (W, Wörterbuch)' Aber es gab Fehler, etwas mit der Dimension der Tensor, habe ich versucht Variable 'Wörterbuch' mit 'data' oder 'reverse_dictionary' zu ändern, aber Keine Hilfe. Können Sie mir einen Ratschlag vorschlagen? Danke – ngoduyvu

+0

Das zweite Argument von 'embedding_lookup' soll der Tensor sein, der deine Eingabedaten enthält. Sehen Sie sich den Blogpost an, den @Kashyap bereitgestellt hat, und Sie werden sehen, dass das zweite Argument der Platzhaltertensor für (Batch-) Eingaben ist. Sie müssen nur sicherstellen, dass die Wörter Ihrer Eingabedaten in Ganzzahlen umgewandelt wurden, entsprechend dem Wort-zu-Index-Schema, das ich bereits erwähnt habe. – Frobb

+0

In dem Blog sagte Schriftsteller, dass "Vokabular-Wort-Indizes in niedrig-dimensionale Vektor-Darstellungen". In der "word2vec_basic.py" speichert die Variable "data" Index von distrionary. So mochte ich das: 'embedded_chars = tf.nn.embedding_lookup (W, Daten)' Ich laufe es, und es gab keine Fehler. Denkst du, es ist ein richtiger Weg? Dank – ngoduyvu

2

Tensorflow hat ein Beispiel word2vec-cnn für Textklassifikation mit: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/skflow/text_classification_cnn.py

+0

Danke für Ihre Antwort. ihr Code ist ein kleiner Unterschied. Sie benutzen onehot Vektor, um das Wort zu codieren, nicht wirklich word2vec In dieser Zeile: kann ich es ändern, nehmen Sie meine final_embedded? 'byte_list = tf.reshape (learn.ops.one_hot_matrix (x, 256), [-1, MAX_DOCUMENT_LENGTH, 256, 1])' – ngoduyvu

Verwandte Themen