{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 7. Neural Machine Translation and Models with Attention" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I recommend you take a look at these material first." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* http://web.stanford.edu/class/cs224n/lectures/cs224n-2017-lecture9.pdf\n", "* http://web.stanford.edu/class/cs224n/lectures/cs224n-2017-lecture10.pdf\n", "* http://web.stanford.edu/class/cs224n/lectures/cs224n-2017-lecture11.pdf\n", "* https://arxiv.org/pdf/1409.0473.pdf\n", "* https://github.com/spro/practical-pytorch/blob/master/seq2seq-translation/seq2seq-translation-batched.ipynb\n", "* https://medium.com/huggingface/understanding-emotions-from-keras-to-pytorch-3ccb61d5a983\n", "* http://www.manythings.org/anki/" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import torch\n", "import torch.nn as nn\n", "from torch.autograd import Variable\n", "import torch.optim as optim\n", "import torch.nn.functional as F\n", "import nltk\n", "import random\n", "import numpy as np\n", "from collections import Counter, OrderedDict\n", "import nltk\n", "from copy import deepcopy\n", "import os\n", "import re\n", "import unicodedata\n", "flatten = lambda l: [item for sublist in l for item in sublist]\n", "\n", "from torch.nn.utils.rnn import PackedSequence,pack_padded_sequence\n", "import matplotlib.pyplot as plt\n", "import matplotlib.ticker as ticker\n", "random.seed(1024)\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "USE_CUDA = torch.cuda.is_available()\n", "gpus = [0]\n", "torch.cuda.set_device(gpus[0])\n", "\n", "FloatTensor = torch.cuda.FloatTensor if USE_CUDA else torch.FloatTensor\n", "LongTensor = torch.cuda.LongTensor if USE_CUDA else torch.LongTensor\n", "ByteTensor = torch.cuda.ByteTensor if USE_CUDA else torch.ByteTensor" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def getBatch(batch_size, train_data):\n", " random.shuffle(train_data)\n", " sindex=0\n", " eindex=batch_size\n", " while eindex < len(train_data):\n", " batch = train_data[sindex: eindex]\n", " temp = eindex\n", " eindex = eindex + batch_size\n", " sindex = temp\n", " yield batch\n", " \n", " if eindex >= len(train_data):\n", " batch = train_data[sindex:]\n", " yield batch" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Padding" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "