{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"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": {},
"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": null,
"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": null,
"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": null,
"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": null,
"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": null,
"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": null,
"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": null,
"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": "markdown",
"metadata": {},
"source": [
"*Note:* If you get an error like:\n",
"\n",
" Can't find model 'en'. It doesn't seem to be a shortcut link, a Python package or a valid path to a data directory.\n",
" \n",
"then you need to install the Spacy language model by running this command on the command-line:\n",
"\n",
" $ python -m spacy download en"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"spacy_tok = spacy.load('en')"
]
},
{
"cell_type": "code",
"execution_count": null,
"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": null,
"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": null,
"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 now 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": null,
"metadata": {},
"outputs": [],
"source": [
"bs=64; bptt=70"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"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": {},
"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": null,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(4602, 34945, 1, 20621966)"
]
},
"execution_count": null,
"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": null,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['', '', 'the', ',', '.', 'and', 'a', 'of', 'to', 'is', 'it', 'in']"
]
},
"execution_count": null,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 'itos': 'int-to-string'\n",
"TEXT.vocab.itos[:12]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2"
]
},
"execution_count": null,
"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": null,
"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": null,
"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": null,
"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": null,
"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": null,
"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": null,
"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": null,
"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": null,
"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": null,
"metadata": {},
"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": null,
"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": null,
"metadata": {},
"outputs": [],
"source": [
"learner.save_encoder('adam1_enc')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"learner.load_encoder('adam1_enc')"
]
},
{
"cell_type": "code",
"execution_count": null,
"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": "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": "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": null,
"metadata": {},
"outputs": [],
"source": [
"learner.save_encoder('adam3_10_enc')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"learner.load_encoder('adam3_10_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": null,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"64.3926824434624"
]
},
"execution_count": null,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"math.exp(4.165)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"pickle.dump(TEXT, open(f'{PATH}models/TEXT.pkl','wb'))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Test"
]
},
{
"cell_type": "markdown",
"metadata": {},
"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": null,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"\". So , it was n't quite was I was expecting , but I really liked it anyway ! The best\""
]
},
"execution_count": null,
"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 = [TEXT.preprocess(ss)]\n",
"t=TEXT.numericalize(s)\n",
"' '.join(s[0])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"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": null,
"metadata": {},
"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": {},
"source": [
"Let's see what the top 10 predictions were for the next word after our short text:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['film',\n",
" 'movie',\n",
" 'of',\n",
" 'thing',\n",
" 'part',\n",
" '',\n",
" 'performance',\n",
" 'scene',\n",
" ',',\n",
" 'actor']"
]
},
"execution_count": null,
"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": {},
"source": [
"...and let's see if our model can generate a bit more text all by itself!"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"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": null,
"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": null,
"metadata": {},
"outputs": [],
"source": [
"IMDB_LABEL = data.Field(sequential=False)\n",
"splits = torchtext.datasets.IMDB.splits(TEXT, IMDB_LABEL, 'data/')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"t = splits[0].examples[0]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"('pos',\n",
" 'this was another great tom berenger movie .. but some people are right it was like')"
]
},
"execution_count": null,
"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": null,
"metadata": {},
"outputs": [],
"source": [
"md2 = TextData.from_splits(PATH, splits, bs)"
]
},
{
"cell_type": "code",
"execution_count": null,
"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_10_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": null,
"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": null,
"metadata": {},
"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": null,
"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": "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": null,
"metadata": {},
"outputs": [],
"source": [
"m3.load_cycle('imdb2', 4)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.94310897435897434"
]
},
"execution_count": null,
"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..."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### End"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}