变压器中目标的Pytork NLP序列长度

变压器中目标的Pytork NLP序列长度,nlp,pytorch,mask,transformer,Nlp,Pytorch,Mask,Transformer,我试图理解Transformer()的代码 如果在“train”脚本中看到train_模型功能,我想知道为什么需要使用trg输入的不同序列长度: trg_input = trg[:, :-1] 在这种情况下,trg_输入的序列长度为“seq_len(trg)-1”。 这意味着trg类似于: <sos> tok1 tok2 tokn <eos> 这是因为整个目标是基于我们到目前为止看到的令牌生成下一个令牌。当我们得到我们的预测时,看看模型的输入。我们不仅要输入源序列,还

我试图理解Transformer()的代码

如果在“train”脚本中看到train_模型功能,我想知道为什么需要使用trg输入的不同序列长度:

trg_input = trg[:, :-1]
在这种情况下,trg_输入的序列长度为“seq_len(trg)-1”。 这意味着trg类似于:

<sos> tok1 tok2 tokn <eos>

这是因为整个目标是基于我们到目前为止看到的令牌生成下一个令牌。当我们得到我们的预测时,看看模型的输入。我们不仅要输入源序列,还要输入目标序列直到当前步骤。
Models.py中的模型如下所示:

class Transformer(nn.Module):
    def __init__(self, src_vocab, trg_vocab, d_model, N, heads, dropout):
        super().__init__()
        self.encoder = Encoder(src_vocab, d_model, N, heads, dropout)
        self.decoder = Decoder(trg_vocab, d_model, N, heads, dropout)
        self.out = nn.Linear(d_model, trg_vocab)
    def forward(self, src, trg, src_mask, trg_mask):
        e_outputs = self.encoder(src, src_mask)
        #print("DECODER")
        d_output = self.decoder(trg, e_outputs, src_mask, trg_mask)
        output = self.out(d_output)
        return output
因此,您可以看到,
forward
方法接收
src
trg
,它们分别被送入编码器和解码器。如果您从以下方面了解模型体系结构,则更容易理解这一点:


“输出(右移)”对应于代码中的
trg[:,:-1]

这是因为整个目标是基于我们到目前为止看到的令牌生成下一个令牌。当我们得到我们的预测时,看看模型的输入。我们不仅要输入源序列,还要输入目标序列直到当前步骤。
Models.py中的模型如下所示:

class Transformer(nn.Module):
    def __init__(self, src_vocab, trg_vocab, d_model, N, heads, dropout):
        super().__init__()
        self.encoder = Encoder(src_vocab, d_model, N, heads, dropout)
        self.decoder = Decoder(trg_vocab, d_model, N, heads, dropout)
        self.out = nn.Linear(d_model, trg_vocab)
    def forward(self, src, trg, src_mask, trg_mask):
        e_outputs = self.encoder(src, src_mask)
        #print("DECODER")
        d_output = self.decoder(trg, e_outputs, src_mask, trg_mask)
        output = self.out(d_output)
        return output
因此,您可以看到,
forward
方法接收
src
trg
,它们分别被送入编码器和解码器。如果您从以下方面了解模型体系结构,则更容易理解这一点:

“输出(右移)”对应于代码中的
trg[:,:-1]

class Transformer(nn.Module):
    def __init__(self, src_vocab, trg_vocab, d_model, N, heads, dropout):
        super().__init__()
        self.encoder = Encoder(src_vocab, d_model, N, heads, dropout)
        self.decoder = Decoder(trg_vocab, d_model, N, heads, dropout)
        self.out = nn.Linear(d_model, trg_vocab)
    def forward(self, src, trg, src_mask, trg_mask):
        e_outputs = self.encoder(src, src_mask)
        #print("DECODER")
        d_output = self.decoder(trg, e_outputs, src_mask, trg_mask)
        output = self.out(d_output)
        return output