View file src/colab/nlp_from_scratch_translation_with_a_sequence_to_sequence_network_and_attention.py - Download

# -*- coding: utf-8 -*-
"""NLP From Scratch: Translation with a Sequence to Sequence Network and Attention.ipynb

Automatically generated by Colab.

Original file is located at
    https://colab.research.google.com/drive/1NEjMR35MQKxVAHKksCKiO94SUzkR-pm6

NLP From Scratch: Translation with a Sequence to Sequence Network and Attention

https://pytorch.org/tutorials/intermediate/seq2seq_translation_tutorial.html

Author: Sean Robertson

This is the third and final tutorial on doing “NLP From Scratch”, where we write our own classes and functions to preprocess the data to do our NLP modeling tasks. We hope after you complete this tutorial that you’ll proceed to learn how torchtext can handle much of this preprocessing for you in the three tutorials immediately following this one.

In this project we will be teaching a neural network to translate from French to English.

[KEY: > input, = target, < output]

> il est en train de peindre un tableau .
= he is painting a picture .
< he is painting a picture .

> pourquoi ne pas essayer ce vin delicieux ?
= why not try that delicious wine ?
< why not try that delicious wine ?

> elle n est pas poete mais romanciere .
= she is not a poet but a novelist .
< she not not a poet but a novelist .

> vous etes trop maigre .
= you re too skinny .
< you re all alone .

… to varying degrees of success.

This is made possible by the simple but powerful idea of the sequence to sequence network, in which two recurrent neural networks work together to transform one sequence to another. An encoder network condenses an input sequence into a vector, and a decoder network unfolds that vector into a new sequence.

![image.png](data:image/png;base64,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)

To improve upon this model we’ll use an attention mechanism, which lets the decoder learn to focus over a specific range of the input sequence.

Recommended Reading:

I assume you have at least installed PyTorch, know Python, and understand Tensors:

    https://pytorch.org/ For installation instructions

    Deep Learning with PyTorch: A 60 Minute Blitz to get started with PyTorch in general

    Learning PyTorch with Examples for a wide and deep overview

    PyTorch for Former Torch Users if you are former Lua Torch user

It would also be useful to know about Sequence to Sequence networks and how they work:

    Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation

    Sequence to Sequence Learning with Neural Networks

    Neural Machine Translation by Jointly Learning to Align and Translate

    A Neural Conversational Model

You will also find the previous tutorials on NLP From Scratch: Classifying Names with a Character-Level RNN and NLP From Scratch: Generating Names with a Character-Level RNN helpful as those concepts are very similar to the Encoder and Decoder models, respectively.

Requirements
"""

from __future__ import unicode_literals, print_function, division
from io import open
import unicodedata
import re
import random

import torch
import torch.nn as nn
from torch import optim
import torch.nn.functional as F

import numpy as np
from torch.utils.data import TensorDataset, DataLoader, RandomSampler

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

"""Loading data files

The data for this project is a set of many thousands of English to French translation pairs.

This question on Open Data Stack Exchange pointed me to the open translation site https://tatoeba.org/ which has downloads available at https://tatoeba.org/eng/downloads - and better yet, someone did the extra work of splitting language pairs into individual text files here: https://www.manythings.org/anki/

The English to French pairs are too big to include in the repository, so download to data/eng-fra.txt before continuing. The file is a tab separated list of translation pairs:

I am cold.    J'ai froid.

Note

Download the data from here and extract it to the current directory.

Similar to the character encoding used in the character-level RNN tutorials, we will be representing each word in a language as a one-hot vector, or giant vector of zeros except for a single one (at the index of the word). Compared to the dozens of characters that might exist in a language, there are many many more words, so the encoding vector is much larger. We will however cheat a bit and trim the data to only use a few thousand words per language.

![image.png](data:image/png;base64,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)

We’ll need a unique index per word to use as the inputs and targets of the networks later. To keep track of all this we will use a helper class called Lang which has word → index (word2index) and index → word (index2word) dictionaries, as well as a count of each word word2count which will be used to replace rare words later.
"""

!rm data.zip
!rm -r data
!wget https://download.pytorch.org/tutorial/data.zip
!unzip data.zip

SOS_token = 0
EOS_token = 1

class Lang:
    def __init__(self, name):
        self.name = name
        self.word2index = {}
        self.word2count = {}
        self.index2word = {0: "SOS", 1: "EOS"}
        self.n_words = 2  # Count SOS and EOS

    def addSentence(self, sentence):
        for word in sentence.split(' '):
            self.addWord(word)

    def addWord(self, word):
        if word not in self.word2index:
            self.word2index[word] = self.n_words
            self.word2count[word] = 1
            self.index2word[self.n_words] = word
            self.n_words += 1
        else:
            self.word2count[word] += 1

"""The files are all in Unicode, to simplify we will turn Unicode characters to ASCII, make everything lowercase, and trim most punctuation."""

# Turn a Unicode string to plain ASCII, thanks to
# https://stackoverflow.com/a/518232/2809427
def unicodeToAscii(s):
    return ''.join(
        c for c in unicodedata.normalize('NFD', s)
        if unicodedata.category(c) != 'Mn'
    )

# Lowercase, trim, and remove non-letter characters
def normalizeString(s):
    s = unicodeToAscii(s.lower().strip())
    s = re.sub(r"([.!?])", r" \1", s)
    s = re.sub(r"[^a-zA-Z!?]+", r" ", s)
    return s.strip()

"""To read the data file we will split the file into lines, and then split lines into pairs. The files are all English → Other Language, so if we want to translate from Other Language → English I added the reverse flag to reverse the pairs."""

