2015-11-22 3 views
8

Sono interessato all'inizializzazione dell'implementazione di tensorflow seq2seq con word2vec preliminare.inizializzazione Seq2seq incorporamento con word2vec preassegnato

Ho visto il codice. Sembra che l'integrazione sia inizializzata

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

come si modifica questo in modo da inizializzare con parola2vec preliminare ??

risposta

0

È possibile modificare il tokanizer presente in tensorflow/models/rnn/translate/data_utils.py per utilizzare un modello word2vec pre-formato per la tokenizzazione. Le linee di 187-190data_utils.py:

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

uso basic_tokenizer. È possibile scrivere un metodo tokenizer che utilizza un modello word2vec pre-addestrato per la tokenizzazione delle frasi.

7

Penso che tu abbia ottenuto la tua risposta nella mailing list ma la sto mettendo qui per i posteri.

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

È possibile inizializzare a caso e poi fare: session.run (embedding.assign (my_word2vec_matrix))

Questo sovrascriverà i valori di inizializzazione.

Questo sembra funzionare per me. Credo che trainable=False sia necessario per mantenere i valori corretti?

# 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

l'indice: model.index2word? come lo passi a tensorflow? – vgoklani