【问题标题】:initialising Seq2seq embedding with pretrained word2vec使用预训练的 word2vec 初始化 Seq2seq 嵌入
【发布时间】:2015-11-22 05:31:59
【问题描述】:

我有兴趣使用预训练的 word2vec 初始化 tensorflow seq2seq 实现。

我看过代码。似乎嵌入已初始化

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

如何将其更改为使用预训练的 word2vec 进行初始化??

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    我想你已经在邮件列表中得到了你的答案,但我把它放在这里是为了后代。

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

    您可以随机初始化它,然后执行: session.run(embedding.assign(my_word2vec_matrix))

    这将覆盖初始化值。

    这似乎对我有用。我相信需要trainable=False 来保持值不变?

    # 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))
    

    【讨论】:

    • 索引如何:model.index2word?你如何将它传递给 tensorflow?
    【解决方案2】:

    您可以更改tensorflow/models/rnn/translate/data_utils.py 中的tokanizer,以使用预训练的word2vec 模型进行标记。 data_utils.py 的行187-190

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

    使用basic_tokenizer。您可以编写一个tokenizer 方法,该方法使用预训练的 word2vec 模型对句子进行标记。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-07
      • 2018-01-06
      • 1970-01-01
      • 2016-06-29
      • 2019-05-24
      相关资源
      最近更新 更多