def readLangs(lang1, lang2, reverse=False):
    print("Reading lines...")

    # Read the file and split into lines
    lines = open('data/%s-%s.txt' % (lang1, lang2), encoding='utf-8').\
        read().strip().split('\n')

    # Split every line into pairs and normalize
    pairs = [[normalizeString(s) for s in l.split('\t')] for l in lines]

    # Reverse pairs, make Lang instances
    if reverse:
        pairs = [list(reversed(p)) for p in pairs]
        input_lang = Lang(lang2)
        output_lang = Lang(lang1)
    else:
        input_lang = Lang(lang1)
        output_lang = Lang(lang2)

    return input_lang, output_lang, pairs

"""Since there are a lot of example sentences and we want to train something quickly, we’ll trim the data set to only relatively short and simple sentences. Here the maximum length is 10 words (that includes ending punctuation) and we’re filtering to sentences that translate to the form “I am” or “He is” etc. (accounting for apostrophes replaced earlier)."""

MAX_LENGTH = 10

eng_prefixes = (
    "i am ", "i m ",
    "he is", "he s ",
    "she is", "she s ",
    "you are", "you re ",
    "we are", "we re ",
    "they are", "they re "
)

def filterPair(p):
    return len(p[0].split(' ')) < MAX_LENGTH and \
        len(p[1].split(' ')) < MAX_LENGTH and \
        p[1].startswith(eng_prefixes)


def filterPairs(pairs):
    return [pair for pair in pairs if filterPair(pair)]

"""The full process for preparing the data is:

    Read text file and split into lines, split lines into pairs

    Normalize text, filter by length and content

    Make word lists from sentences in pairs

"""

def prepareData(lang1, lang2, reverse=False):
    input_lang, output_lang, pairs = readLangs(lang1, lang2, reverse)
    print("Read %s sentence pairs" % len(pairs))
    pairs = filterPairs(pairs)
    print("Trimmed to %s sentence pairs" % len(pairs))
    print("Counting words...")
    for pair in pairs:
        input_lang.addSentence(pair[0])
        output_lang.addSentence(pair[1])
    print("Counted words:")
    print(input_lang.name, input_lang.n_words)
    print(output_lang.name, output_lang.n_words)
    return input_lang, output_lang, pairs

input_lang, output_lang, pairs = prepareData('eng', 'fra', True)
print(random.choice(pairs))

"""The Seq2Seq Model

A Recurrent Neural Network, or RNN, is a network that operates on a sequence and uses its own output as input for subsequent steps.

A Sequence to Sequence network, or seq2seq network, or Encoder Decoder network, is a model consisting of two RNNs called the encoder and decoder. The encoder reads an input sequence and outputs a single vector, and the decoder reads that vector to produce an output sequence.

![image.png](data:image/png;base64,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)

Unlike sequence prediction with a single RNN, where every input corresponds to an output, the seq2seq model frees us from sequence length and order, which makes it ideal for translation between two languages.

Consider the sentence Je ne suis pas le chat noir → I am not the black cat. Most of the words in the input sentence have a direct translation in the output sentence, but are in slightly different orders, e.g. chat noir and black cat. Because of the ne/pas construction there is also one more word in the input sentence. It would be difficult to produce a correct translation directly from the sequence of input words.

With a seq2seq model the encoder creates a single vector which, in the ideal case, encodes the “meaning” of the input sequence into a single vector — a single point in some N dimensional space of sentences.
The Encoder

The encoder of a seq2seq network is a RNN that outputs some value for every word from the input sentence. For every input word the encoder outputs a vector and a hidden state, and uses the hidden state for the next input word.

![image.png](data:image/png;base64,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)
"""

class EncoderRNN(nn.Module):
    def __init__(self, input_size, hidden_size, dropout_p=0.1):
        super(EncoderRNN, self).__init__()
        self.hidden_size = hidden_size

        self.embedding = nn.Embedding(input_size, hidden_size)
        self.gru = nn.GRU(hidden_size, hidden_size, batch_first=True)
        self.dropout = nn.Dropout(dropout_p)

    def forward(self, input):
        embedded = self.dropout(self.embedding(input))
        output, hidden = self.gru(embedded)
        return output, hidden

"""The Decoder

The decoder is another RNN that takes the encoder output vector(s) and outputs a sequence of words to create the translation.
Simple Decoder

In the simplest seq2seq decoder we use only last output of the encoder. This last output is sometimes called the context vector as it encodes context from the entire sequence. This context vector is used as the initial hidden state of the decoder.

At every step of decoding, the decoder is given an input token and hidden state. The initial input token is the start-of-string  token, and the first hidden state is the context vector (the encoder’s last hidden state).

![image.png](data:image/png;base64,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)
"""

class DecoderRNN(nn.Module):
    def __init__(self, hidden_size, output_size):
        super(DecoderRNN, self).__init__()
        self.embedding = nn.Embedding(output_size, hidden_size)
        self.gru = nn.GRU(hidden_size, hidden_size, batch_first=True)
        self.out = nn.Linear(hidden_size, output_size)

    def forward(self, encoder_outputs, encoder_hidden, target_tensor=None):
        batch_size = encoder_outputs.size(0)
        decoder_input = torch.empty(batch_size, 1, dtype=torch.long, device=device).fill_(SOS_token)
        decoder_hidden = encoder_hidden
        decoder_outputs = []

        for i in range(MAX_LENGTH):
            decoder_output, decoder_hidden  = self.forward_step(decoder_input, decoder_hidden)
            decoder_outputs.append(decoder_output)

            if target_tensor is not None:
                # Teacher forcing: Feed the target as the next input
                decoder_input = target_tensor[:, i].unsqueeze(1) # Teacher forcing
            else:
                # Without teacher forcing: use its own predictions as the next input
                _, topi = decoder_output.topk(1)
                decoder_input = topi.squeeze(-1).detach()  # detach from history as input

        decoder_outputs = torch.cat(decoder_outputs, dim=1)
        decoder_outputs = F.log_softmax(decoder_outputs, dim=-1)
        return decoder_outputs, decoder_hidden, None # We return `None` for consistency in the training loop

    def forward_step(self, input, hidden):
        output = self.embedding(input)
        output = F.relu(output)
        output, hidden = self.gru(output, hidden)
        output = self.out(output)
        return output, hidden

