seq2seq med attention
En encoder-decoder-model, hvor decoderens output på hvert tidstrin afhænger af en vægtet sum af encoderens skjulte tilstande, så modellen kan fokusere på relevante dele af inputsekvensen.
Kort fortalt
En teknik, der gør det muligt for en oversættelsesmodel at 'kigge tilbage' på forskellige ord i kildesætningen, når den genererer hvert ord i oversættelsen.
- Kategori
- arkitektur
- Niveau
- øvet
Betydninger
1- 1
En arkitektur bestående af en encoder, der læser inputsekvensen, og en decoder, der genererer outputsekvensen, med en attention-mekanisme, der gør det muligt for decodereren at vægte forskellige dele af inputsekvensen ved hvert tidstrin.
- Seq2seq med attention revolutionerede maskinoversættelse ved at håndtere lange sætninger bedre end tidligere modeller.
- Den mest kendte anvendelse af seq2seq med attention er i neurale oversættelsessystemer som Googles Neural Machine Translation.
Hvornår bruges det
Anvendes primært inden for maskinoversættelse, tekstgenerering og tale-til-tekst, hvor sekvenser af variabel længde skal oversættes til en anden sekvens.
Formel
Attention weights: a_{t,i} = softmax(score(s_{t-1}, h_i)) for each encoder hidden state h_i; context vector c_t = Σ_i a_{t,i} h_i; decoder state s_t = f(s_{t-1}, y_{t-1}, c_t).Kodeeksempel
import torch
import torch.nn as nn
class Attention(nn.Module):
def __init__(self, hidden_dim):
super().__init__()
self.W = nn.Linear(hidden_dim*2, hidden_dim)
self.v = nn.Linear(hidden_dim, 1, bias=False)
def forward(self, decoder_hidden, encoder_outputs):
# decoder_hidden: (batch, hidden_dim)
# encoder_outputs: (batch, seq_len, hidden_dim)
seq_len = encoder_outputs.size(1)
decoder_hidden = decoder_hidden.unsqueeze(1).repeat(1, seq_len, 1)
energies = self.v(torch.tanh(self.W(torch.cat((decoder_hidden, encoder_outputs), dim=2))))
attention_weights = torch.softmax(energies.squeeze(2), dim=1)
context = torch.bmm(attention_weights.unsqueeze(1), encoder_outputs).squeeze(1)
return context, attention_weightsEn simpel PyTorch-implementering af attention-mekanismen, der beregner en kontekstvektor som en vægtet sum af encoder-outputs.
Oprindelse
Termen er dannet af 'seq2seq' (sequence-to-sequence) og 'attention' (opmærksomhed), introduceret af Bahdanau et al. i 2014.
Afledte ord
2Kilder
2- Bahdanau et al., 'Neural Machine Translation by Jointly Learning to Align and Translate', 2014
- Sutskever et al., 'Sequence to Sequence Learning with Neural Networks', 2014