Python 如何在Tensorflow中运行自定义seq2seq学习(使用预先计算的单词嵌入)编码器-解码器?

Python 如何在Tensorflow中运行自定义seq2seq学习(使用预先计算的单词嵌入)编码器-解码器?,python,tensorflow,deep-learning,lstm,language-model,Python,Tensorflow,Deep Learning,Lstm,Language Model,我需要在Tensorflow中运行一个编码器-解码器模型。我看到,使用可用的APIbasic\u rnn\u seq2seq(编码器输入数据、解码器输入数据、lstm单元)等,可以创建编码器-解码器系统 我们如何在这样的模型中输入诸如word2vec之类的嵌入?我是 注意,我们可以根据API进行嵌入查找 encoder\u input\u data是批量大小x的2D张量列表 输入大小。在此设置中,如何使用各自的单词嵌入来表示每个单词?甚至embedding\u rnn\u seq2seq在内部提

我需要在Tensorflow中运行一个编码器-解码器模型。我看到,使用可用的API
basic\u rnn\u seq2seq(编码器输入数据、解码器输入数据、lstm单元)
等,可以创建编码器-解码器系统

  • 我们如何在这样的模型中输入诸如word2vec之类的嵌入?我是 注意,我们可以根据API进行嵌入查找
    encoder\u input\u data
    是批量大小x的2D张量列表 输入大小。在此设置中,如何使用各自的单词嵌入来表示每个单词?甚至
    embedding\u rnn\u seq2seq
    在内部提取嵌入。如何将预先计算好的单词嵌入作为输入
  • 我们如何通过API获得成本/困惑
  • 在测试实例中,我们可能不知道相应的解码器输入。如何处理这种情况
  • 第一个问题: 也许不是最好的方法,但我所做的是,在构建模型之后,在培训开始之前:

    for v in tf.trainable_variables():
      if v.name == 'embedding_rnn_seq2seq/RNN/EmbeddingWrapper/embedding:0':
        assign_op = v.assign(my_word2vec_matrix)
        session.run(assign_op)  # or `assign_op.op.run()`
    
    my_word2vec_矩阵是形状词汇大小x嵌入大小的矩阵,并填充了我的预计算嵌入向量。 如果您认为您的嵌入非常好,请使用这个(或类似的东西)。否则,随着时间的推移,seq2seq模型将产生自己经过训练的嵌入

    第二个问题: 在seq2seq.py中,您可以在python/ops/seq2seq.py中找到使用_bucket()调用模型_。从那里,损失被退回

    第三个问题: 在测试用例中,每个解码器输入是之前时间步的解码器输出(即,第一个解码器输入是一个特殊的GO符号,第二个解码器输入是第一个时间步的解码器输出,第三个解码器输入是第二个时间步的解码器输出,依此类推)

    第一个问题: 也许不是最好的方法,但我所做的是,在构建模型之后,在培训开始之前:

    for v in tf.trainable_variables():
      if v.name == 'embedding_rnn_seq2seq/RNN/EmbeddingWrapper/embedding:0':
        assign_op = v.assign(my_word2vec_matrix)
        session.run(assign_op)  # or `assign_op.op.run()`
    
    my_word2vec_矩阵是形状词汇大小x嵌入大小的矩阵,并填充了我的预计算嵌入向量。 如果您认为您的嵌入非常好,请使用这个(或类似的东西)。否则,随着时间的推移,seq2seq模型将产生自己经过训练的嵌入

    第二个问题: 在seq2seq.py中,您可以在python/ops/seq2seq.py中找到使用_bucket()调用模型_。从那里,损失被退回

    第三个问题:
    在测试用例中,每个解码器输入是之前时间步的解码器输出(即,第一个解码器输入是一个特殊的GO符号,第二个解码器输入是第一个时间步的解码器输出,第三个解码器输入是第二个时间步的解码器输出,依此类推)

    好的,谢谢。那么,我们在API中的my_word2vec_矩阵在哪里输入?Is encoder_cell(在embedding_attention_seq2seq中)是需要替换为tf.embedding_查找的嵌入矩阵?您使用的embedding_rnn_seq2seq-函数会自动执行此操作。顺便说一句,您需要将我的代码片段中的名称从Embedded_attention_seq2seq改为Embedded_rnn_seq2seqWith“automatically”,我的意思是:Embedded_rnn_seq2seq使用嵌入矩阵。My assign_op将您的矩阵指定给模型中使用的嵌入矩阵。或者更好:它创建一个随机填充的嵌入矩阵,并将其“连接”到输入和模型的“上坡”部分。然后,我的assign_op会用您要分配的嵌入值覆盖随机创建的值。是的,“传递对应于各个单词的查找_矩阵”是正确的。确保ID在词汇表集合中对应(有两个集合:word2vec中的嵌入和seq2seq模型创建的嵌入)。很好,谢谢。那么,我们在API中的my_word2vec_矩阵在哪里输入?Is encoder_cell(在embedding_attention_seq2seq中)是需要替换为tf.embedding_查找的嵌入矩阵?您使用的embedding_rnn_seq2seq-函数会自动执行此操作。顺便说一句,您需要将我的代码片段中的名称从Embedded_attention_seq2seq改为Embedded_rnn_seq2seqWith“automatically”,我的意思是:Embedded_rnn_seq2seq使用嵌入矩阵。My assign_op将您的矩阵指定给模型中使用的嵌入矩阵。或者更好:它创建一个随机填充的嵌入矩阵,并将其“连接”到输入和模型的“上坡”部分。然后,我的assign_op会用您要分配的嵌入值覆盖随机创建的值。是的,“传递对应于各个单词的查找_矩阵”是正确的。确保ID在词汇表集中对应(有两个集合:word2vec中的嵌入和seq2seq模型创建的嵌入)。祝你好运