"""I encourage you to train and observe the results of this model, but to save space we’ll be going straight for the gold and introducing the Attention Mechanism.
Attention Decoder

If only the context vector is passed between the encoder and decoder, that single vector carries the burden of encoding the entire sentence.

Attention allows the decoder network to “focus” on a different part of the encoder’s outputs for every step of the decoder’s own outputs. First we calculate a set of attention weights. These will be multiplied by the encoder output vectors to create a weighted combination. The result (called attn_applied in the code) should contain information about that specific part of the input sequence, and thus help the decoder choose the right output words.

Calculating the attention weights is done with another feed-forward layer attn, using the decoder’s input and hidden state as inputs. Because there are sentences of all sizes in the training data, to actually create and train this layer we have to choose a maximum sentence length (input length, for encoder outputs) that it can apply to. Sentences of the maximum length will use all the attention weights, while shorter sentences will only use the first few.

![image.png](data:image/png;base64,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)

Bahdanau attention, also known as additive attention, is a commonly used attention mechanism in sequence-to-sequence models, particularly in neural machine translation tasks. It was introduced by Bahdanau et al. in their paper titled Neural Machine Translation by Jointly Learning to Align and Translate. This attention mechanism employs a learned alignment model to compute attention scores between the encoder and decoder hidden states. It utilizes a feed-forward neural network to calculate alignment scores.

However, there are alternative attention mechanisms available, such as Luong attention, which computes attention scores by taking the dot product between the decoder hidden state and the encoder hidden states. It does not involve the non-linear transformation used in Bahdanau attention.

In this tutorial, we will be using Bahdanau attention. However, it would be a valuable exercise to explore modifying the attention mechanism to use Luong attention.
"""

class BahdanauAttention(nn.Module):
    def __init__(self, hidden_size):
        super(BahdanauAttention, self).__init__()
        self.Wa = nn.Linear(hidden_size, hidden_size)
        self.Ua = nn.Linear(hidden_size, hidden_size)
        self.Va = nn.Linear(hidden_size, 1)

    def forward(self, query, keys):
        scores = self.Va(torch.tanh(self.Wa(query) + self.Ua(keys)))
        scores = scores.squeeze(2).unsqueeze(1)

        weights = F.softmax(scores, dim=-1)
        context = torch.bmm(weights, keys)

        return context, weights

class AttnDecoderRNN(nn.Module):
    def __init__(self, hidden_size, output_size, dropout_p=0.1):
        super(AttnDecoderRNN, self).__init__()
        self.embedding = nn.Embedding(output_size, hidden_size)
        self.attention = BahdanauAttention(hidden_size)
        self.gru = nn.GRU(2 * hidden_size, hidden_size, batch_first=True)
        self.out = nn.Linear(hidden_size, output_size)
        self.dropout = nn.Dropout(dropout_p)

    def forward(self, encoder_outputs, encoder_hidden, target_tensor=None):
        batch_size = encoder_outputs.size(0)
        decoder_input = torch.empty(batch_size, 1, dtype=torch.long, device=device).fill_(SOS_token)
        decoder_hidden = encoder_hidden
        decoder_outputs = []
        attentions = []

        for i in range(MAX_LENGTH):
            decoder_output, decoder_hidden, attn_weights = self.forward_step(
                decoder_input, decoder_hidden, encoder_outputs
            )
            decoder_outputs.append(decoder_output)
            attentions.append(attn_weights)

            if target_tensor is not None:
                # Teacher forcing: Feed the target as the next input
                decoder_input = target_tensor[:, i].unsqueeze(1) # Teacher forcing
            else:
                # Without teacher forcing: use its own predictions as the next input
                _, topi = decoder_output.topk(1)
                decoder_input = topi.squeeze(-1).detach()  # detach from history as input

        decoder_outputs = torch.cat(decoder_outputs, dim=1)
        decoder_outputs = F.log_softmax(decoder_outputs, dim=-1)
        attentions = torch.cat(attentions, dim=1)

        return decoder_outputs, decoder_hidden, attentions


    def forward_step(self, input, hidden, encoder_outputs):
        embedded =  self.dropout(self.embedding(input))

        query = hidden.permute(1, 0, 2)
        context, attn_weights = self.attention(query, encoder_outputs)
        input_gru = torch.cat((embedded, context), dim=2)

        output, hidden = self.gru(input_gru, hidden)
        output = self.out(output)

        return output, hidden, attn_weights

"""

Note

There are other forms of attention that work around the length limitation by using a relative position approach. Read about “local attention” in Effective Approaches to Attention-based Neural Machine Translation.

Training

Preparing Training Data

To train, for each pair we will need an input tensor (indexes of the words in the input sentence) and target tensor (indexes of the words in the target sentence). While creating these vectors we will append the EOS token to both sequences."""

def indexesFromSentence(lang, sentence):
    return [lang.word2index[word] for word in sentence.split(' ')]

def tensorFromSentence(lang, sentence):
    indexes = indexesFromSentence(lang, sentence)
    indexes.append(EOS_token)
    return torch.tensor(indexes, dtype=torch.long, device=device).view(1, -1)

