Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python NSTEPLSM和Seq2Seq模型_Python_Chainer - Fatal编程技术网

Python NSTEPLSM和Seq2Seq模型

Python NSTEPLSM和Seq2Seq模型,python,chainer,Python,Chainer,亲爱的chainer社区: 在seq2seq英法翻译中,我无法理解NStepLSTM的逻辑用法 定义调用self、xs、ys: xs=[x[::-1]表示x在xs中]倒转x据我所知,xs是一个英语短语,ys是一个法语短语。你为什么把这个英语短语颠倒过来 你如何训练网络?将xs和ys嵌入到连续空间中,然后向编码器提供exs以获得英语短语的潜在表示。但是,然后你把潜在的表示放入带有eys的解码器中。但是eys是法语短语的连续表示,在测试阶段解码器不能知道结果法语短语,是吗?如何应用您的网络 hx,c

亲爱的chainer社区:

在seq2seq英法翻译中,我无法理解NStepLSTM的逻辑用法

定义调用self、xs、ys: xs=[x[::-1]表示x在xs中]倒转x据我所知,xs是一个英语短语,ys是一个法语短语。你为什么把这个英语短语颠倒过来

你如何训练网络?将xs和ys嵌入到连续空间中,然后向编码器提供exs以获得英语短语的潜在表示。但是,然后你把潜在的表示放入带有eys的解码器中。但是eys是法语短语的连续表示,在测试阶段解码器不能知道结果法语短语,是吗?如何应用您的网络

hx,cx,u=self。编码器名称,无,exs _,uOS=self.decoderhx,cx,eys

y_in=[F.concat[eos,y],y的轴=0]为什么我们把序列的结尾放在开头

ys=self.xp.fullbatch,EOS,“i”在def translate中,我们将序列末尾的数组放入解码器,为什么?
如果我不想翻译句子,而是想构建一个自动编码器将短语映射到潜在空间,我该怎么办

谢谢你的提问

问题1

请参阅以下seq2seq原始文件。 他们建议: 请注意,LSTM以相反的方式读取输入语句,因为这样做会在数据中引入许多短期依赖项,从而使优化问题变得更容易。

抽象地 我们发现在所有的源句中,颠倒单词的顺序 非目标句显著提高了LSTM的表现

我认为官方的示例代码也会像上面的文章一样颠倒输入的句子

问题2

但是,然后你把潜在的表示放入带有eys的解码器中。但eys是法语短语的连续表示

是的。这段代码是在训练时使用的,所以我们知道目标句中的金字

hx, cx, _ = self.the encoder(None, None, exs)
_, _, os = self.decoder(hx, cx, eys)
在测试时,您应该使用def translateself,xs,max_length=100:。 该方法可用于从源句xs预测句子

对于每个循环,使用源语句向量和前一个单词ys预测一个单词

问题3 问题4

我认为这部分应该是: ys_in=[F.concat[bos,y],轴=0表示y在ys中]句首 官方代码将eos用于和

最后问题

如果我不想翻译句子,而是想构建一个自动编码器将短语映射到潜在空间,我该怎么办

当您想要构建自动编码器时

删除此行xs=[x[:-1]表示xs中的x] 在ys_in=[F.concat[eos,y]中使用bos代替eos,y轴=0表示y在ys中] 无论使用eos而不是bos,两者都可以。 对于自动编码器,您只需删除这一行xs=[x[::-1]

如果您想使用bos,您应该进行如下修改:

UNK = 0
EOS = 1
BOS = 2



47:eos = self.xp.array([EOS], 'i')
48: ys_in = [F.concat([eos, y], axis=0) for y in ys]
=>
bos = self.xp.array([BOS], 'i')
ys_in = [F.concat([bos, y], axis=0) for y in ys]
79: ys = self.xp.full(batch, EOS, 'i')
=> 
ys = self.xp.full(batch, BOS, 'i')

def load_vocabulary(path):
    with open(path) as f:
        # +2 for UNK and EOS
        word_ids = {line.strip(): i + 3 for i, line in enumerate(f)}
    word_ids['<UNK>'] = 0
    word_ids['<EOS>'] = 1
    word_ids['<BOS>'] = 2
    return word_ids
如果你有进一步的问题,请再问我一次

UNK = 0
EOS = 1
BOS = 2



47:eos = self.xp.array([EOS], 'i')
48: ys_in = [F.concat([eos, y], axis=0) for y in ys]
=>
bos = self.xp.array([BOS], 'i')
ys_in = [F.concat([bos, y], axis=0) for y in ys]
79: ys = self.xp.full(batch, EOS, 'i')
=> 
ys = self.xp.full(batch, BOS, 'i')

def load_vocabulary(path):
    with open(path) as f:
        # +2 for UNK and EOS
        word_ids = {line.strip(): i + 3 for i, line in enumerate(f)}
    word_ids['<UNK>'] = 0
    word_ids['<EOS>'] = 1
    word_ids['<BOS>'] = 2
    return word_ids