2015-11-22 6 views
8

Ich bin daran interessiert, Tensorflow Seq2seq Implementierung mit vortrainierten word2vec zu initialisieren.Initialisierung Seq2seq Einbettung mit vortrainierten word2vec

Ich habe den Code gesehen. Es scheint, dass die Einbettung initialisiert wird

with tf.variable_scope(scope or "embedding_attention_decoder"): 
with tf.device("/cpu:0"): 
embedding = tf.get_variable("embedding", [num_symbols, cell.input_size]) 

Wie kann ich dies ändern, um mit vortrainiertem word2vec zu initialisieren?

Antwort

0

Sie können den in tensorflow/models/rnn/translate/data_utils.py vorhandenen Tokanizer ändern, um ein vortrainiertes word2vec-Modell zum Tokenizing zu verwenden. Die Linien 187-190 von data_utils.py:

if tokenizer: 
    words = tokenizer(sentence) 
else: 
    words = basic_tokenizer(sentence) 

Verwendung basic_tokenizer. Sie können eine tokenizer-Methode schreiben, die ein vortrainiertes word2vec-Modell zum Tokenisieren der Sätze verwendet.

7

Ich denke, Sie haben Ihre Antwort in der Mailing-Liste bekommen, aber ich stelle es hier für die Nachwelt.

https://groups.google.com/a/tensorflow.org/forum/#!topic/discuss/bH6S98NpIJE

Sie können es zufällig initialisiert und danach tun: session.run (embedding.assign (my_word2vec_matrix))

Dadurch werden die init-Werte außer Kraft setzen.

Dies scheint für mich zu arbeiten. Ich glaube, trainable=False wird benötigt, um die Werte fest zu halten?

# load word2vec model (say from gensim) 
model = load_model(FILENAME, binary=True) 

# embedding matrix 
X = model.syn0 
print(type(X)) # numpy.ndarray 
print(X.shape) # (vocab_size, embedding_dim) 

# start interactive session 
sess = tf.InteractiveSession() 

# set embeddings 
embeddings = tf.Variable(tf.random_uniform(X.shape, minval=-0.1, maxval=0.1), trainable=False) 

# initialize 
sess.run(tf.initialize_all_variables()) 

# override inits 
sess.run(embeddings.assign(X)) 
+0

Was ist mit dem Index: model.index2word? Wie geht das an Tensorflow? – vgoklani