def tensorsFromPair(pair):
    input_tensor = tensorFromSentence(input_lang, pair[0])
    target_tensor = tensorFromSentence(output_lang, pair[1])
    return (input_tensor, target_tensor)

def get_dataloader(batch_size):
    input_lang, output_lang, pairs = prepareData('eng', 'fra', True)

    n = len(pairs)
    input_ids = np.zeros((n, MAX_LENGTH), dtype=np.int32)
    target_ids = np.zeros((n, MAX_LENGTH), dtype=np.int32)

    for idx, (inp, tgt) in enumerate(pairs):
        inp_ids = indexesFromSentence(input_lang, inp)
        tgt_ids = indexesFromSentence(output_lang, tgt)
        inp_ids.append(EOS_token)
        tgt_ids.append(EOS_token)
        input_ids[idx, :len(inp_ids)] = inp_ids
        target_ids[idx, :len(tgt_ids)] = tgt_ids

    train_data = TensorDataset(torch.LongTensor(input_ids).to(device),
                               torch.LongTensor(target_ids).to(device))

    train_sampler = RandomSampler(train_data)
    train_dataloader = DataLoader(train_data, sampler=train_sampler, batch_size=batch_size)
    return input_lang, output_lang, train_dataloader

"""Training the Model

To train we run the input sentence through the encoder, and keep track of every output and the latest hidden state. Then the decoder is given the  token as its first input, and the last hidden state of the encoder as its first hidden state.

“Teacher forcing” is the concept of using the real target outputs as each next input, instead of using the decoder’s guess as the next input. Using teacher forcing causes it to converge faster but when the trained network is exploited, it may exhibit instability.

You can observe outputs of teacher-forced networks that read with coherent grammar but wander far from the correct translation - intuitively it has learned to represent the output grammar and can “pick up” the meaning once the teacher tells it the first few words, but it has not properly learned how to create the sentence from the translation in the first place.

Because of the freedom PyTorch’s autograd gives us, we can randomly choose to use teacher forcing or not with a simple if statement. Turn teacher_forcing_ratio up to use more of it.
"""

def train_epoch(dataloader, encoder, decoder, encoder_optimizer,
          decoder_optimizer, criterion):

    total_loss = 0
    for data in dataloader:
        input_tensor, target_tensor = data

        encoder_optimizer.zero_grad()
        decoder_optimizer.zero_grad()

        encoder_outputs, encoder_hidden = encoder(input_tensor)
        decoder_outputs, _, _ = decoder(encoder_outputs, encoder_hidden, target_tensor)

        loss = criterion(
            decoder_outputs.view(-1, decoder_outputs.size(-1)),
            target_tensor.view(-1)
        )
        loss.backward()

        encoder_optimizer.step()
        decoder_optimizer.step()

        total_loss += loss.item()

    return total_loss / len(dataloader)

"""This is a helper function to print time elapsed and estimated time remaining given the current time and progress %."""

import time
import math

def asMinutes(s):
    m = math.floor(s / 60)
    s -= m * 60
    return '%dm %ds' % (m, s)

def timeSince(since, percent):
    now = time.time()
    s = now - since
    es = s / (percent)
    rs = es - s
    return '%s (- %s)' % (asMinutes(s), asMinutes(rs))

"""The whole training process looks like this:

    Start a timer

    Initialize optimizers and criterion

    Create set of training pairs

    Start empty losses array for plotting

Then we call train many times and occasionally print the progress (% of examples, time so far, estimated time) and average loss.
"""

def train(train_dataloader, encoder, decoder, n_epochs, learning_rate=0.001,
               print_every=100, plot_every=100):
    start = time.time()
    plot_losses = []
    print_loss_total = 0  # Reset every print_every
    plot_loss_total = 0  # Reset every plot_every

    encoder_optimizer = optim.Adam(encoder.parameters(), lr=learning_rate)
    decoder_optimizer = optim.Adam(decoder.parameters(), lr=learning_rate)
    criterion = nn.NLLLoss()

    for epoch in range(1, n_epochs + 1):
        loss = train_epoch(train_dataloader, encoder, decoder, encoder_optimizer, decoder_optimizer, criterion)
        print_loss_total += loss
        plot_loss_total += loss

        if epoch % print_every == 0:
            print_loss_avg = print_loss_total / print_every
            print_loss_total = 0
            print('%s (%d %d%%) %.4f' % (timeSince(start, epoch / n_epochs),
                                        epoch, epoch / n_epochs * 100, print_loss_avg))

        if epoch % plot_every == 0:
            plot_loss_avg = plot_loss_total / plot_every
            plot_losses.append(plot_loss_avg)
            plot_loss_total = 0

    showPlot(plot_losses)

"""Plotting results

Plotting is done with matplotlib, using the array of loss values plot_losses saved while training.
"""

import matplotlib.pyplot as plt
plt.switch_backend('agg')
import matplotlib.ticker as ticker
import numpy as np

def showPlot(points):
    plt.figure()
    fig, ax = plt.subplots()
    # this locator puts ticks at regular intervals
    loc = ticker.MultipleLocator(base=0.2)
    ax.yaxis.set_major_locator(loc)
    plt.plot(points)

"""Evaluation

Evaluation is mostly the same as training, but there are no targets so we simply feed the decoder’s predictions back to itself for each step. Every time it predicts a word we add it to the output string, and if it predicts the EOS token we stop there. We also store the decoder’s attention outputs for display later.


"""

