{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%reload_ext autoreload\n", "%autoreload 2\n", "%matplotlib inline\n", "\n", "from fastai.learner import *\n", "\n", "import torchtext\n", "from torchtext import vocab, data\n", "from torchtext.datasets import language_modeling\n", "\n", "from fastai.rnn_reg import *\n", "from fastai.rnn_train import *\n", "from fastai.nlp import *\n", "from fastai.lm_rnn import *\n", "\n", "import dill as pickle\n", "import spacy" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## Language modeling" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The [large movie view dataset](http://ai.stanford.edu/~amaas/data/sentiment/) contains a collection of 50,000 reviews from IMDB. The dataset contains an even number of positive and negative reviews. The authors considered only highly polarized reviews. A negative review has a score ≤ 4 out of 10, and a positive review has a score ≥ 7 out of 10. Neutral reviews are not included in the dataset. The dataset is divided into training and test sets. The training set is the same 25,000 labeled reviews.\n", "\n", "The **sentiment classification task** consists of predicting the polarity (positive or negative) of a given text.\n", "\n", "However, before we try to classify *sentiment*, we will simply try to create a *language model*; that is, a model that can predict the next word in a sentence. Why? Because our model first needs to understand the structure of English, before we can expect it to recognize positive vs negative sentiment.\n", "\n", "So our plan of attack is the same as we used for Dogs v Cats: pretrain a model to do one thing (predict the next word), and fine tune it to do something else (classify sentiment).\n", "\n", "Unfortunately, there are no good pretrained language models available to download, so we need to create our own. To follow along with this notebook, we suggest downloading the dataset from [this location](http://files.fast.ai/data/aclImdb.tgz) on files.fast.ai." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "imdbEr.txt imdb.vocab README \u001b[0m\u001b[01;34mtest\u001b[0m/ \u001b[01;34mtrain\u001b[0m/\r\n" ] } ], "source": [ "PATH = 'data/aclImdb/'\n", "\n", "TRN_PATH = 'train/all/'\n", "VAL_PATH = 'test/all/'\n", "TRN = f'{PATH}{TRN_PATH}'\n", "VAL = f'{PATH}{VAL_PATH}'\n", "\n", "%ls {PATH}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's look inside the training folder..." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['0_0.txt',\n", " '0_3.txt',\n", " '0_9.txt',\n", " '10000_0.txt',\n", " '10000_4.txt',\n", " '10000_8.txt',\n", " '1000_0.txt',\n", " '10001_0.txt',\n", " '10001_10.txt',\n", " '10001_4.txt']" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "trn_files = !ls {TRN}\n", "trn_files[:10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "...and at an example review." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\"I have to say when a name like Zombiegeddon and an atom bomb on the front cover I was expecting a flat out chop-socky fung-ku, but what I got instead was a comedy. So, it wasn't quite was I was expecting, but I really liked it anyway! The best scene ever was the main cop dude pulling those kids over and pulling a Bad Lieutenant on them!! I was laughing my ass off. I mean, the cops were just so bad! And when I say bad, I mean The Shield Vic Macky bad. But unlike that show I was laughing when they shot people and smoked dope.

Felissa Rose...man, oh man. What can you say about that hottie. She was great and put those other actresses to shame. She should work more often!!!!! I also really liked the fight scene outside of the building. That was done really well. Lots of fighting and people getting their heads banged up. FUN! Last, but not least Joe Estevez and William Smith were great as the...well, I wasn't sure what they were, but they seemed to be having fun and throwing out lines. I mean, some of it didn't make sense with the rest of the flick, but who cares when you're laughing so hard! All in all the film wasn't the greatest thing since sliced bread, but I wasn't expecting that. It was a Troma flick so I figured it would totally suck. It's nice when something surprises you but not totally sucking.

Rent it if you want to get stoned on a Friday night and laugh with your buddies. Don't rent it if you are an uptight weenie or want a zombie movie with lots of flesh eating.

P.S. Uwe Boil was a nice touch.\"" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "review = !cat {TRN}{trn_files[6]}\n", "review[0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Sounds like I'd really enjoy *Zombiegeddon*...\n", "\n", "Now we'll check how many words are in the dataset." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "17486581\r\n" ] } ], "source": [ "!find {TRN} -name '*.txt' | xargs cat | wc -w" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5686719\r\n" ] } ], "source": [ "!find {VAL} -name '*.txt' | xargs cat | wc -w" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Before we can analyze text, we must first *tokenize* it. This refers to the process of splitting a sentence into an array of words (or more generally, into an array of *tokens*)." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "spacy_tok = spacy.load('en')" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\"I have to say when a name like Zombiegeddon and an atom bomb on the front cover I was expecting a flat out chop - socky fung - ku , but what I got instead was a comedy . So , it was n't quite was I was expecting , but I really liked it anyway ! The best scene ever was the main cop dude pulling those kids over and pulling a Bad Lieutenant on them ! ! I was laughing my ass off . I mean , the cops were just so bad ! And when I say bad , I mean The Shield Vic Macky bad . But unlike that show I was laughing when they shot people and smoked dope.

Felissa Rose ... man , oh man . What can you say about that hottie . She was great and put those other actresses to shame . She should work more often ! ! ! ! ! I also really liked the fight scene outside of the building . That was done really well . Lots of fighting and people getting their heads banged up . FUN ! Last , but not least Joe Estevez and William Smith were great as the ... well , I was n't sure what they were , but they seemed to be having fun and throwing out lines . I mean , some of it did n't make sense with the rest of the flick , but who cares when you 're laughing so hard ! All in all the film was n't the greatest thing since sliced bread , but I was n't expecting that . It was a Troma flick so I figured it would totally suck . It 's nice when something surprises you but not totally sucking.

Rent it if you want to get stoned on a Friday night and laugh with your buddies . Do n't rent it if you are an uptight weenie or want a zombie movie with lots of flesh eating.

P.S. Uwe Boil was a nice touch .\"" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "' '.join([sent.string.strip() for sent in spacy_tok(review[0])])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We use Pytorch's [torchtext](https://github.com/pytorch/text) library to preprocess our data, telling it to use the wonderful [spacy](https://spacy.io/) library to handle tokenization.\n", "\n", "First, we create a torchtext *field*, which describes how to preprocess a piece of text - in this case, we tell torchtext to make everything lowercase, and tokenize it with spacy." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "TEXT = data.Field(lower=True, tokenize='spacy')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "fastai works closely with torchtext. We create a ModelData object for language modeling by taking advantage of `LanguageModelData`, passing it our torchtext field object, and the paths to our training, test, and validation sets. In this case, we don't have a separate test set, so we'll just use `VAL_PATH` for that too.\n", "\n", "As well as the usual `bs` (batch size) parameter, we also not have `bptt`; this define how many words are processing at a time in each row of the mini-batch. More importantly, it defines how many 'layers' we will backprop through. Making this number higher will increase time and memory requirements, but will improve the model's ability to handle long sentences." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "bs=64; bptt=70" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "FILES = dict(train=TRN_PATH, validation=VAL_PATH, test=VAL_PATH)\n", "md = LanguageModelData.from_text_files(PATH, TEXT, **FILES, bs=bs, bptt=bptt, min_freq=10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After building our `ModelData` object, it automatically fills the `TEXT` object with a very important attribute: `TEXT.vocab`. This is a *vocabulary*, which stores which words (or *tokens*) have been seen in the text, and how each word will be mapped to a unique integer id. We'll need to use this information again later, so we save it.\n", "\n", "*(Technical note: python's standard `Pickle` library can't handle this correctly, so at the top of this notebook we used the `dill` library instead and imported it as `pickle`)*." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "pickle.dump(TEXT, open(f'{PATH}models/TEXT.pkl', 'wb'))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here are the: # batches; # unique tokens in the vocab; # tokens in the training set; # sentences" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(4602, 34945, 1, 20621966)" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(md.trn_dl), md.nt, len(md.trn_ds), len(md.trn_ds[0].text)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is the start of the mapping from integer IDs to unique tokens." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "['', '', 'the', ',', '.', 'and', 'a', 'of', 'to', 'is', 'it', 'in']" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 'itos': 'int-to-string'\n", "TEXT.vocab.itos[:12]" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "2" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 'stoi': 'string to int'\n", "TEXT.vocab.stoi['the']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that in a `LanguageModelData` object there is only one item in each dataset: all the words of the text joined together." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['i',\n", " 'have',\n", " 'always',\n", " 'loved',\n", " 'this',\n", " 'story',\n", " '-',\n", " 'the',\n", " 'hopeful',\n", " 'theme',\n", " ',',\n", " 'the']" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "md.trn_ds[0].text[:12]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "torchtext will handle turning this words into integer IDs for us automatically." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Variable containing:\n", " 12\n", " 35\n", " 227\n", " 480\n", " 13\n", " 76\n", " 17\n", " 2\n", " 7319\n", " 769\n", " 3\n", " 2\n", "[torch.cuda.LongTensor of size 12x1 (GPU 0)]" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "TEXT.numericalize([md.trn_ds[0].text[:12]])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Our `LanguageModelData` object will create batches with 64 columns (that's our batch size), and varying sequence lengths of around 80 tokens (that's our `bptt` parameter - *backprop through time*).\n", "\n", "Each batch also contains the exact same data as labels, but one word later in the text - since we're trying to always predict the next word. The labels are flattened into a 1d array." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(Variable containing:\n", " 12 567 3 ... 2118 4 2399\n", " 35 7 33 ... 6 148 55\n", " 227 103 533 ... 4892 31 10\n", " ... ⋱ ... \n", " 19 8879 33 ... 41 24 733\n", " 552 8250 57 ... 219 57 1777\n", " 5 19 2 ... 3099 8 48\n", " [torch.cuda.LongTensor of size 77x64 (GPU 0)], Variable containing:\n", " 35\n", " 7\n", " 33\n", " ⋮ \n", " 22\n", " 3885\n", " 21587\n", " [torch.cuda.LongTensor of size 4928 (GPU 0)])" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "next(iter(md.trn_dl))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Train" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have a number of parameters to set - we'll learn more about these later, but you should find these values suitable for many problems." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "em_sz = 200 # size of each embedding vector\n", "nh = 500 # number of hidden activations per layer\n", "nl = 3 # number of layers" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Researchers have found that large amounts of *momentum* (which we'll learn about later) don't work well with these kinds of *RNN* models, so we create a version of the *Adam* optimizer with less momentum than it's default of `0.9`." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "opt_fn = partial(optim.Adam, betas=(0.7, 0.99))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "fastai uses a variant of the state of the art [AWD LSTM Language Model](https://arxiv.org/abs/1708.02182) developed by Stephen Merity. A key feature of this model is that it provides excellent regularization through [Dropout](https://en.wikipedia.org/wiki/Convolutional_neural_network#Dropout). There is no simple way known (yet!) to find the best values of the dropout parameters below - you just have to experiment...\n", "\n", "However, the other parameters (`alpha`, `beta`, and `clip`) shouldn't generally need tuning." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": true }, "outputs": [], "source": [ "learner = md.get_model(opt_fn, em_sz, nh, nl,\n", " dropouti=0.05, dropout=0.05, wdrop=0.1, dropoute=0.02, dropouth=0.05)\n", "learner.reg_fn = partial(seq2seq_reg, alpha=2, beta=1)\n", "learner.clip=0.3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you can see below, I gradually tuned the language model in a few stages. I possibly could have trained it further (it wasn't yet overfitting), but I didn't have time to experiment more. Maybe you can see if you can train it to a better accuracy! (I used `lr_find` to find a good learning rate, but didn't save the output in this notebook. Feel free to try running it yourself now.)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Widget Javascript not detected. It may not be installed or enabled properly.\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "04fcfdf44a3d45a2b0029992fa060855" } }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "[ 0. 4.85167 4.72509] \n", "[ 1. 4.65204 4.51418] \n", "[ 2. 4.52936 4.43176] \n", "[ 3. 4.57711 4.45321] \n", "[ 4. 4.49827 4.37943] \n", "[ 5. 4.41825 4.32227] \n", "[ 6. 4.40372 4.30466] \n", "[ 7. 4.52163 4.39423] \n", "[ 8. 4.48485 4.36614] \n", "[ 9. 4.43876 4.33174] \n", "[ 10. 4.40153 4.30196] \n", "[ 11. 4.38985 4.27407] \n", "[ 12. 4.31973 4.24876] \n", "[ 13. 4.29297 4.2362 ] \n", "[ 14. 4.31048 4.23348] \n", "\n" ] } ], "source": [ "learner.fit(3e-3, 4, wds=1e-6, cycle_len=1, cycle_mult=2)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": true }, "outputs": [], "source": [ "learner.load_cycle('adam3_10', 2)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Widget Javascript not detected. It may not be installed or enabled properly.\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "6df5311d05f640cd80aa9f8a0a8e1350" } }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "[ 0. 4.3926 4.2917] \n", "[ 1. 4.37693 4.28255] \n", "[ 2. 4.37998 4.27243] \n", "[ 3. 4.34284 4.24789] \n", "[ 4. 4.3287 4.2317] \n", "[ 5. 4.28881 4.20722] \n", "[ 6. 4.24637 4.18926] \n", "[ 7. 4.23797 4.17644] \n", "[ 8. 4.20074 4.16989] \n", "[ 9. 4.18873 4.16866] \n", "\n" ] } ], "source": [ "learner.fit(3e-3, 1, wds=1e-6, cycle_len=10)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": true }, "outputs": [], "source": [ "learner.save_encoder('adam3_10_enc')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the sentiment analysis section, we'll just need half of the language model - the *encoder*, so we save that part." ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": true }, "outputs": [], "source": [ "learner.save_encoder('adam3_20_enc')" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "learner.load_encoder('adam3_20_enc')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Language modeling accuracy is generally measured using the metric *perplexity*, which is simply `exp()` of the loss function we used." ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "64.3926824434624" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "math.exp(4.165)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "pickle.dump(TEXT, open(f'{PATH}models/TEXT.pkl','wb'))" ] }, { "cell_type": "markdown", "metadata": { "heading_collapsed": true }, "source": [ "### Test" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "We can play around with our language model a bit to check it seems to be working OK. First, let's create a short bit of text to 'prime' a set of predictions. We'll use our torchtext field to numericalize it so we can feed it to our language model." ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "\". So , it was n't quite was I was expecting , but I really liked it anyway ! The best\"" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m = learner.model\n", "ss = \"\"\". So, it wasn't quite was I was expecting, but I really liked it anyway! The best\"\"\"\n", "s = [spacy_tok(ss)]\n", "t = TEXT.numericalize(s)\n", "' '.join(s[0])" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "We haven't yet added methods to make it easy to test a language model, so we'll need to manually go through the steps." ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": true, "hidden": true }, "outputs": [], "source": [ "# Set batch size to 1\n", "m[0].bs = 1\n", "# Turn off dropout\n", "m.eval()\n", "# Reset hidden state\n", "m.reset()\n", "# Get predictions from model\n", "res,*_ = m(t)\n", "# Put the batch size back to what it was\n", "m[0].bs = bs" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "Let's see what the top 10 predictions were for the next word after our short text:" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "hidden": true }, "outputs": [ { "data": { "text/plain": [ "['film',\n", " 'movie',\n", " 'of',\n", " 'thing',\n", " 'part',\n", " '',\n", " 'performance',\n", " 'scene',\n", " ',',\n", " 'actor']" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nexts = torch.topk(res[-1], 10)[1]\n", "[TEXT.vocab.itos[o] for o in to_np(nexts)]" ] }, { "cell_type": "markdown", "metadata": { "hidden": true }, "source": [ "...and let's see if our model can generate a bit more text all by itself!" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "hidden": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ ". So, it wasn't quite was I was expecting, but I really liked it anyway! The best \n", "\n", "film ever ! i saw this movie at the toronto international film festival . i was very impressed . i was very impressed with the acting . i was very impressed with the acting . i was surprised to see that the actors were not in the movie . ...\n" ] } ], "source": [ "print(ss,\"\\n\")\n", "for i in range(50):\n", " n = res[-1].topk(2)[1]\n", " n = n[1] if n.data[0] == 0 else n[0]\n", " print(TEXT.vocab.itos[n.data[0]], end=' ')\n", " res,*_ = m(n[0].unsqueeze(0))\n", "print('...')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sentiment" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We'll need to the saved vocab from the language model, since we need to ensure the same words map to the same IDs." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "TEXT = pickle.load(open(f'{PATH}models/TEXT.pkl','rb'))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`sequential=False` tells torchtext that a text field should be tokenized (in this case, we just want to store the 'positive' or 'negative' single label).\n", "\n", "`splits` is a torchtext method that creates train, test, and validation sets. The IMDB dataset is built into torchtext, so we can take advantage of that. Take a look at `lang_model-arxiv.ipynb` to see how to define your own fastai/torchtext datasets." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "IMDB_LABEL = data.Field(sequential=False)\n", "splits = torchtext.datasets.IMDB.splits(TEXT, IMDB_LABEL, 'data/')" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "t = splits[0].examples[0]" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "('pos',\n", " 'this was another great tom berenger movie .. but some people are right it was like')" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "t.label, ' '.join(t.text[:16])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "fastai can create a ModelData object directly from torchtext splits." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "md2 = TextData.from_splits(PATH, splits, bs)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "m3 = md2.get_model(opt_fn, 1500, bptt, emb_sz=em_sz, n_hid=nh, n_layers=nl, \n", " dropout=0.1, dropouti=0.4, wdrop=0.5, dropoute=0.05, dropouth=0.3)\n", "m3.reg_fn = partial(seq2seq_reg, alpha=2, beta=1)\n", "m3.load_encoder(f'adam3_20_enc')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Because we're fine-tuning a pretrained model, we'll use differential learning rates, and also increase the max gradient for clipping, to allow the SGDR to work better." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "m3.clip = 25.\n", "lrs = np.array([1e-4, 1e-4, 1e-4, 1e-3, 1e-2])" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "scrolled": true }, "outputs": [], "source": [ "m3.freeze_to(-1)\n", "m3.fit(lrs / 2, 1, metrics=[accuracy])\n", "m3.unfreeze()\n", "m3.fit(lrs, 1, metrics=[accuracy], cycle_len=1)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Widget Javascript not detected. It may not be installed or enabled properly.\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "f5102883a24b48ea97058c8e7dbab533" } }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "[ 0. 0.29053 0.18292 0.93241] \n", "[ 1. 0.24058 0.18233 0.93313] \n", "[ 2. 0.24244 0.17261 0.93714] \n", "[ 3. 0.21166 0.17143 0.93866] \n", "[ 4. 0.2062 0.17143 0.94042] \n", "[ 5. 0.18951 0.16591 0.94083] \n", "[ 6. 0.20527 0.16631 0.9393 ] \n", "[ 7. 0.17372 0.16162 0.94159] \n", "[ 8. 0.17434 0.17213 0.94063] \n", "[ 9. 0.16285 0.16073 0.94311] \n", "[ 10. 0.16327 0.17851 0.93998] \n", "[ 11. 0.15795 0.16042 0.94267] \n", "[ 12. 0.1602 0.16015 0.94199] \n", "[ 13. 0.15503 0.1624 0.94171] \n", "\n" ] } ], "source": [ "m3.fit(lrs, 7, metrics=[accuracy], cycle_len=2, cycle_save_name='imdb2')" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": true }, "outputs": [], "source": [ "m3.load_cycle('imdb2', 4)" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.94310897435897434" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "accuracy_np(*m3.predict_with_targs())" ] }, { "attachments": { "image.png": { "image/png": "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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "A recent paper from Bradbury et al, [Learned in translation: contextualized word vectors](https://einstein.ai/research/learned-in-translation-contextualized-word-vectors), has a handy summary of the latest academic research in solving this IMDB sentiment analysis problem. Many of the latest algorithms shown are tuned for this specific problem.\n", "\n", "![image.png](attachment:image.png)\n", "\n", "As you see, we just got a new state of the art result in sentiment analysis, decreasing the error from 5.9% to 5.5%! You should be able to get similarly world-class results on other NLP classification problems using the same basic steps.\n", "\n", "There are many opportunities to further improve this, although we won't be able to get to them until part 2 of this course..." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.4" }, "toc": { "colors": { "hover_highlight": "#DAA520", "navigate_num": "#000000", "navigate_text": "#333333", "running_highlight": "#FF0000", "selected_highlight": "#FFD700", "sidebar_border": "#EEEEEE", "wrapper_background": "#FFFFFF" }, "moveMenuLeft": true, "nav_menu": { "height": "123px", "width": "251px" }, "navigate_menu": true, "number_sections": true, "sideBar": true, "threshold": 4, "toc_cell": false, "toc_section_display": "block", "toc_window_display": false, "widenNotebook": false } }, "nbformat": 4, "nbformat_minor": 2 }