def evaluate(encoder, decoder, sentence, input_lang, output_lang):
    with torch.no_grad():
        input_tensor = tensorFromSentence(input_lang, sentence)

        encoder_outputs, encoder_hidden = encoder(input_tensor)
        decoder_outputs, decoder_hidden, decoder_attn = decoder(encoder_outputs, encoder_hidden)

        _, topi = decoder_outputs.topk(1)
        decoded_ids = topi.squeeze()

        decoded_words = []
        for idx in decoded_ids:
            if idx.item() == EOS_token:
                decoded_words.append('')
                break
            decoded_words.append(output_lang.index2word[idx.item()])
    return decoded_words, decoder_attn

"""We can evaluate random sentences from the training set and print out the input, target, and output to make some subjective quality judgements:"""

def evaluateRandomly(encoder, decoder, n=10):
    for i in range(n):
        pair = random.choice(pairs)
        print('>', pair[0])
        print('=', pair[1])
        output_words, _ = evaluate(encoder, decoder, pair[0], input_lang, output_lang)
        output_sentence = ' '.join(output_words)
        print('<', output_sentence)
        print('')

"""Training and Evaluating

With all these helper functions in place (it looks like extra work, but it makes it easier to run multiple experiments) we can actually initialize a network and start training.

Remember that the input sentences were heavily filtered. For this small dataset we can use relatively small networks of 256 hidden nodes and a single GRU layer. After about 40 minutes on a MacBook CPU we’ll get some reasonable results.

Note

If you run this notebook you can train, interrupt the kernel, evaluate, and continue training later. Comment out the lines where the encoder and decoder are initialized and run trainIters again.


"""

hidden_size = 128
batch_size = 32

input_lang, output_lang, train_dataloader = get_dataloader(batch_size)

encoder = EncoderRNN(input_lang.n_words, hidden_size).to(device)
decoder = AttnDecoderRNN(hidden_size, output_lang.n_words).to(device)

train(train_dataloader, encoder, decoder, 80, print_every=5, plot_every=5)

"""Set dropout layers to eval mode"""

encoder.eval()
decoder.eval()
evaluateRandomly(encoder, decoder)

"""Visualizing Attention

A useful property of the attention mechanism is its highly interpretable outputs. Because it is used to weight specific encoder outputs of the input sequence, we can imagine looking where the network is focused most at each time step.

You could simply run plt.matshow(attentions) to see attention output displayed as a matrix. For a better viewing experience we will do the extra work of adding axes and labels:
"""

def showAttention(input_sentence, output_words, attentions):
    fig = plt.figure()
    ax = fig.add_subplot(111)
    cax = ax.matshow(attentions.cpu().numpy(), cmap='bone')
    fig.colorbar(cax)

    # Set up axes
    ax.set_xticklabels([''] + input_sentence.split(' ') +
                       [''], rotation=90)
    ax.set_yticklabels([''] + output_words)

    # Show label at every tick
    ax.xaxis.set_major_locator(ticker.MultipleLocator(1))
    ax.yaxis.set_major_locator(ticker.MultipleLocator(1))

    plt.show()


def evaluateAndShowAttention(input_sentence):
    output_words, attentions = evaluate(encoder, decoder, input_sentence, input_lang, output_lang)
    print('input =', input_sentence)
    print('output =', ' '.join(output_words))
    showAttention(input_sentence, output_words, attentions[0, :len(output_words), :])


evaluateAndShowAttention('il n est pas aussi grand que son pere')

evaluateAndShowAttention('je suis trop fatigue pour conduire')

evaluateAndShowAttention('je suis desole si c est une question idiote')

evaluateAndShowAttention('je suis reellement fiere de vous')

"""![image.png](data:image/png;base64,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)

![image.png](data:image/png;base64,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4GSHAAIIIIAAAggELUAAGHQLkD8CCCCAAAIIIOCzAAGgz+BkhwACCCCAAAIIBC1AABh0C5A/AggggAACCCDgswABoM/gZIcAAggggAACCAQtQAAYdAuQPwIIIIAAAggg4LMAAaDP4GSHAAIIIIAAAggELUAAGHQLkD8CCCCAAAIIIOCzAAGgz+BkhwACCCCAAAIIBC1AABh0C5A/AggggAACCCDgswABoM/gZIcAAggggAACCAQtQAAYdAuQPwIIIIAAAggg4LMAAaDP4GSHAAIIIIAAAggELUAAGHQLkD8CCCCAAAIIIOCzAAGgz+BkhwACCCCAAAIIBC1AABh0C5A/AggggAACCCDgswABoM/gZIcAAggggAACCAQtQAAYdAuQPwIIIIAAAggg4LMAAaDP4GSHAAIIIIAAAggELUAAGHQLkD8CCCCAAAIIIOCzAAGgz+BkhwACCCCAAAIIBC1AABh0C5A/AggggAACCCDgswABoM/gZIcAAggggAACCAQtQAAYdAuQPwIIIIAAAggg4LMAAaDP4GSHAAIIIIAAAggELUAAGHQLkD8CCCCAAAIIIOCzAAGgz+BkhwACCCCAAAIIBC1AABh0C5A/AggggAACCCDgswABoM/gZIcAAggggAACCAQtQAAYdAuQPwIIIIAAAggg4LMAAaDP4GSHAAIIIIAAAggELUAAGHQLkD8CCCCAAAIIIOCzAAGgz+BkhwACCCCAAAIIBC1AABh0C5A/AggggAACCCDgswABoM/gZIcAAggggAACCAQtQAAYdAuQPwIIIIAAAggg4LMAAaDP4GSHAAIIIIAAAggELUAAGHQLkD8CCCCAAAIIIOCzAAGgz+BkhwACCCCAAAIIBC1AABh0C5A/AggggAACCCDgswABoM/gZIcAAggggAACCAQtQAAYdAuQPwIIIIAAAggg4LMAAaDP4GSHAAIIIIAAAggELUAAGHQLkD8CCCCAAAIIIOCzwP8DVXdLRdCKytYAAAAASUVORK5CYII=)

![image.png](data:image/png;base64,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aJA888wzsnfv3ph3LygokLy8vNArPz8/5rm8gQACCCCAQLhAMr2+kdcg6m8BAkCb6ldb/VauXClz586V5s2by7hx46R9+/aya9euqDkYO3as7N69O/QqLCyMeh4HEUAAAQQQQACBRAUIABMVs3B+9erVpVevXvKnP/1JVq9eLRs3bpQ333wz6h2zs7MlNze3zCvqiRxEAAEEEEAgQsDK+n/Ba0H1twBjAG2q31dffVW+/vpr+eUvfyn169eX1157TUpKSuSEE06wKQc8BgEEEEAgUwQYA5gpNZ18OQkAk7dL6Mp69eqJLgo9YcIE2bdvn1kORruDTzrppITuw8kIIIAAAggggIBVAQJAq4KVXL948eLQGeH/ruQy3kYAAQQQQCBpAVoAk6bLmAsJADOmqikoAggggECmCBAAZkpNJ19OAsDk7bgSAQQQQAABVwocXtIl+d089HqSvwWYBezv+qV0CCCAAAIIIIBAOQFaAMuRcAABBBBAAAFvC1hdykWvJ/lbgBZAf9cvpUMAAQQQyESByG09kvk+CbepU6dKq1atJCcnR7p06SLLli2L6y7PPvusVKlSRfr27RvX+ZxkXYAA0Lohd0AAAQQQQCDjBebNmycjR46U8ePHm52vdLer3r17y/bt2yu00U0RbrnlFunRo0eF5/FmagUIAFPryd0QQAABBBBwXCCZBr/IaxItxKRJk2T48OEybNgwadOmjUybNk1q1aolM2fOjHmrQ4cOyWWXXSZ33nmnHH300THP443UCxAApt6UOyKAAAIIIOCoQHAZGCtftQBFRUVlXsXFxVHLtX//flmxYoXZ7jSYqlatar5fsmRJ1Gv04F133SVNmjSRK664IuY5vJEeAQLA9LhyVwQQQAABBDwvkJ+fL3l5eaFXQUFB1DJ9//33oq15TZs2LfO+fr9t27ao17z33nvy5JNPyowZM6K+z8H0CjALOL2+3B0BBBBAAAH7BQL9udr6l3T6v2sLCwslNzc3dJvs7Oykbxl+4U8//SSDBg0ywV+jRo1Sck9ukpgAAWBiXpyNAAIIIICA6wVStQyMBn/hAWCsgmsQV61aNfnuu+/KnKLfN2vWrNxlX331lejkjz59+oTeKykpMf+uXr26rF27Vo455phy13EgdQJ0AafOkjshgAACCCDgCgErY/+S2UYuKytLOnbsKIsWLQqVXwM6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oAs4UoTvIwVc2wKorWXaStelS5dQnrUL94QTTogsQ8zvtfv2yy+/NC2AGszpS++hAZveX/+t3bPagqcB25QpU0xLXyJpzZo10r59+1Dwp9dqN7IGnmvXrg3dSlsSNfgLJu0K3r59e8xHFRQUSF5eXuiVn58f81zeQAABBBBAIFzAygQQq8EjNeENAdcGgPHwaaueflDDU/i4Om1F7Nixo6xatarMa926dXLppZeay7RFULt+u3XrJtpiePzxx8uHH34Yz+MTOqdGjRplzte8a5AYK40dO9a0TgZfOpaRhAACCCCAAAIIpELAtQGgdslq0LR06dJQOX/88UfR4C2YGjduXKbFbv369bJ3797Q+z//+c9FjzVp0kSOPfbYMi9tXQumU045RTTg+uCDD6Rt27ai3bqasrKy5NChQ6Hzov1Du4y1pVHHAgaTjjWsWrVqQq2VkffOzs6W3NzcMq/Ic/geAQQQQACBqALaOGL1FfXGHPSLgGsDQO2uveKKK0Qngrz55pvy2Wefme5aDayCSWfe6ri6jz/+WJYvXy7XXHONCRqD6bLLLpNGjRqZmb86CWTDhg1m7N/vf/97+eabb8z3GvhpC6DO/NWJJhowBscBtmrVypyjLYjff/99mTF54c/IycmRIUOGmDzqJI8bb7xRBg0aFBr/55cPC+VAAAEEEPCGQGAFQMv/80ZJyWWyAq4NALVADz74oPTo0cOMz+vVq5ecdtpppks3mHRZGB0bp+dol+4tt9witWrVCr2v/37nnXfkyCOPlH79+pnAToNKHQOorWv6/hdffCEXXnih6frVGcC6PMvVV19t7qHHdcbwGWecIdraOHfu3NC9g//QeyxcuFB27twpp556qvTv399MWtHAlIQAAggggAACCLhRoEpgDJ2nlvvWdQB1d47Jkye70TNtedJZwOHd1ml7EDfOGIE6deq7rqzB2fpuylh+/v9WBnBLvn74YYtbshLKR4/T+7suT19/udpVeTp06GBgyNCbZmy3NkKkIwV/V7RseXygx+x/Ew8TfVZJyaFAT9m6tOY10TxxfmoFXLsMTGqLyd0QQAABBBDIHAGrM3k91jaUORWbwpK6ugs4heXkVggggAACCCCAAAL/J+C5FkCdxEFCAAEEEEAAgdgCtADGtuGdwwKeCwCpOAQQQAABBBCoWIAAsGIf3hUhAORTgAAC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)

![image.png](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAABHNCSVQICAgIfAhkiAAAIABJREFUeF7t3QncTdX++PGvmcwiMpQmQmaRcJOU6p/boBJChJJuSalcUVQoJSqpzOXSqNlQGW43aUBukwxJhowVj8iQ5/mf7+qe83uG8zzPOXvvs8/e+3zWfZ2rs8/ee631Xofn+6y111oFMkJJSAgggEAuAj/++KPceuutsnTpUjl06FDkLP2no0CBAnLs2LFcruQwAv4S0O/yt99+K3Xr1pXChQv7q/CUFoE4BfiGxwnG6QikmsD1118vGuxNmzZNKleubII+EgJBFHjnnXekU6dO8sILL0i3bt2CWEXqhEBEoAA9gHwbEEAgL4FSpUrJypUrpXbt2nmdxmcI+F7gyiuvlOXLl0v9+vXlgw8+8H19qAACeQkUzOtDPkMAAQTOPvts2bJlCxAIBFpgz549Mn/+fJkxY4b8+9//lq1btwa6vlQOAYaA+Q4ggECeAlOmTJGbb75Ztm3bJmeddZYUKVIky/kNGjTI83o+RMAPAnPmzDHf74svvljatGkjL774ogwZMsQPRaeMCFgSIAC0xMZFCKSOwO7du+WHH36QXr16RSqtzwEyCSR1vgOpUFPt+evZs6epqj73+uijjxIApkLDp3AdeQYwhRufqiMQi4DOiKxTp47cfffdUSeBnHzyybHchnMQ8KzAN998I02bNjW93BUrVpTff//dfNcXL14sLVq08Gy5KRgCdgQIAO3ocS0CKSBQsmRJ+e9//yunn356CtSWKqaiwODBg+X7778XnQUcTjoLuEyZMjJp0qRUJKHOKSDAJJAUaGSqiIAdgXbt2pkAkIRAEAV07b9Zs2ZJjx49slRPh4FffvllOXLkSBCrTZ0QkEIPhBIOCCCAQG4COhw2dOhQ2bdvn/zyyy+yYcMGWbt2beTF8jC5yXHcDwI7d+6UggULSp8+faRQoUKRIp922mny559/iv5ZtmxZP1SFMiIQlwBDwHFxcTICqSegPxxzS+wEkpsMxxFAAAFvCxAAert9KB0CCCCAgMsCP/30kxw4cEDOPPNM0ztIQiCIAnyzg9iq1AmBBAlk3gs4QVlwWwRcE9DtDceNG5clv379+smpp55qdgPRdQFZBN215iAjlwUIAF0GJzsE/CagD8k/+OCDUq1aNdFt4TZu3GiqMGzYMJk6darfqkN5EYgIPP/881K+fPnI+wULFsj06dPNXsBffPGFlCtXTkaMGIEYAoEUIAAMZLNSKQScE3j44YfN9li6MG7RokUjN9beEd0lhISAXwXWr18vzZo1ixT/rbfekssvv1x0CZgmTZrIqFGjZNGiRX6tHuVGIE8BAsA8efgQAQS0N0R7SvSHYuZZkg0bNjRrp5EQ8KvAH3/8Ydb6C6dPPvlE/va3v0Xe61Dwjh07/Fo9yo1AngIEgHny8CECCOjuCNEWgU5PT5ejR48ChIBvBXQXm5UrV5ry79mzR7799ltp1apVpD4a/LEEjG+bl4LnI8BewPkA8TECqS6gW8H95z//kexbvr322mvSuHHjVOeh/j4W0L1/BwwYYAI/3fZNZ/3qlnDhpD2C+qgDCYEgChAABrFVqRMCDgoMHz5c9Ael9gRqr9/cuXPNItA6NPzuu+86mBO38rPAzJkzzT66/+///T9TDd07Wh8d0F8g5syZk+MXCC/UVct48OBB852uUqWKvPrqq1mKtWzZMunSpYsXikoZEHBcgHUAHSflhggET0B7AEeOHGm2hNOdQfQBeQ0ML7roIs9W9ocffjAzOvXPCRMmyAknnCDz58+Xk046SerVq+fZcvu1YLojjO6bq1sHLl++XNq3by9PPPGE+SWhcOHCJsgiIYCAdwQIAL3TFpQEAQQcEvj3v/8tl1xyiXme66OPPpI1a9aYtd3GjBkjK1asEB2+JjkrcNxxx5lJQRpg33PPPbJ9+3bTS6zDq23btpXdu3c7m6GDd9PJIB988IGsW7fO3LVWrVpy4YUXSokSJRzMhVsh4C0BhoC91R6UBgEEHBC499575aGHHpJBgwZJ6dKlI3fU3qmnn37agRy4RXYBXSNS94rWAPD999839pqKFy8uGmB5Nb399ttmH2CdBJI56XC2rnPZsWNHrxadciFgS4AA0BYfFyMQTAFdHFf3+Y0l/frrr7Gc5uo5X3/9tcyePTtHnjoMnP0HfY6TOGBJQHvMNJDSiUHak3bppZea+2gPYM2aNS3dM9EX6SSPq6++Wv7+97/LnXfeKXXq1DFZfvfdd/L444+bz7Q3+Zxzzkl0Ubg/Aq4LEAC6Tk6GCIjo7hoapOjM2sw7EXjFZvz48V4piqVy6A4OOgR5yimnZLn+yy+/NDuakJwXmDhxotx3331m67TXX39djj/+eJOJLrPi1YkU2kvcq1cvee6557KAnHvuuaKvm266yTz7Om/ePOfBuCMCSRbgGcAkNwDZp4bAwIEDzd6iN954own+zjvvPNHeB31uSh+S12ekSM4J3HXXXfLZZ5+ZWZ36PNeqVatk586d0qNHD/O6//77ncuMO/lWoEKFCqaHT/9uRktfffWV+bv622+/RfuYYwj4WoAeQF83H4X3i4BOOrj++utNcd955x358ccfzQPzL774ogwdOlR0uQkvpbS0tJiLk3knhZgvSvCJuoWXru9Wo0YNE3DrUiT6Z9euXU0vFcl5AZ1sk1fKvMNGXue5+Vn2nUCy562LQB86dCj7Yd4jEAgBegAD0YxUwusC+iD8hg0bpHr16tKvXz/T86fDrBoI6pZq8QRcbtS1YMGC+T4DmJGRYc7RwMpLSculw5CVKlUyz/vpULsuXaPPpp1xxhleKmqgyqLfmewp83OkXvueaFkbNGggd9xxhxkGjpamTZtm/p5qTyAJgaAJ0AMYtBalPp4UqFy5snmw/MQTT5QFCxaY9dI06SK0mffX9UrhlyxZ4pWixF0ODQB16zqdfKABn/YCkhIvkH2YVLcJ1Gcuhw0bJg8//HDiC2AhBw389HEB/fsZnrQSvs17771nFrP+5z//aeHOXIKA9wUIAL3fRpQwAAL6g+baa681AaD2iugiuZr0OTXdfsprSZ978mvSnigN/HRJEnr83GvFaHvm6szgokWLmiVhwnvuulei/HO6/fbbzbO4l112mehC1joLWH+B0HUj169fL1dccYXo87skBIIokLPPPoi1pE4IJFnggQcekClTppjhX33er1ixYqZE2vuna9Z5PelOIPoMo86M1C3hNOnzix9//LEni64LPg8ePFi++eYbT5YvlQqlvWu6daAXk/6yoBOFdKs6DQD1uVwtq/5S9q9//cvMZo42tO3FulAmBOIV4BnAeMU4H4EUE9Afgt27d5du3bqZoE+HsnVXDV1QWZfH8OISGbq0jg6v//nnn6YHKvuODl5cu9DvX6vsz8lpT5ouxaPBuLaDV39Z8Ls75UfAqgABoFU5rkMgH4Enn3zS9PjpBBD977zSbbfdltfHSf1MJ0/og/K6fIruqqH7AWsAqM936XZrO3bsSGr5omU+c+bMaIcjx3r27Jnn53wYv0B44pAGfpmTLqKs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dX1iysZdvSHAELA32oFSIIAAAggggAACrgkQALpGbT2jAgUKSLTXSy+9FLnpsWPH5IknnpD69etL8eLFpXz58nLJJZfIsmXLsmSs540ZM0bOPPNMKVGihFSoUEFatGghU6ZMsV5ArkQAAQQQ8JRAeBawnT89VSEK47gAQ8COkzpzw99++02KFCkipUqVMjecPn26XHzxxVluXq5cOfNe/4Jfd9118uGHH8rYsWPlggsukLS0NJk4caK0bdtWXn31VbniiivMuSNGjJDnnntOnn76aWnWrJk5b8WKFaL5hdPPP/8sJ5xwghQuzNcjgsJ/IIAAAj4S+GsGsPWZvPZmEPsIKoWLyk94DzX+n3/+KQsXLpQZM2bIO++8I5999pk0bNjQlFCDvSpVqkQt7SuvvCKvvfaavP3229KxY8fIOc8//7z88ssv0qdPH7nwwgulZMmS5pxbbrlFrrnmmsh54TzCByZPniyTJk2S66+/Xnr27Gl6FUkIIIAAAgggEBwBhoA90JZff/213HnnnVK9enXp0aOHVKpUSZYsWRIJ/vIr4uzZs6VWrVpZgr/wNXpfDQI/+OADc0iDyMWLF8vu3btzve0999wjEyZMkDVr1kiTJk3M68knn8zzmvDNDh8+bHoVM79yzYgPEEAAAQQSIpARmsVr95WQgnFTzwgQACapKTQo0yBLgysdit24caM888wzsn37dvNny5Yts5SsS5cuZjg482vz5s3mnHXr1kmdOnWi1iR8XM/RNG7cOBPIaSDYoEEDufnmm2X+/PlZrtVnCDt37izvvfeebNu2zQSl2itZrVo1M5T8xhtviPZWRkujR4+WsmXLRl41atSIdhrHEEAAAQQSKKBrQNt5/s/WGtIJrBe3dk6AANA5y7ju9NRTT8nAgQNNQLdhwwYTVF111VVStGjRqPfRCR6rV6/O8qpatWrk3Fif16hbt65888038umnn0rv3r1l165dpudQh4mjJX0WUMu5atUqeeutt2T58uWmnHqPaGnIkCGyb9++yGvLli3RTuMYAggggAACCCRRgGcAk4Tfr18/M8nihRdekHr16kmnTp2ke/fuZtJGwYI543LtsTv99NOjllaHf3W4NloKH9dzwknvf/bZZ5uXBnezZs0yeQ8dOlROOeWULLfZv3+/eb7wxRdflI8++kjOO+8881ygBpLRUrFixURf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)

Exercises

    Try with a different dataset

        Another language pair

        Human → Machine (e.g. IOT commands)

        Chat → Response

        Question → Answer

    Replace the embeddings with pretrained word embeddings such as word2vec or GloVe

    Try with more layers, more hidden units, and more sentences. Compare the training time and results.

    If you use a translation file where pairs have two of the same phrase (I am test \t I am test), you can use this as an autoencoder. Try this:

        Train as an autoencoder

        Save only the Encoder network

        Train a new Decoder for translation from there

Total running time of the script: ( 7 minutes 29.706 seconds)
"""