diff --git a/dl1/lesson5-movielens.ipynb b/dl1/lesson5-movielens.ipynb
index 0f08d21..3c96a43 100644
--- a/dl1/lesson5-movielens.ipynb
+++ b/dl1/lesson5-movielens.ipynb
@@ -1 +1,2479 @@
-{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"lesson5-movielens.ipynb","version":"0.3.2","views":{},"default_view":{},"provenance":[]},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"accelerator":"GPU"},"cells":[{"metadata":{"id":"gxzvVBdrarg9","colab_type":"text"},"cell_type":"markdown","source":["**Initialization**\n","\n","The next few steps(or code snippets) initialize the colab environment for running the fast.ai course. Each line of code that added are in place to avoid any error, please do not change the position of any snippet if you do not know what they do.\n","\n","Note:- You will get an error saying that the code is closing in the memory limit of 12Gb. You can click 'terminate other runtimes'.\n"," This error is popping up because the dataset is taking up most of the space, so don't worry\n"," "]},{"metadata":{"id":"AJU6OF0maw8j","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{"item_id":4}],"base_uri":"https://localhost:8080/","height":106},"outputId":"b9c793ec-8977-4139-8d2e-d5fdb4b1c021","executionInfo":{"status":"ok","timestamp":1521147562289,"user_tz":-330,"elapsed":32037,"user":{"displayName":"sriram vijendran","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s128","userId":"106326660524926425973"}}},"cell_type":"code","source":["!apt-get install -y -qq software-properties-common python-software-properties module-init-tools\n","!add-apt-repository -y ppa:alessandro-strada/ppa 2>&1 > /dev/null\n","!apt-get update -qq 2>&1 > /dev/null\n","!apt-get -y install -qq google-drive-ocamlfuse fuse\n","from google.colab import auth\n","auth.authenticate_user()\n","from oauth2client.client import GoogleCredentials\n","creds = GoogleCredentials.get_application_default()\n","import getpass\n","!google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} < /dev/null 2>&1 | grep URL\n","vcode = getpass.getpass()\n","!echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret}"],"execution_count":1,"outputs":[{"output_type":"stream","text":["Please, open the following URL in a web browser: https://accounts.google.com/o/oauth2/auth?client_id=32555940559.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&response_type=code&access_type=offline&approval_prompt=force\r\n","··········\n","Please, open the following URL in a web browser: https://accounts.google.com/o/oauth2/auth?client_id=32555940559.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&response_type=code&access_type=offline&approval_prompt=force\n","Please enter the verification code: Access token retrieved correctly.\n"],"name":"stdout"}]},{"metadata":{"id":"cBKhUk5Va0GD","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["# http://pytorch.org/\n","# pre installation\n","from os import path\n","from wheel.pep425tags import get_abbr_impl, get_impl_ver, get_abi_tag\n","platform = '{}{}-{}'.format(get_abbr_impl(), get_impl_ver(), get_abi_tag())\n","\n","accelerator = 'cu80' if path.exists('/opt/bin/nvidia-smi') else 'cpu'\n","\n","!pip install -q http://download.pytorch.org/whl/{accelerator}/torch-0.3.0.post4-{platform}-linux_x86_64.whl torchvision\n","import torch"],"execution_count":0,"outputs":[]},{"metadata":{"id":"rrEX2Hgpa3QG","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{"item_id":18},{"item_id":30},{"item_id":49},{"item_id":106}],"base_uri":"https://localhost:8080/","height":3406},"outputId":"177a3339-d483-43cd-c6f5-2c61ec5c9a54","executionInfo":{"status":"ok","timestamp":1521147845450,"user_tz":-330,"elapsed":233425,"user":{"displayName":"sriram vijendran","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s128","userId":"106326660524926425973"}}},"cell_type":"code","source":["!pip install fastai"],"execution_count":3,"outputs":[{"output_type":"stream","text":["Collecting fastai\n"," Downloading fastai-0.6.tar.gz (429kB)\n","\u001b[K 100% |████████████████████████████████| 430kB 1.9MB/s \n","\u001b[?25hRequirement already satisfied: Jinja2 in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: MarkupSafe in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: Pillow in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: PyYAML in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: Pygments in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Collecting awscli (from fastai)\n"," Downloading awscli-1.14.56-py2.py3-none-any.whl (1.2MB)\n","\u001b[K 100% |████████████████████████████████| 1.2MB 1.0MB/s \n","\u001b[?25hCollecting bcolz (from fastai)\n"," Downloading bcolz-1.1.2.tar.gz (1.3MB)\n","\u001b[K 100% |████████████████████████████████| 1.3MB 914kB/s \n","\u001b[?25hRequirement already satisfied: bleach in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: certifi in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: cycler in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: decorator in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: entrypoints in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Collecting feather-format (from fastai)\n"," Downloading feather-format-0.4.0.tar.gz\n","Collecting graphviz (from fastai)\n"," Downloading graphviz-0.8.2-py2.py3-none-any.whl\n","Requirement already satisfied: html5lib in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: ipykernel in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: ipython in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: ipython-genutils in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Collecting ipywidgets (from fastai)\n"," Downloading ipywidgets-7.1.2-py2.py3-none-any.whl (68kB)\n","\u001b[K 100% |████████████████████████████████| 71kB 7.5MB/s \n","\u001b[?25hCollecting isoweek (from fastai)\n"," Downloading isoweek-1.3.3-py2.py3-none-any.whl\n","Collecting jedi (from fastai)\n"," Downloading jedi-0.11.1-py2.py3-none-any.whl (250kB)\n","\u001b[K 100% |████████████████████████████████| 256kB 3.4MB/s \n","\u001b[?25hRequirement already satisfied: jsonschema in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Collecting jupyter (from fastai)\n"," Downloading jupyter-1.0.0-py2.py3-none-any.whl\n","Requirement already satisfied: jupyter-client in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Collecting jupyter-console (from fastai)\n"," Downloading jupyter_console-5.2.0-py2.py3-none-any.whl\n","Requirement already satisfied: jupyter-core in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Collecting jupyter_contrib_nbextensions (from fastai)\n"," Downloading jupyter_contrib_nbextensions-0.4.0-py2.py3-none-any.whl (20.8MB)\n","\u001b[K 100% |████████████████████████████████| 20.8MB 64kB/s \n","\u001b[?25hCollecting kaggle-cli (from fastai)\n"],"name":"stdout"},{"output_type":"stream","text":[" Downloading kaggle-cli-0.12.13.tar.gz\n","Requirement already satisfied: matplotlib in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: mistune in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: nbconvert in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: nbformat in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: notebook in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: numpy in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: olefile in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: opencv-python in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: pandas in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Collecting pandas_summary (from fastai)\n"," Downloading pandas-summary-0.0.41.tar.gz\n","Requirement already satisfied: pandocfilters in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: pexpect in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: pickleshare in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Collecting plotnine (from fastai)\n"," Downloading plotnine-0.3.0-py2.py3-none-any.whl (3.4MB)\n","\u001b[K 100% |████████████████████████████████| 3.4MB 395kB/s \n","\u001b[?25hRequirement already satisfied: prompt-toolkit in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: ptyprocess in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: pyparsing in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: python-dateutil in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: pytz in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: pyzmq in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Collecting qtconsole (from fastai)\n"," Downloading qtconsole-4.3.1-py2.py3-none-any.whl (108kB)\n","\u001b[K 100% |████████████████████████████████| 112kB 7.9MB/s \n","\u001b[?25hRequirement already satisfied: scipy in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: seaborn in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: simplegeneric in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: six in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Collecting sklearn_pandas (from fastai)\n"," Downloading sklearn_pandas-1.6.0-py2.py3-none-any.whl\n","Requirement already satisfied: terminado in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: testpath in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Collecting torchtext (from fastai)\n"," Downloading torchtext-0.2.1-py3-none-any.whl (41kB)\n","\u001b[K 100% |████████████████████████████████| 51kB 10.9MB/s \n","\u001b[?25hRequirement already satisfied: tornado in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Collecting tqdm (from fastai)\n"," Downloading tqdm-4.19.7-py2.py3-none-any.whl (52kB)\n","\u001b[K 100% |████████████████████████████████| 61kB 11.7MB/s \n","\u001b[?25hRequirement already satisfied: traitlets in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: wcwidth in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Requirement already satisfied: webencodings in /usr/local/lib/python3.6/dist-packages (from fastai)\n","Collecting widgetsnbextension (from fastai)\n"," Downloading widgetsnbextension-3.1.4-py2.py3-none-any.whl (2.2MB)\n","\u001b[K 100% |████████████████████████████████| 2.2MB 582kB/s \n","\u001b[?25hCollecting colorama<=0.3.7,>=0.2.5 (from awscli->fastai)\n"," Downloading colorama-0.3.7-py2.py3-none-any.whl\n","Collecting docutils>=0.10 (from awscli->fastai)\n"," Downloading docutils-0.14-py3-none-any.whl (543kB)\n","\u001b[K 100% |████████████████████████████████| 552kB 2.4MB/s \n","\u001b[?25hRequirement already satisfied: rsa<=3.5.0,>=3.1.2 in /usr/local/lib/python3.6/dist-packages (from awscli->fastai)\n","Collecting s3transfer<0.2.0,>=0.1.12 (from awscli->fastai)\n"," Downloading s3transfer-0.1.13-py2.py3-none-any.whl (59kB)\n","\u001b[K 100% |████████████████████████████████| 61kB 10.4MB/s \n"],"name":"stdout"},{"output_type":"stream","text":["\u001b[?25hCollecting botocore==1.9.9 (from awscli->fastai)\n"," Downloading botocore-1.9.9-py2.py3-none-any.whl (4.1MB)\n","\u001b[K 100% |████████████████████████████████| 4.1MB 336kB/s \n","\u001b[?25hCollecting pyarrow>=0.4.0 (from feather-format->fastai)\n"," Downloading pyarrow-0.8.0-cp36-cp36m-manylinux1_x86_64.whl (6.9MB)\n","\u001b[K 100% |████████████████████████████████| 6.9MB 196kB/s \n","\u001b[?25hRequirement already satisfied: setuptools>=18.5 in /usr/lib/python3/dist-packages (from ipython->fastai)\n","Collecting parso==0.1.1 (from jedi->fastai)\n"," Downloading parso-0.1.1-py2.py3-none-any.whl (91kB)\n","\u001b[K 100% |████████████████████████████████| 92kB 10.1MB/s \n","\u001b[?25hCollecting jupyter-highlight-selected-word>=0.0.10 (from jupyter_contrib_nbextensions->fastai)\n"," Downloading jupyter_highlight_selected_word-0.1.0-py2.py3-none-any.whl\n","Collecting jupyter-latex-envs>=1.3.8 (from jupyter_contrib_nbextensions->fastai)\n"," Downloading jupyter_latex_envs-1.4.4.tar.gz (855kB)\n","\u001b[K 100% |████████████████████████████████| 860kB 1.5MB/s \n","\u001b[?25hCollecting lxml (from jupyter_contrib_nbextensions->fastai)\n"," Downloading lxml-4.2.0-cp36-cp36m-manylinux1_x86_64.whl (5.6MB)\n","\u001b[K 100% |████████████████████████████████| 5.7MB 236kB/s \n","\u001b[?25hCollecting jupyter-nbextensions-configurator>=0.4.0 (from jupyter_contrib_nbextensions->fastai)\n"," Downloading jupyter_nbextensions_configurator-0.4.0-py2.py3-none-any.whl (466kB)\n","\u001b[K 100% |████████████████████████████████| 471kB 2.6MB/s \n","\u001b[?25hCollecting jupyter-contrib-core>=0.3.3 (from jupyter_contrib_nbextensions->fastai)\n"," Downloading jupyter_contrib_core-0.3.3-py2.py3-none-any.whl\n","Collecting MechanicalSoup<0.9,>=0.7.0 (from kaggle-cli->fastai)\n"," Downloading MechanicalSoup-0.8.0-py2.py3-none-any.whl\n","Requirement already satisfied: beautifulsoup4<4.7,>=4.6.0 in /usr/local/lib/python3.6/dist-packages (from kaggle-cli->fastai)\n","Collecting cliff<2.9,>=2.8.0 (from kaggle-cli->fastai)\n"," Downloading cliff-2.8.0.tar.gz (71kB)\n","\u001b[K 100% |████████████████████████████████| 81kB 11.6MB/s \n","\u001b[?25hCollecting configparser (from kaggle-cli->fastai)\n"," Downloading configparser-3.5.0.tar.gz\n","Collecting cssselect<1.1,>=1.0.1 (from kaggle-cli->fastai)\n"," Downloading cssselect-1.0.3-py2.py3-none-any.whl\n","Collecting progressbar2<3.35,>=3.34.3 (from kaggle-cli->fastai)\n"," Downloading progressbar2-3.34.3-py2.py3-none-any.whl\n","Collecting mizani>=0.4.1 (from plotnine->fastai)\n"," Downloading mizani-0.4.5-py2.py3-none-any.whl (65kB)\n","\u001b[K 100% |████████████████████████████████| 71kB 10.2MB/s \n","\u001b[?25hRequirement already satisfied: statsmodels>=0.8.0 in /usr/local/lib/python3.6/dist-packages (from plotnine->fastai)\n","Requirement already satisfied: patsy>=0.4.1 in /usr/local/lib/python3.6/dist-packages (from plotnine->fastai)\n","Requirement already satisfied: scikit-learn>=0.15.0 in /usr/local/lib/python3.6/dist-packages (from sklearn_pandas->fastai)\n","Requirement already satisfied: requests in /usr/local/lib/python3.6/dist-packages (from torchtext->fastai)\n","Requirement already satisfied: pyasn1>=0.1.3 in /usr/local/lib/python3.6/dist-packages (from rsa<=3.5.0,>=3.1.2->awscli->fastai)\n","Collecting jmespath<1.0.0,>=0.7.1 (from botocore==1.9.9->awscli->fastai)\n"," Downloading jmespath-0.9.3-py2.py3-none-any.whl\n","Collecting PrettyTable<0.8,>=0.7.1 (from cliff<2.9,>=2.8.0->kaggle-cli->fastai)\n"," Downloading prettytable-0.7.2.zip\n","Collecting cmd2>=0.6.7 (from cliff<2.9,>=2.8.0->kaggle-cli->fastai)\n"," Downloading cmd2-0.8.1.tar.gz (89kB)\n","\u001b[K 100% |████████████████████████████████| 92kB 10.5MB/s \n","\u001b[?25hCollecting pbr!=2.1.0,>=2.0.0 (from cliff<2.9,>=2.8.0->kaggle-cli->fastai)\n"," Downloading pbr-3.1.1-py2.py3-none-any.whl (99kB)\n","\u001b[K 100% |████████████████████████████████| 102kB 10.4MB/s \n","\u001b[?25hCollecting stevedore>=1.20.0 (from cliff<2.9,>=2.8.0->kaggle-cli->fastai)\n"," Downloading stevedore-1.28.0-py2.py3-none-any.whl\n","Collecting python-utils>=2.1.0 (from progressbar2<3.35,>=3.34.3->kaggle-cli->fastai)\n"," Downloading python_utils-2.3.0-py2.py3-none-any.whl\n","Collecting palettable (from mizani>=0.4.1->plotnine->fastai)\n"," Downloading palettable-3.1.0-py2.py3-none-any.whl (78kB)\n","\u001b[K 100% |████████████████████████████████| 81kB 10.3MB/s \n"],"name":"stdout"},{"output_type":"stream","text":["\u001b[?25hRequirement already satisfied: urllib3<1.23,>=1.21.1 in /usr/local/lib/python3.6/dist-packages (from requests->torchtext->fastai)\r\n","Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /usr/local/lib/python3.6/dist-packages (from requests->torchtext->fastai)\r\n","Requirement already satisfied: idna<2.7,>=2.5 in /usr/local/lib/python3.6/dist-packages (from requests->torchtext->fastai)\n","Collecting pyperclip (from cmd2>=0.6.7->cliff<2.9,>=2.8.0->kaggle-cli->fastai)\n"," Downloading pyperclip-1.6.0.tar.gz\n","Building wheels for collected packages: fastai, bcolz, feather-format, kaggle-cli, pandas-summary, jupyter-latex-envs, cliff, configparser, PrettyTable, cmd2, pyperclip\n"," Running setup.py bdist_wheel for fastai ... \u001b[?25l-\b \b\\\b \bdone\n","\u001b[?25h Stored in directory: /content/.cache/pip/wheels/13/6b/e1/1f1c38574e6abf3cfd747b345213ed1a4e2bf149646e16408d\n"," Running setup.py bdist_wheel for bcolz ... \u001b[?25l-\b \b\\\b \b|\b \b/\b \b-\b \b\\\b \b|\b \b/\b \b-\b \b\\\b \b|\b \b/\b \b-\b \b\\\b \b|\b \b/\b \b-\b \b\\\b \b|\b \b/\b \b-\b \b\\\b \b|\b \b/\b \b-\b \b\\\b \b|\b \b/\b \b-\b \b\\\b \b|\b \b/\b \b-\b \b\\\b \b|\b \b/\b \b-\b \b\\\b \b|\b \b/\b \b-\b \b\\\b \b|\b \b/\b \b-\b \b\\\b \b|\b \bdone\n","\u001b[?25h Stored in directory: /content/.cache/pip/wheels/e9/84/eb/f8f3caa627bb01ebc96034c3411f59870951246e5873b3f4c7\n"," Running setup.py bdist_wheel for feather-format ... \u001b[?25l-\b \bdone\n","\u001b[?25h Stored in directory: /content/.cache/pip/wheels/9d/de/23/0ca11012cc6b573de3f8187727cfa97a8392a8605e331214e5\n"," Running setup.py bdist_wheel for kaggle-cli ... \u001b[?25l-\b \bdone\n","\u001b[?25h Stored in directory: /content/.cache/pip/wheels/f0/3c/ff/c98870eeb0ca26250ce6a60dc9be23f547b7ef68b3d6a1c0b5\n"," Running setup.py bdist_wheel for pandas-summary ... \u001b[?25l-\b \bdone\n","\u001b[?25h Stored in directory: /content/.cache/pip/wheels/20/29/c9/b3d9f2cbdb6f1eeeb98e263ae687d72e8138a26de91058bd0b\n"," Running setup.py bdist_wheel for jupyter-latex-envs ... \u001b[?25l-\b \b\\\b \bdone\n","\u001b[?25h Stored in directory: /content/.cache/pip/wheels/8d/1a/c8/3a9f5e0105eb88e1972cd06fcca65d8b904dafe67afacc566b\n"," Running setup.py bdist_wheel for cliff ... \u001b[?25l-\b \bdone\n","\u001b[?25h Stored in directory: /content/.cache/pip/wheels/27/4c/aa/0f67aa384e67aacc5629321b1a3f85892362d4e9e5cd3a20f1\n"," Running setup.py bdist_wheel for configparser ... \u001b[?25l-\b \bdone\n","\u001b[?25h Stored in directory: /content/.cache/pip/wheels/1c/bd/b4/277af3f6c40645661b4cd1c21df26aca0f2e1e9714a1d4cda8\n"," Running setup.py bdist_wheel for PrettyTable ... \u001b[?25l-\b \bdone\n","\u001b[?25h Stored in directory: /content/.cache/pip/wheels/b6/90/7b/1c22b89217d0eba6d5f406e562365ebee804f0d4595b2bdbcd\n"," Running setup.py bdist_wheel for cmd2 ... \u001b[?25l-\b \bdone\n","\u001b[?25h Stored in directory: /content/.cache/pip/wheels/c2/72/23/369d3079bb5c0abe681a237b862aac1f75035876fa156edfd7\n"," Running setup.py bdist_wheel for pyperclip ... \u001b[?25l-\b \bdone\n","\u001b[?25h Stored in directory: /content/.cache/pip/wheels/a9/22/c3/8116911c3273f6aa0a90ce69c44fb8a6a0e139d79aeda5a73e\n","Successfully built fastai bcolz feather-format kaggle-cli pandas-summary jupyter-latex-envs cliff configparser PrettyTable cmd2 pyperclip\n","Installing collected packages: colorama, docutils, jmespath, botocore, s3transfer, awscli, bcolz, pyarrow, feather-format, graphviz, widgetsnbextension, ipywidgets, isoweek, parso, jedi, jupyter-console, qtconsole, jupyter, jupyter-highlight-selected-word, jupyter-latex-envs, lxml, jupyter-contrib-core, jupyter-nbextensions-configurator, jupyter-contrib-nbextensions, MechanicalSoup, PrettyTable, pyperclip, cmd2, pbr, stevedore, cliff, configparser, cssselect, python-utils, progressbar2, kaggle-cli, pandas-summary, palettable, mizani, plotnine, sklearn-pandas, tqdm, torchtext, fastai\n","Successfully installed MechanicalSoup-0.8.0 PrettyTable-0.7.2 awscli-1.14.56 bcolz-1.1.2 botocore-1.9.9 cliff-2.8.0 cmd2-0.8.1 colorama-0.3.7 configparser-3.5.0 cssselect-1.0.3 docutils-0.14 fastai-0.6 feather-format-0.4.0 graphviz-0.8.2 ipywidgets-7.1.2 isoweek-1.3.3 jedi-0.11.1 jmespath-0.9.3 jupyter-1.0.0 jupyter-console-5.2.0 jupyter-contrib-core-0.3.3 jupyter-contrib-nbextensions-0.4.0 jupyter-highlight-selected-word-0.1.0 jupyter-latex-envs-1.4.4 jupyter-nbextensions-configurator-0.4.0 kaggle-cli-0.12.13 lxml-4.2.0 mizani-0.4.5 palettable-3.1.0 pandas-summary-0.0.41 parso-0.1.1 pbr-3.1.1 plotnine-0.3.0 progressbar2-3.34.3 pyarrow-0.8.0 pyperclip-1.6.0 python-utils-2.3.0 qtconsole-4.3.1 s3transfer-0.1.13 sklearn-pandas-1.6.0 stevedore-1.28.0 torchtext-0.2.1 tqdm-4.19.7 widgetsnbextension-3.1.4\n"],"name":"stdout"}]},{"metadata":{"id":"hPC6hPgGa_Y-","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{"item_id":2}],"base_uri":"https://localhost:8080/","height":330},"outputId":"0022f436-c257-4652-8d1a-588479658c96","executionInfo":{"status":"ok","timestamp":1521147846964,"user_tz":-330,"elapsed":1442,"user":{"displayName":"sriram vijendran","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s128","userId":"106326660524926425973"}}},"cell_type":"code","source":["!mkdir data && wget http://files.grouplens.org/datasets/movielens/ml-latest-small.zip && unzip ml-latest-small.zip -d data/"],"execution_count":4,"outputs":[{"output_type":"stream","text":["--2018-03-15 21:04:10-- http://files.grouplens.org/datasets/movielens/ml-latest-small.zip\n","Resolving files.grouplens.org (files.grouplens.org)... 128.101.34.235\n","Connecting to files.grouplens.org (files.grouplens.org)|128.101.34.235|:80... connected.\n","HTTP request sent, awaiting response... 200 OK\n","Length: 918269 (897K) [application/zip]\n","Saving to: ‘ml-latest-small.zip’\n","\n","ml-latest-small.zip 100%[===================>] 896.75K 4.01MB/s in 0.2s \n","\n","2018-03-15 21:04:10 (4.01 MB/s) - ‘ml-latest-small.zip’ saved [918269/918269]\n","\n","Archive: ml-latest-small.zip\n"," creating: data/ml-latest-small/\n"," inflating: data/ml-latest-small/links.csv \n"," inflating: data/ml-latest-small/movies.csv \n"," inflating: data/ml-latest-small/ratings.csv \n"," inflating: data/ml-latest-small/README.txt \n"," inflating: data/ml-latest-small/tags.csv \n"],"name":"stdout"}]},{"metadata":{"id":"xZauz4Y7aoId","colab_type":"text"},"cell_type":"markdown","source":["## Movielens"]},{"metadata":{"id":"edB27G_3aoIh","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["#%reload_ext autoreload\n","#%autoreload 2\n","%matplotlib inline\n","\n","from fastai.learner import *\n","from fastai.column_data import *"],"execution_count":0,"outputs":[]},{"metadata":{"id":"YhpyX_SRaoIt","colab_type":"text"},"cell_type":"markdown","source":["Data available from http://files.grouplens.org/datasets/movielens/ml-latest-small.zip"]},{"metadata":{"id":"Ds80g2yHaoIv","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["path='data/ml-latest-small/'"],"execution_count":0,"outputs":[]},{"metadata":{"id":"yh8aAzzaaoI3","colab_type":"text"},"cell_type":"markdown","source":["We're working with the movielens data, which contains one rating per row, like this:"]},{"metadata":{"id":"avQh5JVuaoI6","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{"item_id":1}],"base_uri":"https://localhost:8080/","height":206},"outputId":"b7d275a6-c6af-426c-d94c-c13731eb0a2d","executionInfo":{"status":"ok","timestamp":1521147850682,"user_tz":-330,"elapsed":834,"user":{"displayName":"sriram vijendran","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s128","userId":"106326660524926425973"}}},"cell_type":"code","source":["ratings = pd.read_csv(path+'ratings.csv')\n","ratings.head()"],"execution_count":7,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","
\n"," \n"," \n"," | \n"," userId | \n"," movieId | \n"," rating | \n"," timestamp | \n","
\n"," \n"," \n"," \n"," | 0 | \n"," 1 | \n"," 31 | \n"," 2.5 | \n"," 1260759144 | \n","
\n"," \n"," | 1 | \n"," 1 | \n"," 1029 | \n"," 3.0 | \n"," 1260759179 | \n","
\n"," \n"," | 2 | \n"," 1 | \n"," 1061 | \n"," 3.0 | \n"," 1260759182 | \n","
\n"," \n"," | 3 | \n"," 1 | \n"," 1129 | \n"," 2.0 | \n"," 1260759185 | \n","
\n"," \n"," | 4 | \n"," 1 | \n"," 1172 | \n"," 4.0 | \n"," 1260759205 | \n","
\n"," \n","
\n","
"],"text/plain":[" userId movieId rating timestamp\n","0 1 31 2.5 1260759144\n","1 1 1029 3.0 1260759179\n","2 1 1061 3.0 1260759182\n","3 1 1129 2.0 1260759185\n","4 1 1172 4.0 1260759205"]},"metadata":{"tags":[]},"execution_count":7}]},{"metadata":{"id":"CI_p8Z_baoJG","colab_type":"text"},"cell_type":"markdown","source":["Just for display purposes, let's read in the movie names too."]},{"metadata":{"id":"HaEUyVEKaoJI","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{"item_id":1}],"base_uri":"https://localhost:8080/","height":206},"outputId":"75c207a0-2d70-4638-b572-3366e02933e4","executionInfo":{"status":"ok","timestamp":1521147851578,"user_tz":-330,"elapsed":736,"user":{"displayName":"sriram vijendran","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s128","userId":"106326660524926425973"}}},"cell_type":"code","source":["movies = pd.read_csv(path+'movies.csv')\n","movies.head()"],"execution_count":8,"outputs":[{"output_type":"execute_result","data":{"text/html":["\n","\n","
\n"," \n"," \n"," | \n"," movieId | \n"," title | \n"," genres | \n","
\n"," \n"," \n"," \n"," | 0 | \n"," 1 | \n"," Toy Story (1995) | \n"," Adventure|Animation|Children|Comedy|Fantasy | \n","
\n"," \n"," | 1 | \n"," 2 | \n"," Jumanji (1995) | \n"," Adventure|Children|Fantasy | \n","
\n"," \n"," | 2 | \n"," 3 | \n"," Grumpier Old Men (1995) | \n"," Comedy|Romance | \n","
\n"," \n"," | 3 | \n"," 4 | \n"," Waiting to Exhale (1995) | \n"," Comedy|Drama|Romance | \n","
\n"," \n"," | 4 | \n"," 5 | \n"," Father of the Bride Part II (1995) | \n"," Comedy | \n","
\n"," \n","
\n","
"],"text/plain":[" movieId title \\\n","0 1 Toy Story (1995) \n","1 2 Jumanji (1995) \n","2 3 Grumpier Old Men (1995) \n","3 4 Waiting to Exhale (1995) \n","4 5 Father of the Bride Part II (1995) \n","\n"," genres \n","0 Adventure|Animation|Children|Comedy|Fantasy \n","1 Adventure|Children|Fantasy \n","2 Comedy|Romance \n","3 Comedy|Drama|Romance \n","4 Comedy "]},"metadata":{"tags":[]},"execution_count":8}]},{"metadata":{"id":"0BrNE-q5aoJQ","colab_type":"text"},"cell_type":"markdown","source":["## Create subset for Excel"]},{"metadata":{"id":"aYVKuUDWaoJS","colab_type":"text"},"cell_type":"markdown","source":["We create a crosstab of the most popular movies and most movie-addicted users which we'll copy into Excel for creating a simple example. This isn't necessary for any of the modeling below however."]},{"metadata":{"id":"-fJkSQhNaoJV","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{"item_id":1}],"base_uri":"https://localhost:8080/","height":551},"outputId":"ea9b4b18-80e1-448c-ee0f-61dfd88fcd2f","executionInfo":{"status":"ok","timestamp":1521147852447,"user_tz":-330,"elapsed":731,"user":{"displayName":"sriram vijendran","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s128","userId":"106326660524926425973"}}},"cell_type":"code","source":["g=ratings.groupby('userId')['rating'].count()\n","topUsers=g.sort_values(ascending=False)[:15]\n","\n","g=ratings.groupby('movieId')['rating'].count()\n","topMovies=g.sort_values(ascending=False)[:15]\n","\n","top_r = ratings.join(topUsers, rsuffix='_r', how='inner', on='userId')\n","top_r = top_r.join(topMovies, rsuffix='_r', how='inner', on='movieId')\n","\n","pd.crosstab(top_r.userId, top_r.movieId, top_r.rating, aggfunc=np.sum)"],"execution_count":9,"outputs":[{"output_type":"execute_result","data":{"text/html":["\n","\n","
\n"," \n"," \n"," | movieId | \n"," 1 | \n"," 110 | \n"," 260 | \n"," 296 | \n"," 318 | \n"," 356 | \n"," 480 | \n"," 527 | \n"," 589 | \n"," 593 | \n"," 608 | \n"," 1196 | \n"," 1198 | \n"," 1270 | \n"," 2571 | \n","
\n"," \n"," | userId | \n"," | \n"," | \n"," | \n"," | \n"," | \n"," | \n"," | \n"," | \n"," | \n"," | \n"," | \n"," | \n"," | \n"," | \n"," | \n","
\n"," \n"," \n"," \n"," | 15 | \n"," 2.0 | \n"," 3.0 | \n"," 5.0 | \n"," 5.0 | \n"," 2.0 | \n"," 1.0 | \n"," 3.0 | \n"," 4.0 | \n"," 4.0 | \n"," 5.0 | \n"," 5.0 | \n"," 5.0 | \n"," 4.0 | \n"," 5.0 | \n"," 5.0 | \n","
\n"," \n"," | 30 | \n"," 4.0 | \n"," 5.0 | \n"," 4.0 | \n"," 5.0 | \n"," 5.0 | \n"," 5.0 | \n"," 4.0 | \n"," 5.0 | \n"," 4.0 | \n"," 4.0 | \n"," 5.0 | \n"," 4.0 | \n"," 5.0 | \n"," 5.0 | \n"," 3.0 | \n","
\n"," \n"," | 73 | \n"," 5.0 | \n"," 4.0 | \n"," 4.5 | \n"," 5.0 | \n"," 5.0 | \n"," 5.0 | \n"," 4.0 | \n"," 5.0 | \n"," 3.0 | \n"," 4.5 | \n"," 4.0 | \n"," 5.0 | \n"," 5.0 | \n"," 5.0 | \n"," 4.5 | \n","
\n"," \n"," | 212 | \n"," 3.0 | \n"," 5.0 | \n"," 4.0 | \n"," 4.0 | \n"," 4.5 | \n"," 4.0 | \n"," 3.0 | \n"," 5.0 | \n"," 3.0 | \n"," 4.0 | \n"," NaN | \n"," NaN | \n"," 3.0 | \n"," 3.0 | \n"," 5.0 | \n","
\n"," \n"," | 213 | \n"," 3.0 | \n"," 2.5 | \n"," 5.0 | \n"," NaN | \n"," NaN | \n"," 2.0 | \n"," 5.0 | \n"," NaN | \n"," 4.0 | \n"," 2.5 | \n"," 2.0 | \n"," 5.0 | \n"," 3.0 | \n"," 3.0 | \n"," 4.0 | \n","
\n"," \n"," | 294 | \n"," 4.0 | \n"," 3.0 | \n"," 4.0 | \n"," NaN | \n"," 3.0 | \n"," 4.0 | \n"," 4.0 | \n"," 4.0 | \n"," 3.0 | \n"," NaN | \n"," NaN | \n"," 4.0 | \n"," 4.5 | \n"," 4.0 | \n"," 4.5 | \n","
\n"," \n"," | 311 | \n"," 3.0 | \n"," 3.0 | \n"," 4.0 | \n"," 3.0 | \n"," 4.5 | \n"," 5.0 | \n"," 4.5 | \n"," 5.0 | \n"," 4.5 | \n"," 2.0 | \n"," 4.0 | \n"," 3.0 | \n"," 4.5 | \n"," 4.5 | \n"," 4.0 | \n","
\n"," \n"," | 380 | \n"," 4.0 | \n"," 5.0 | \n"," 4.0 | \n"," 5.0 | \n"," 4.0 | \n"," 5.0 | \n"," 4.0 | \n"," NaN | \n"," 4.0 | \n"," 5.0 | \n"," 4.0 | \n"," 4.0 | \n"," NaN | \n"," 3.0 | \n"," 5.0 | \n","
\n"," \n"," | 452 | \n"," 3.5 | \n"," 4.0 | \n"," 4.0 | \n"," 5.0 | \n"," 5.0 | \n"," 4.0 | \n"," 5.0 | \n"," 4.0 | \n"," 4.0 | \n"," 5.0 | \n"," 5.0 | \n"," 4.0 | \n"," 4.0 | \n"," 4.0 | \n"," 2.0 | \n","
\n"," \n"," | 468 | \n"," 4.0 | \n"," 3.0 | \n"," 3.5 | \n"," 3.5 | \n"," 3.5 | \n"," 3.0 | \n"," 2.5 | \n"," NaN | \n"," NaN | \n"," 3.0 | \n"," 4.0 | \n"," 3.0 | \n"," 3.5 | \n"," 3.0 | \n"," 3.0 | \n","
\n"," \n"," | 509 | \n"," 3.0 | \n"," 5.0 | \n"," 5.0 | \n"," 5.0 | \n"," 4.0 | \n"," 4.0 | \n"," 3.0 | \n"," 5.0 | \n"," 2.0 | \n"," 4.0 | \n"," 4.5 | \n"," 5.0 | \n"," 5.0 | \n"," 3.0 | \n"," 4.5 | \n","
\n"," \n"," | 547 | \n"," 3.5 | \n"," NaN | \n"," NaN | \n"," 5.0 | \n"," 5.0 | \n"," 2.0 | \n"," 3.0 | \n"," 5.0 | \n"," NaN | \n"," 5.0 | \n"," 5.0 | \n"," 2.5 | \n"," 2.0 | \n"," 3.5 | \n"," 3.5 | \n","
\n"," \n"," | 564 | \n"," 4.0 | \n"," 1.0 | \n"," 2.0 | \n"," 5.0 | \n"," NaN | \n"," 3.0 | \n"," 5.0 | \n"," 4.0 | \n"," 5.0 | \n"," 5.0 | \n"," 5.0 | \n"," 5.0 | \n"," 5.0 | \n"," 3.0 | \n"," 3.0 | \n","
\n"," \n"," | 580 | \n"," 4.0 | \n"," 4.5 | \n"," 4.0 | \n"," 4.5 | \n"," 4.0 | \n"," 3.5 | \n"," 3.0 | \n"," 4.0 | \n"," 4.5 | \n"," 4.0 | \n"," 4.5 | \n"," 4.0 | \n"," 3.5 | \n"," 3.0 | \n"," 4.5 | \n","
\n"," \n"," | 624 | \n"," 5.0 | \n"," NaN | \n"," 5.0 | \n"," 5.0 | \n"," NaN | \n"," 3.0 | \n"," 3.0 | \n"," NaN | \n"," 3.0 | \n"," 5.0 | \n"," 4.0 | \n"," 5.0 | \n"," 5.0 | \n"," 5.0 | \n"," 2.0 | \n","
\n"," \n","
\n","
"],"text/plain":["movieId 1 110 260 296 318 356 480 527 589 593 608 \\\n","userId \n","15 2.0 3.0 5.0 5.0 2.0 1.0 3.0 4.0 4.0 5.0 5.0 \n","30 4.0 5.0 4.0 5.0 5.0 5.0 4.0 5.0 4.0 4.0 5.0 \n","73 5.0 4.0 4.5 5.0 5.0 5.0 4.0 5.0 3.0 4.5 4.0 \n","212 3.0 5.0 4.0 4.0 4.5 4.0 3.0 5.0 3.0 4.0 NaN \n","213 3.0 2.5 5.0 NaN NaN 2.0 5.0 NaN 4.0 2.5 2.0 \n","294 4.0 3.0 4.0 NaN 3.0 4.0 4.0 4.0 3.0 NaN NaN \n","311 3.0 3.0 4.0 3.0 4.5 5.0 4.5 5.0 4.5 2.0 4.0 \n","380 4.0 5.0 4.0 5.0 4.0 5.0 4.0 NaN 4.0 5.0 4.0 \n","452 3.5 4.0 4.0 5.0 5.0 4.0 5.0 4.0 4.0 5.0 5.0 \n","468 4.0 3.0 3.5 3.5 3.5 3.0 2.5 NaN NaN 3.0 4.0 \n","509 3.0 5.0 5.0 5.0 4.0 4.0 3.0 5.0 2.0 4.0 4.5 \n","547 3.5 NaN NaN 5.0 5.0 2.0 3.0 5.0 NaN 5.0 5.0 \n","564 4.0 1.0 2.0 5.0 NaN 3.0 5.0 4.0 5.0 5.0 5.0 \n","580 4.0 4.5 4.0 4.5 4.0 3.5 3.0 4.0 4.5 4.0 4.5 \n","624 5.0 NaN 5.0 5.0 NaN 3.0 3.0 NaN 3.0 5.0 4.0 \n","\n","movieId 1196 1198 1270 2571 \n","userId \n","15 5.0 4.0 5.0 5.0 \n","30 4.0 5.0 5.0 3.0 \n","73 5.0 5.0 5.0 4.5 \n","212 NaN 3.0 3.0 5.0 \n","213 5.0 3.0 3.0 4.0 \n","294 4.0 4.5 4.0 4.5 \n","311 3.0 4.5 4.5 4.0 \n","380 4.0 NaN 3.0 5.0 \n","452 4.0 4.0 4.0 2.0 \n","468 3.0 3.5 3.0 3.0 \n","509 5.0 5.0 3.0 4.5 \n","547 2.5 2.0 3.5 3.5 \n","564 5.0 5.0 3.0 3.0 \n","580 4.0 3.5 3.0 4.5 \n","624 5.0 5.0 5.0 2.0 "]},"metadata":{"tags":[]},"execution_count":9}]},{"metadata":{"id":"Kfx2VkaCaoJf","colab_type":"text"},"cell_type":"markdown","source":["## Collaborative filtering"]},{"metadata":{"id":"DwfdnPx3aoJh","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["val_idxs = get_cv_idxs(len(ratings))\n","wd=2e-4\n","n_factors = 50"],"execution_count":0,"outputs":[]},{"metadata":{"id":"vA_phG-OaoJp","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["cf = CollabFilterDataset.from_csv(path, 'ratings.csv', 'userId', 'movieId', 'rating')\n","learn = cf.get_learner(n_factors, val_idxs, 64, opt_fn=optim.Adam)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"Uw_1sRIgaoJ2","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{"item_id":1},{"item_id":43},{"item_id":68}],"base_uri":"https://localhost:8080/","height":180},"outputId":"22cd107c-3cf8-42b8-b322-658665856b71","executionInfo":{"status":"ok","timestamp":1521147886380,"user_tz":-330,"elapsed":29868,"user":{"displayName":"sriram vijendran","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s128","userId":"106326660524926425973"}}},"cell_type":"code","source":["learn.fit(1e-2, 2, wds=wd, cycle_len=1, cycle_mult=2)"],"execution_count":12,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"acf9434813e24890aadca831e1cb850a","version_minor":0,"version_major":2},"text/html":["Failed to display Jupyter Widget of type HBox.
\n","\n"," If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n"," that the widgets JavaScript is still loading. If this message persists, it\n"," likely means that the widgets JavaScript library is either not installed or\n"," not enabled. See the Jupyter\n"," Widgets Documentation for setup instructions.\n","
\n","\n"," If you're reading this message in another frontend (for example, a static\n"," rendering on GitHub or NBViewer),\n"," it may mean that your frontend doesn't currently support widgets.\n","
\n"],"text/plain":["HBox(children=(IntProgress(value=0, description='Epoch', max=3), HTML(value='')))"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[0. 0.81892 0.80689]\n","[1. 0.80468 0.78025]\n"," 0%| | 0/1251 [00:00, ?it/s]"],"name":"stdout"},{"output_type":"stream","text":["[2. 0.59873 0.7672 ]\n","\n"],"name":"stdout"}]},{"metadata":{"id":"CIkH0YEMaoKD","colab_type":"text"},"cell_type":"markdown","source":["Let's compare to some benchmarks. Here's [some benchmarks](https://www.librec.net/release/v1.3/example.html) on the same dataset for the popular Librec system for collaborative filtering. They show best results based on [RMSE](http://www.statisticshowto.com/rmse/) of 0.91. We'll need to take the square root of our loss, since we use plain MSE."]},{"metadata":{"id":"DQ86B35xaoKF","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{"item_id":1}],"base_uri":"https://localhost:8080/","height":34},"outputId":"b59fad89-9801-41a8-bfeb-0cfa24518f93","executionInfo":{"status":"ok","timestamp":1521147887287,"user_tz":-330,"elapsed":832,"user":{"displayName":"sriram vijendran","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s128","userId":"106326660524926425973"}}},"cell_type":"code","source":["math.sqrt(0.776)"],"execution_count":13,"outputs":[{"output_type":"execute_result","data":{"text/plain":["0.8809086218218096"]},"metadata":{"tags":[]},"execution_count":13}]},{"metadata":{"id":"WYFD98xbaoKQ","colab_type":"text"},"cell_type":"markdown","source":["Looking good - we've found a solution better than any of those benchmarks! Let's take a look at how the predictions compare to actuals for this model."]},{"metadata":{"id":"tzCTw9s8aoKV","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["preds = learn.predict()"],"execution_count":0,"outputs":[]},{"metadata":{"id":"BNXnU8gYaoKb","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{"item_id":1},{"item_id":2}],"base_uri":"https://localhost:8080/","height":784},"outputId":"e5a33cbf-a363-4d97-cc29-fa1ec9a1c4f8","executionInfo":{"status":"error","timestamp":1521147897028,"user_tz":-330,"elapsed":8684,"user":{"displayName":"sriram vijendran","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s128","userId":"106326660524926425973"}}},"cell_type":"code","source":["y=learn.data.val_y\n","sns.jointplot(preds, y, kind='hex', stat_func=None);"],"execution_count":15,"outputs":[{"output_type":"error","ename":"IndexError","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)","\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mval_y\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0msns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjointplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpreds\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkind\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'hex'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstat_func\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m;\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m","\u001b[0;32m/usr/local/lib/python3.6/dist-packages/seaborn/distributions.py\u001b[0m in \u001b[0;36mjointplot\u001b[0;34m(x, y, data, kind, stat_func, color, size, ratio, space, dropna, xlim, ylim, joint_kws, marginal_kws, annot_kws, **kwargs)\u001b[0m\n\u001b[1;32m 796\u001b[0m grid = JointGrid(x, y, data, dropna=dropna,\n\u001b[1;32m 797\u001b[0m \u001b[0msize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msize\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mratio\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mratio\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mspace\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mspace\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 798\u001b[0;31m xlim=xlim, ylim=ylim)\n\u001b[0m\u001b[1;32m 799\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 800\u001b[0m \u001b[0;31m# Plot the data using the grid\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.6/dist-packages/seaborn/axisgrid.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, x, y, data, size, ratio, space, dropna, xlim, ylim)\u001b[0m\n\u001b[1;32m 1658\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mdropna\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1659\u001b[0m \u001b[0mnot_na\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnotnull\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m&\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnotnull\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1660\u001b[0;31m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mnot_na\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1661\u001b[0m \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mnot_na\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1662\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mIndexError\u001b[0m: too many indices for array"]},{"output_type":"display_data","data":{"image/png":"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\n","text/plain":[""]},"metadata":{"tags":[]}}]},{"metadata":{"id":"zd-rTE8xaoKl","colab_type":"text"},"cell_type":"markdown","source":["## Analyze results"]},{"metadata":{"id":"QppvoDQsaoKm","colab_type":"text"},"cell_type":"markdown","source":["### Movie bias"]},{"metadata":{"id":"enSxQrVWaoKn","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["movie_names = movies.set_index('movieId')['title'].to_dict()\n","g=ratings.groupby('movieId')['rating'].count()\n","topMovies=g.sort_values(ascending=False).index.values[:3000]\n","topMovieIdx = np.array([cf.item2idx[o] for o in topMovies])"],"execution_count":0,"outputs":[]},{"metadata":{"id":"fEEWZXbIaoKr","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{"item_id":1}],"base_uri":"https://localhost:8080/","height":121},"outputId":"79e04a28-553d-44c8-f1fa-d8696b6181ea","executionInfo":{"status":"ok","timestamp":1521147934103,"user_tz":-330,"elapsed":1329,"user":{"displayName":"sriram vijendran","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s128","userId":"106326660524926425973"}}},"cell_type":"code","source":["m=learn.model; m.cuda()"],"execution_count":17,"outputs":[{"output_type":"execute_result","data":{"text/plain":["EmbeddingDotBias(\n"," (u): Embedding(671, 50)\n"," (i): Embedding(9066, 50)\n"," (ub): Embedding(671, 1)\n"," (ib): Embedding(9066, 1)\n",")"]},"metadata":{"tags":[]},"execution_count":17}]},{"metadata":{"id":"BYYeQCTpaoK4","colab_type":"text"},"cell_type":"markdown","source":["First, we'll look at the movie bias term. Here, our input is the movie id (a single id), and the output is the movie bias (a single float)."]},{"metadata":{"id":"gTxGsWo3aoK6","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{"item_id":1}],"base_uri":"https://localhost:8080/","height":531},"outputId":"372564b4-c442-475c-8f6d-52db52e87524","executionInfo":{"status":"error","timestamp":1521147947869,"user_tz":-330,"elapsed":964,"user":{"displayName":"sriram vijendran","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s128","userId":"106326660524926425973"}}},"cell_type":"code","source":["movie_bias = to_np(m.ib(V(topMovieIdx)))"],"execution_count":19,"outputs":[{"output_type":"error","ename":"AttributeError","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)","\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mmovie_bias\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mto_np\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mib\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mV\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtopMovieIdx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m","\u001b[0;32m/usr/local/lib/python3.6/dist-packages/fastai/core.py\u001b[0m in \u001b[0;36mV\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mV_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mto_gpu\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0masync\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mVariable\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0mVariable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mto_gpu\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0masync\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 20\u001b[0;31m \u001b[0;32mdef\u001b[0m \u001b[0mV\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mV_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mo\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mo\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mlist\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0mV_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 21\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mVV_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mto_gpu\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0masync\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mVariable\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0mVariable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mto_gpu\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0masync\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvolatile\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mVV\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mVV_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mo\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mo\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mlist\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0mVV_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.6/dist-packages/fastai/core.py\u001b[0m in \u001b[0;36mV_\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mNotImplementedError\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 19\u001b[0;31m \u001b[0;32mdef\u001b[0m \u001b[0mV_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mto_gpu\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0masync\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mVariable\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0mVariable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mto_gpu\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0masync\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 20\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mV\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mV_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mo\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mo\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mlist\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0mV_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mVV_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mto_gpu\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0masync\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mVariable\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0mVariable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mto_gpu\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0masync\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvolatile\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.6/dist-packages/fastai/core.py\u001b[0m in \u001b[0;36mto_gpu\u001b[0;34m(x, *args, **kwargs)\u001b[0m\n\u001b[1;32m 28\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mto_gpu\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 29\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcuda\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_available\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 30\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcuda\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 31\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 32\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mAttributeError\u001b[0m: 'numpy.ndarray' object has no attribute 'cuda'"]}]},{"metadata":{"id":"1bxr0OpKaoLM","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{"item_id":1}],"base_uri":"https://localhost:8080/","height":166},"outputId":"32a494a2-237e-4981-aafa-c92b4fb9f18e","executionInfo":{"status":"error","timestamp":1521147969912,"user_tz":-330,"elapsed":4479,"user":{"displayName":"sriram vijendran","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s128","userId":"106326660524926425973"}}},"cell_type":"code","source":["movie_bias"],"execution_count":20,"outputs":[{"output_type":"error","ename":"NameError","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)","\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mmovie_bias\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m","\u001b[0;31mNameError\u001b[0m: name 'movie_bias' is not defined"]}]},{"metadata":{"id":"DdAFVLLkaoLV","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{"item_id":1}],"base_uri":"https://localhost:8080/","height":166},"outputId":"2f91a320-a39b-46f7-f8d2-eb2d4a3cc3d2","executionInfo":{"status":"error","timestamp":1521147978049,"user_tz":-330,"elapsed":853,"user":{"displayName":"sriram vijendran","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s128","userId":"106326660524926425973"}}},"cell_type":"code","source":["movie_ratings = [(b[0], movie_names[i]) for i,b in zip(topMovies,movie_bias)]"],"execution_count":21,"outputs":[{"output_type":"error","ename":"NameError","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)","\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mmovie_ratings\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mb\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmovie_names\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mb\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtopMovies\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mmovie_bias\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m","\u001b[0;31mNameError\u001b[0m: name 'movie_bias' is not defined"]}]},{"metadata":{"id":"E275orCkaoLf","colab_type":"text"},"cell_type":"markdown","source":["Now we can look at the top and bottom rated movies. These ratings are corrected for different levels of reviewer sentiment, as well as different types of movies that different reviewers watch."]},{"metadata":{"id":"sSdOWsFpaoLg","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"8285dcdc-5295-42cc-a3a4-4fd2eb23254a"},"cell_type":"code","source":["sorted(movie_ratings, key=lambda o: o[0])[:15]"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[(-0.96070349, 'Battlefield Earth (2000)'),\n"," (-0.76858485, 'Speed 2: Cruise Control (1997)'),\n"," (-0.73675376, 'Wild Wild West (1999)'),\n"," (-0.73655486, 'Anaconda (1997)'),\n"," (-0.72457194, 'Super Mario Bros. (1993)'),\n"," (-0.69564718, 'Congo (1995)'),\n"," (-0.67043746, 'Superman III (1983)'),\n"," (-0.64385736, 'Mighty Morphin Power Rangers: The Movie (1995)'),\n"," (-0.62750411, \"Joe's Apartment (1996)\"),\n"," (-0.60154277, 'Police Academy 4: Citizens on Patrol (1987)'),\n"," (-0.59929478, 'Batman & Robin (1997)'),\n"," (-0.59667748, 'Jaws 3-D (1983)'),\n"," (-0.5921765, 'Dungeons & Dragons (2000)'),\n"," (-0.59074384, 'Inspector Gadget (1999)'),\n"," (-0.57559621, 'Haunting, The (1999)')]"]},"metadata":{"tags":[]},"execution_count":83}]},{"metadata":{"id":"_-7c4VCOaoLt","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"e03a85af-aaa3-4b56-96e4-6cb6e6d08794"},"cell_type":"code","source":["sorted(movie_ratings, key=itemgetter(0))[:15]"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[(-0.96070349, 'Battlefield Earth (2000)'),\n"," (-0.76858485, 'Speed 2: Cruise Control (1997)'),\n"," (-0.73675376, 'Wild Wild West (1999)'),\n"," (-0.73655486, 'Anaconda (1997)'),\n"," (-0.72457194, 'Super Mario Bros. (1993)'),\n"," (-0.69564718, 'Congo (1995)'),\n"," (-0.67043746, 'Superman III (1983)'),\n"," (-0.64385736, 'Mighty Morphin Power Rangers: The Movie (1995)'),\n"," (-0.62750411, \"Joe's Apartment (1996)\"),\n"," (-0.60154277, 'Police Academy 4: Citizens on Patrol (1987)'),\n"," (-0.59929478, 'Batman & Robin (1997)'),\n"," (-0.59667748, 'Jaws 3-D (1983)'),\n"," (-0.5921765, 'Dungeons & Dragons (2000)'),\n"," (-0.59074384, 'Inspector Gadget (1999)'),\n"," (-0.57559621, 'Haunting, The (1999)')]"]},"metadata":{"tags":[]},"execution_count":84}]},{"metadata":{"id":"Q6fpxHZoaoL5","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"b7b2a443-6195-4aec-f696-cc91a32f535d"},"cell_type":"code","source":["sorted(movie_ratings, key=lambda o: o[0], reverse=True)[:15]"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[(1.3070084, 'Shawshank Redemption, The (1994)'),\n"," (1.1196285, 'Godfather, The (1972)'),\n"," (1.0844109, 'Usual Suspects, The (1995)'),\n"," (0.96578616, \"Schindler's List (1993)\"),\n"," (0.90921378, 'Silence of the Lambs, The (1991)'),\n"," (0.89407367, 'Godfather: Part II, The (1974)'),\n"," (0.87860429, '12 Angry Men (1957)'),\n"," (0.87099487, 'Pulp Fiction (1994)'),\n"," (0.85731125, 'Memento (2000)'),\n"," (0.85192037, 'Matrix, The (1999)'),\n"," (0.84797066, 'Dark Knight, The (2008)'),\n"," (0.8479442, 'To Kill a Mockingbird (1962)'),\n"," (0.83670187, 'Forrest Gump (1994)'),\n"," (0.8192088, 'Star Wars: Episode V - The Empire Strikes Back (1980)'),\n"," (0.81887919, 'Rear Window (1954)')]"]},"metadata":{"tags":[]},"execution_count":85}]},{"metadata":{"id":"ipNxDLYaaoMC","colab_type":"text"},"cell_type":"markdown","source":["### Embedding interpretation"]},{"metadata":{"id":"Rh460mL8aoMC","colab_type":"text"},"cell_type":"markdown","source":["We can now do the same thing for the embeddings."]},{"metadata":{"id":"Bm8IoigqaoMG","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{"item_id":1}],"base_uri":"https://localhost:8080/","height":548},"outputId":"729aea0c-6ac0-4f64-ea0a-9da711b9b187","executionInfo":{"status":"error","timestamp":1521148007794,"user_tz":-330,"elapsed":848,"user":{"displayName":"sriram vijendran","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s128","userId":"106326660524926425973"}}},"cell_type":"code","source":["movie_emb = to_np(m.i(V(topMovieIdx)))\n","movie_emb.shape"],"execution_count":22,"outputs":[{"output_type":"error","ename":"AttributeError","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)","\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mmovie_emb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mto_np\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mV\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtopMovieIdx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mmovie_emb\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.6/dist-packages/fastai/core.py\u001b[0m in \u001b[0;36mV\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mV_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mto_gpu\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0masync\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mVariable\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0mVariable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mto_gpu\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0masync\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 20\u001b[0;31m \u001b[0;32mdef\u001b[0m \u001b[0mV\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mV_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mo\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mo\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mlist\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0mV_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 21\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mVV_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mto_gpu\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0masync\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mVariable\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0mVariable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mto_gpu\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0masync\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvolatile\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mVV\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mVV_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mo\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mo\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mlist\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0mVV_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.6/dist-packages/fastai/core.py\u001b[0m in \u001b[0;36mV_\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mNotImplementedError\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 19\u001b[0;31m \u001b[0;32mdef\u001b[0m \u001b[0mV_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mto_gpu\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0masync\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mVariable\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0mVariable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mto_gpu\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0masync\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 20\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mV\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mV_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mo\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mo\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mlist\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0mV_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mVV_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mto_gpu\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0masync\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mVariable\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0mVariable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mto_gpu\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0masync\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvolatile\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.6/dist-packages/fastai/core.py\u001b[0m in \u001b[0;36mto_gpu\u001b[0;34m(x, *args, **kwargs)\u001b[0m\n\u001b[1;32m 28\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mto_gpu\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 29\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcuda\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_available\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 30\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcuda\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 31\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 32\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mAttributeError\u001b[0m: 'numpy.ndarray' object has no attribute 'cuda'"]}]},{"metadata":{"id":"5pglg7pNaoMM","colab_type":"text"},"cell_type":"markdown","source":["Because it's hard to interpret 50 embeddings, we use [PCA](https://plot.ly/ipython-notebooks/principal-component-analysis/) to simplify them down to just 3 vectors. "]},{"metadata":{"id":"HSsiwtKyaoMN","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["from sklearn.decomposition import PCA\n","pca = PCA(n_components=3)\n","movie_pca = pca.fit(movie_emb.T).components_"],"execution_count":0,"outputs":[]},{"metadata":{"id":"kvWR1kmLaoMT","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"fbf5d245-b32c-4665-adf4-e1a56ac5a1c2"},"cell_type":"code","source":["movie_pca.shape"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(3, 3000)"]},"metadata":{"tags":[]},"execution_count":88}]},{"metadata":{"id":"ro3nsvQOaoMY","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["fac0 = movie_pca[0]\n","movie_comp = [(f, movie_names[i]) for f,i in zip(fac0, topMovies)]"],"execution_count":0,"outputs":[]},{"metadata":{"id":"bighQuJFaoMb","colab_type":"text"},"cell_type":"markdown","source":["Here's the 1st component. It seems to be 'easy watching' vs 'serious'."]},{"metadata":{"id":"D_PlpPlNaoMe","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"082f4a7e-bbe1-42c3-a414-d4732d7b3cbb"},"cell_type":"code","source":["sorted(movie_comp, key=itemgetter(0), reverse=True)[:10]"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[(0.06748189, 'Independence Day (a.k.a. ID4) (1996)'),\n"," (0.061572548, 'Police Academy 4: Citizens on Patrol (1987)'),\n"," (0.061050549, 'Waterworld (1995)'),\n"," (0.057877172, 'Rocky V (1990)'),\n"," (0.057183612, 'Home Alone 3 (1997)'),\n"," (0.056849808, 'Armageddon (1998)'),\n"," (0.056735475, 'Miss Congeniality (2000)'),\n"," (0.054530937, 'Outbreak (1995)'),\n"," (0.053475372, 'Evolution (2001)'),\n"," (0.052995622, 'Pay It Forward (2000)')]"]},"metadata":{"tags":[]},"execution_count":90}]},{"metadata":{"id":"J3InLi6OaoMl","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"68b0b310-eaa3-4a50-a12a-212c1480c47f"},"cell_type":"code","source":["sorted(movie_comp, key=itemgetter(0))[:10]"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[(-0.078433245, 'Godfather: Part II, The (1974)'),\n"," (-0.072180331, 'Fargo (1996)'),\n"," (-0.071351372, 'Pulp Fiction (1994)'),\n"," (-0.068537779, 'Goodfellas (1990)'),\n"," (-0.067418814, 'Chinatown (1974)'),\n"," (-0.066787124, 'Taxi Driver (1976)'),\n"," (-0.06392362, 'Apocalypse Now (1979)'),\n"," (-0.060093477, 'Brokeback Mountain (2005)'),\n"," (-0.057078246, 'Godfather, The (1972)'),\n"," (-0.055729419, 'Player, The (1992)')]"]},"metadata":{"tags":[]},"execution_count":91}]},{"metadata":{"id":"PAReed_JaoMp","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["fac1 = movie_pca[1]\n","movie_comp = [(f, movie_names[i]) for f,i in zip(fac1, topMovies)]"],"execution_count":0,"outputs":[]},{"metadata":{"id":"2T855Ob8aoMt","colab_type":"text"},"cell_type":"markdown","source":["Here's the 2nd component. It seems to be 'CGI' vs 'dialog driven'."]},{"metadata":{"id":"HhFG0fodaoMu","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"b1939532-93b4-486d-812d-006650640ec0"},"cell_type":"code","source":["sorted(movie_comp, key=itemgetter(0), reverse=True)[:10]"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[(0.058975246, 'Bonfire of the Vanities (1990)'),\n"," (0.055992026, '2001: A Space Odyssey (1968)'),\n"," (0.054682467, 'Tank Girl (1995)'),\n"," (0.054429606, 'Purple Rose of Cairo, The (1985)'),\n"," (0.050998077, 'Mulholland Drive (2001)'),\n"," (0.049576689, \"Joe's Apartment (1996)\"),\n"," (0.047549088, 'What Ever Happened to Baby Jane? (1962)'),\n"," (0.046446536, 'Island of Dr. Moreau, The (1996)'),\n"," (0.045140576, 'L.A. Story (1991)'),\n"," (0.045048587, 'Mouse Hunt (1997)')]"]},"metadata":{"tags":[]},"execution_count":93}]},{"metadata":{"id":"mCq86eSVaoM0","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"1e5dc772-46a6-46df-c33d-347fcae0d7ed"},"cell_type":"code","source":["sorted(movie_comp, key=itemgetter(0))[:10]"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[(-0.1064609, 'Lord of the Rings: The Return of the King, The (2003)'),\n"," (-0.090635143, 'Aladdin (1992)'),\n"," (-0.089208141, 'Star Wars: Episode V - The Empire Strikes Back (1980)'),\n"," (-0.088854566, 'Star Wars: Episode IV - A New Hope (1977)'),\n"," (-0.085997969, 'Beauty and the Beast (1991)'),\n"," (-0.085541978, \"Schindler's List (1993)\"),\n"," (-0.080922142, 'Saving Private Ryan (1998)'),\n"," (-0.079378694,\n"," 'Raiders of the Lost Ark (Indiana Jones and the Raiders of the Lost Ark) (1981)'),\n"," (-0.079295151, 'Lord of the Rings: The Two Towers, The (2002)'),\n"," (-0.078875825, 'My Big Fat Greek Wedding (2002)')]"]},"metadata":{"tags":[]},"execution_count":94}]},{"metadata":{"id":"4DiEWiI1aoM7","colab_type":"text"},"cell_type":"markdown","source":["We can draw a picture to see how various movies appear on the map of these components. This picture shows the first two components."]},{"metadata":{"id":"t7Q8_qTMaoM8","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"843b0462-5a24-443c-905a-20e37afa35d2"},"cell_type":"code","source":["idxs = np.random.choice(len(topMovies), 50, replace=False)\n","X = fac0[idxs]\n","Y = fac1[idxs]\n","plt.figure(figsize=(15,15))\n","plt.scatter(X, Y)\n","for i, x, y in zip(topMovies[idxs], X, Y):\n"," plt.text(x,y,movie_names[i], color=np.random.rand(3)*0.7, fontsize=11)\n","plt.show()"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAABAsAAANSCAYAAAADHEcGAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd4VMXixvHv2WwaISHUJIQeQu+ELigdlK4UkaYg9l4A\nwauI3ICo8NNrATuIgIDSkd576L3XECCQQiB1d8/vj8DKmhACRKP4fp6H5+6emZ2Zc5KLnHdn5him\naSIiIiIiIiIicp0ltwcgIiIiIiIiIn8vCgtERERERERExIXCAhERERERERFxobBARERERERERFwo\nLBARERERERERFwoLRERERERERMSFwgIRERERERERcaGwQERERERERERcKCwQERERERERERfW3B7A\nnShUqJBZqlSp3B6GiIiIiIhIrti6detF0zQL5/Y45N71jwwLSpUqRURERG4PQ0REREREJFcYhnEy\nt8cg9zYtQxARERERERERFwoLRERERERERMSFwgIRERERERERcaGwQERERERERERc5EhYYBhGG8Mw\nDhqGccQwjMGZlHsahjHtWvkmwzBK/aG8hGEYVwzDeD0nxiMiIiIiIiIid+6uwwLDMNyAz4C2QCXg\nUcMwKv2hWn8g1jTNssBYYPQfyscCC+92LCIiIiIiIiJy93JiZkFd4IhpmsdM00wFpgId/1CnI/DD\ntdczgOaGYRgAhmF0Ao4Be3NgLCIiIiIiIiJyl3IiLAgGTt/w/sy1Y5nWMU3TBsQDBQ3D8AEGAcNv\n1YlhGAMNw4gwDCMiOjo6B4YtIiIiIiIiIpnJibDAyOSYmc06w4GxpmleuVUnpmlOME0zzDTNsMKF\nC9/BMEVEREREREQkO6w50MYZoPgN74sBZ29S54xhGFYgHxAD1AMeMQzjA8AfcBiGkWya5v9yYFwi\nIiIiIiIicgdyIizYAoQahlEaiAR6AD3/UGcO0BfYADwCLDdN0wQaX69gGMa7wBUFBSIiIiIiIiK5\n667DAtM0bYZhPA8sAtyAb03T3GsYxntAhGmac4BvgEmGYRwhfUZBj7vtV0RERERERET+HEb6F/z/\nLGFhYWZERERuD0NERERERCRXGIax1TTNsNweh9y7cmKDQxERERERERG5hygsEBEREREREREXCgtE\nRERERERExIXCAhERERERERFxobBARERERERERFwoLBARERERERERFwoLRERERERERMSFwgIRERER\nERERcaGwQERERERERERcKCwQERERERERERcKC0RERERERETEhcICEREREREREXGhsEBERERERERE\nXCgsEBEREREREREXCgtERERERERExIXCAhERERERERFxobBARERERERERFwoLBARERERERERFwoL\nRERERERERMSFwgIRERERERERcaGwQERERERERERcKCwQERERERERERcKC0RERERERETEhcICERER\nEREREXGhsEBEREREREREXCgsEBEREREREREXCgtERERERERExIXCAhERERERERFxobBARERERERE\nRFwoLBARERERERERFwoLRERERERERMSFwgIRERERERERcaGwQERERERERERcKCwQERERERERERcK\nC0RERERERETEhcICEREREREREXGhsEBEREREREREXCgsEBEREREREREXCgtERERERERExIU1twcg\nIiIiIvJnmPryW7i5W3FzdwegaKXy1O/VLcf7+emFQTw45BX8iwZycNU6AsuHki+wyB23t/ijz7hy\nKQaAmFNnKFCiGAB58vvToHd35o0Yw2Ofjbnrce9asASLxaBKmxZcuRjDqvHfcfH4KfyDg+g4fLCz\nnsNuZ+Pk6UTtO4jDZqdE7erU7dEFwzCyLnM42DhpGmf3HsSwGPgULECTJ/uQxz8fJ7fu5MzuvTTq\n1/Ouz0NE/hwKC0RERETkntX8xacoUDz4L+vv0Kp15PHPd1dhQavXngPSb9K/7fssHd4djNUjPfCI\nP3chR8aZlpzC/qUreXjUuwC4e3tS++EOpFy9yo45v7nUPbB8DQnno+k8chiYsOjDTzmxZRul69bO\nsuxkxHYunTxNl/C3sbi5sX7iVHbMWUjDPj0oWbs6W2fOISH6Ir6FC+XIOYlIzlJYICIiIiL/KofX\nbmTfkhU4bHYA6j3WlaKVygMQe+YsGyZNIznhCqZpUu2hVoTeV99l9gCQ4T3AgRVruXTyDOt/mIK7\nlxf1e3Vj3XeTafrcAAqVKgHAznmLuBJ9iUaP39036pun/kLk7n3YUlNp8mRfAsqFAHBq+y52zFmI\nPc2Gm7uVBr26UzikVIbPH98UQdFKFZwhhKePD4EVQoncsz9D3ZhTZyhapSIWNzcAilapyJF1myld\nt3aWZWBgT0vDnmYDw8CWnEK+G65X6Xq1ObR6PbUf7nBX10JE/hwKC0RERETknrXsk/HOZQh1e3Sh\nWLXKFK9ehdD76gMQG3mW3z74hEf/bxR2m43FH39GvUcfoVSdmpimScqVq9nuq0LT+zi8Zj01Oj5I\n8epVAKjUsin7l66i8YDemA4HB5atpuWrz97VOSXFXyaoYjnq9ujCodUb2PLzr7Qb9jrxUefZMWch\nbQe9hLuXF5dOnWHJx5/TY9x/M7QRtf8QAeVDs9VfodIlOLJ+CxWbNcE0HZzcuhN7auoty0qF1SDq\nwCEmP/cGVk8P8gcHcd8TvZztBpQtw9aZcxQWiPxNKSwQERERkXvGrO2RjFl0kLNxSbwYn0Txnn3o\n0rKmS53L5y+w4rOvSYyLx7BYSIyJIznhCldjYjEsFkrVSa9vGAZevnnvajzlmjRg+uv/ITUxiXMH\nD+NTsMBdL4vwyOPtDCOKlC1NxPRZAJzetZfL56OZ+97v+xk4bDaSE65kOI+rMbF45/PN3jk8cB8J\n0ZeYM3w0Hnm8KRJSivOHj96yLPrYSS6fj6bnp6Oxenmy4YepbJoygwa9uwPg7e/H1Zi4u7oWIvLn\nUVggIiIiIveEWdsjGfLLbpLS0pcX2B0m45YexlqoCJ1q/n6DvvzTr2jY71FK1KyGw+Hg+8efx56a\nlmXbFjc3TNPhfG9Py7r+de5eXs7p9md27aVSywdu/8T+4PpMCQDDYsF0XBuXaVKiRlWaDOx76zY8\nPNKXB2SDxWKhTvfO1OneGYAdsxfgXzTolmWHVq8nuHIFPPJ4AxDSqC7rv5/ibNeeasPNwx0R+XvS\noxNFRERE5J4wZtFBZ1BwXYrNzphFB12OpSYlOTfVO7B8DQ57+mf8g4MwHQ5ObNkOgGmaJCdcAcCv\nSCGij54E4MyuvTddnuDu7U1qUpLLsUotm7J7wRJiTkdSKqyG8/imKTPZv2zVnZ5uBsWqVebUjt3E\nRkY5xx999ESmdQsUDyY+6ly22rWlppKamH5OCdEXObB8DVXaNL9lmW/hgpzde8B5fU/v2EP+YkWd\n7cadjaLgtSc9iMjfj2YWiIiIiMg94WxcUraO1+/VjUUf/Q+f/PkpWqm885tvN6uVVq8+x/qJU9n6\ny1wMw6Bau9aUbViXsG6dWTXhew4sX0VA+VDy5PfPtK+KzRqzecov7JzzG/V7daNopfLkCyyCX0Bh\nAiuUc24ECOkbBwaEhuTQ2YN/0UDuf6ofq8d/j91mw26zEVQ+NNMNDkvVqcnGH6dTs9NDQPpMiWmv\nDsNhs5GalMxPLwyiYvMm1Oz0EClXE1nw348xLBYMw6DeY49QsGRxgCzLKrduRtzZc8wc8h4Wi4W8\nhQvS+InezjGc2b2PUnVq5dj5i0jOMkzTzO0x3LawsDAzIiIit4chIiIiIn8jjUYtJzKTwCDY35t1\ng5vlwojSpVxNZMab79D5/WHkyZ8PAIfDwdzho+nw7mAMw8iVcS0IH0u9x7rmyrf7SZcTWDhqHJ1G\nvOUSoEj2GYax1TTNsNweh9y7tAxBRERERO4Jb7Quj7e7642nt7sbb7Qun0sjgn1LVjBz8HCqt2/t\nDAogfa1/x+FDci0oAGjY91ESY3Nng8GECxe574nHFBSI/I1pZoGIiIiI3DNufBpCUX9v3mhd3mVz\nQ5F7hWYWyJ9NexaIiIiIyD2jU81ghQMiIjlAyxBERERERERExIXCAhERERERERFxobBARERERERE\nRFwoLBARERERERERFwoLRERERERERMSFwgIRERERERERcaGwQERERERERERcKCwQERERERERERcK\nC0RERERERETEhcICEREREREREXGhsEBEREREREREXCgsEBEREREREREXCgtERERERERExIXCAhER\nERERERFxobBARERERERERFwoLBARERERERERFwoLRERERERERMSFwgIRERERERERcaGwQERERERE\nRERcKCwQERERERERERcKC0RERERERETEhcICEREREREREXGhsEBEREREREREXCgsEBEREREREREX\nCgtERERERERExIXCAhERERERERFxobBARERERERERFwoLBARERERERERFwoLRERERERERMSFwgIR\nERERERERcaGwQERERERERERcKCwQERERERERERcKC0RERERERETEhcICEREREREREXGhsEBERERE\nREREXCgsEBEREREREREXCgtERERERERExIXCAhERERERERFxobBARERERERERFwoLBARERERERER\nFwoLRERERERERMSFwgIRERERERERcaGwQERERERERERcKCwQERERERERERcKC0RERERERETEhcIC\nEREREREREXGhsEBEREREREREXCgsEBEREREREREXCgtERERERERExIXCAhERERERERFxobBARERE\nRERERFwoLBARERERERERFwoLRERERERERMSFwgIRERERERERcaGwQERERERERERcWHN7ACIiIn+V\n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\ntdlYvnEXNSsF51h2X2gFvl68zvHinXgxmZj4cwB4e3k6LTU4GXuGEoUL0KFZHbq0qM++yKibega1\nKgfzx65DnE28CMCiNeGEVS5zU22eiEkg8lSc05gtVhuF8uUFwGK1seKP3QDsPHicDIuVwKIFuZiS\nhr+vNz5eHlxKSWPFpt2ONhqGhjB/1VaSU9MBSLr8af19oSEs27CT+HOZn9bb7HYOHMt6JkiZkoU5\nEXsmV/eQnJpGeoYFyNy/YF34Pjo2r3tTZVeeTbnL+zeIiIjIf4dmFoiI3EMmLD9IqsXmdC7NamfC\n8oNsHNosy2vaN63N8I++o8frUylZpACVyjgvA6gRUpqhH35D3NkkalQoRfumYTmWvfTEQ3z8/XJ6\nvD4Vk8mEm5sLA7q3oVih/LRvGsbU75bx3a8beeGxlqzbvp8d+4/h5uqCm6sLrzz18E09g+AShen7\naAteHjcLkwmKBeTntZ7tb6rNtAwLk79eyvkLybi7ueJiNvNm387k88tDbMJ5/PJ4c+r0WXq/9Qlp\nGRZGvvAobq6utL4vlA079tN96BQC8vlSPaS048W79X2hJJy/QJ9Rn+JqNuPt5c604b2oUSGIPp2b\nM2TS19jtBhabjaZ1KlMhqPg142oSVpnVW/7kocY1gczNFvu98xlpGRYyLFY6vDSeZzs1o+39YUTH\nn+fNqd/jYjbj7ubKW/26EHA57Pi7ZQBbdh/muRucCSIiIiL3PpNhXG+i5D9XWFiYER4efreHISJy\nxwUNXZrl9HYTcGzsQzfc3v9/U0Juy/5Lrnwbwi/TX7/jfdvsdnq9OZ0Jg55y7NFwJ52ISWD8FwuZ\nNqLXHe9bRESyZzKZthuGEZZzTZG/R8sQRETuIcX8r10/n915ube5mM281rM9sfHn70r/cWeTGPRM\nu7vSt4iIiNxdmlkgInIPubJnwdVLEbzcXBjTqSodQq+dxi4iIiL/TppZILeb9iwQEbmHXAkEHN+G\n4O/F4JYhCgpERERE5JZSWCAico/pEFpc4YCIiIiI3Fbas0BEREREREREnCgsEBEREREREREnCgtE\nRERERERExInCAhERERERERFxorBARERERERERJwoLBARERERERERJwoLRERERERERMSJwgIRERER\nERERcaKwQEREREREREScKCwQEREREREREScKC0RERERERETEicICEREREREREXGisEBERERERERE\nnCgsEBEREREREREnCgtEREREnNODmwAAIABJREFURERExInCAhERERERERFxorBARERERERERJwo\nLBARERERERERJwoLRERERERERMSJwgIRERERERERcaKwQEREREREREScKCwQEREREREREScKC0RE\nRERERETEicICEREREREREXGisEBEREREREREnCgsEBEREREREREnCgtERERERERExInCAhERERER\nERFxorBARERERERERJwoLBARERERERERJwoLRERERERERMSJwgIRERERERERcaKwQERERERERESc\nuN7tAYjIv8djizvj7uKOm9mNNFsapfMG8XjF7lQpWDXHa5PSkxi+fghptjSal2rBYxW63ZIxvby6\nP10rPE79Yg2ZsHUsLYNaUy2g+k23axgGg35/mcYl7qd92Y4AZNgy6PNbT/rVeIG6RevfdB9Z+fzP\nGdjsNvpU7+d0fv7hudgNO4+U7wLAe5vf4dD5g5T1L8eI+m/dUB/D1w/l6So9KZevPFti/+CLP2cS\nmXSULuW7OvV7JvUMk8LHE5cch82w8WSlHjxQ6sEcy7Jrc1rER1QuWJn7Szb7W89HRERERG4NhQUi\nckuNavAuQf7BAKyL+p2h6wYzvsn7VCpQOdvrtseFk8fdl6mNP7ltYxtcZ+gta8tkMjG49jBeXNWX\nukXrUcSnKF/t/YLKBarcsqDAZrfiYs7dP9Mdyz3i+DkhJYE/YjayqOOvmEymG+rzz4Td2Awb5fKV\nB6B4nhIMrj2U1SdXXlN3asRkKheoynuNxnMu7Rx9f+tF9UKhFPQqmG1Zdm0+XqEbA9e8RJMSTW94\n7CIiIiJy6ygsEJHbpnGJJhw4u48fD3zHyIbvYrFZ+PzPGexK2InFbiHYrwwDa73KgXMH+HTXNJIt\nKfRa/jQv1RxIGf+yfBzxEZFJR8mwZVCjUCjP13gRF7MLL6/uT4X8Fdl7dg9nU89wf8lmjk+njycd\nY9zW97DZbZTyK02GLcMxnqtnGYzdMhp3F3eiLp4iPiWeSgUqM6zuCEwmEwkpCYzZ8i7n0s5SPE9x\nDAxqF6nr9EIOUMSnCE9XfpbxW8fQp1o/1p5czYyWXwKZL/qf7PqYbae3YsJE3WL16V31OVzMLry4\nqh9PVupBnaL1AJyOX1zVjxqFQtl7Zg9erl6MbjQuV8/6yoyDbhWfYPDvA0m1ptL7t2doHfQQncp1\n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\nGMqUqQrAmTOxBAQUu1xWjLp1W+Dm5o6bmzthYc04cuRPR1hgsWQ43cudVMa/LDNbzrorff8T1Cla\n9671ndt9DURERETk9tIGh3LPmrD8oCMouCLNamfC8oNA5sv4ihU/8NBDPQCoVaspS5fOJiMjDYDU\n1GSio486rt28eTlpaSnYbFY2bFhMpUqZ6/RTUi5QqFBm+LBmzVwsFued66/m7Z2HlJSLjuNixUrj\n4eHFunWLHOeioyNJSblEuXLVOX58P7GxJwBYvXquU1vTpg1j69aVN/ZQslGr1v2sW7eIs2dPA2C3\n24iM3Jtl3ZIlyxMTc8xxHBd3ijFj+vD008Ou2VuhfYt2NMt7gKPvtebX52tw9vgW6tR5EIC6dVuw\nevXP2O12Llw4R3j4akdZw4Zt2L17E4ZhYLVa2LNns9NMj+joSAIDQxARERERkTtPMwvknhWTmHrN\nufLxc7AnuDJgwHhKlCjDkCHTKVcuc6O29u178fPPH/P6610xmzNzss6dn3ds/lexYhjvv/8SZ87E\nUrFiLZo37wLAU08NZeLEl8ifvxAVK9bG1/f6U+wDA8tTtGgQgwa1p1ixIF555UMGD57G7NljWbLk\nS+x2G35+BRgwYBJ+fgXo3XskEya8gI+PH/Xrt3Rq69ixvbRq1e2WPKsr9/fYYwOYMKE/drsNq9VK\nvXotCA6+dgPAOnWas3nzMsdGjN9+O4mLFxP56aep/PTTVAC6dXuF6tXvo3Hjdhw58icvv5y5eV+n\nTn0pXLgkQLZlDRq0ITJyL6++2g6z2US1ag1p2vQRIHNmx549m+nQofctu38REREREck9k2EYOdf6\nhwkLCzPCw8Pv9jDkLms4djXRWQQGxf292Di02Q219fHHrxMcXJlWrbrfquHdlEuXEpk8eRDDh8+8\nK/3b7TZef70rQ4ZMJ1++gDve/65dG1i/fgn9+4+9432LiIiI3AtMJtN2wzDC7vY45N9LyxDknjW4\nZQhebi5O57zcXBjc8t6fup4nj/9dCwoAzGYXevd+i/j4qLvSf2pqMt26vXJX+hYREREREc0skHvc\n1d+GUMzfi8EtQxybG4qIiIiI/FtpZoHcbtqzQO5pHUKLKxwQERERERG5xbQMQUREREREREScKCwQ\nEREREREREScKC0RERERERETEicICEREREREREXGisEBEREREREREnCgsEBEREREREREnCgtERERE\n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\n","text/plain":[""]},"metadata":{"tags":[]}}]},{"metadata":{"id":"1201U-CkaoNK","colab_type":"text"},"cell_type":"markdown","source":["## Collab filtering from scratch"]},{"metadata":{"id":"FXWsGVweaoNL","colab_type":"text"},"cell_type":"markdown","source":["### Dot product example"]},{"metadata":{"id":"IF8jf6NnaoNN","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"0caff8c1-169e-4721-f9a9-2a521c5c4d12"},"cell_type":"code","source":["a = T([[1.,2],[3,4]])\n","b = T([[2.,2],[10,10]])\n","a,b"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(\n"," 1 2\n"," 3 4\n"," [torch.FloatTensor of size 2x2], \n"," 2 2\n"," 10 10\n"," [torch.FloatTensor of size 2x2])"]},"metadata":{"tags":[]},"execution_count":98}]},{"metadata":{"id":"C_tffm2NaoNS","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"b48cad64-45d3-4a01-895a-2f0a4468e5f0"},"cell_type":"code","source":["a*b"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["\n"," 2 4\n"," 30 40\n","[torch.FloatTensor of size 2x2]"]},"metadata":{"tags":[]},"execution_count":99}]},{"metadata":{"id":"Vu4EAqlgaoNY","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"ba66334f-59d9-40ff-f1aa-24c74c49334a"},"cell_type":"code","source":["(a*b).sum(1)"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["\n"," 6\n"," 70\n","[torch.FloatTensor of size 2]"]},"metadata":{"tags":[]},"execution_count":100}]},{"metadata":{"id":"KKpPObVAaoNc","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["class DotProduct(nn.Module):\n"," def forward(self, u, m): return (u*m).sum(1)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"6l0zAogkaoNf","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["model=DotProduct()"],"execution_count":0,"outputs":[]},{"metadata":{"id":"GU9b0CRnaoNj","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"aa0b932a-2448-48b9-d844-6fddb169e104"},"cell_type":"code","source":["model(a,b)"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["\n"," 6\n"," 70\n","[torch.FloatTensor of size 2]"]},"metadata":{"tags":[]},"execution_count":103}]},{"metadata":{"id":"wC0oZrxuaoNm","colab_type":"text"},"cell_type":"markdown","source":["### Dot product model"]},{"metadata":{"id":"MSbo4cylaoNn","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["u_uniq = ratings.userId.unique()\n","user2idx = {o:i for i,o in enumerate(u_uniq)}\n","ratings.userId = ratings.userId.apply(lambda x: user2idx[x])\n","\n","m_uniq = ratings.movieId.unique()\n","movie2idx = {o:i for i,o in enumerate(m_uniq)}\n","ratings.movieId = ratings.movieId.apply(lambda x: movie2idx[x])\n","\n","n_users=int(ratings.userId.nunique())\n","n_movies=int(ratings.movieId.nunique())"],"execution_count":0,"outputs":[]},{"metadata":{"id":"37blaBCeaoNp","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["class EmbeddingDot(nn.Module):\n"," def __init__(self, n_users, n_movies):\n"," super().__init__()\n"," self.u = nn.Embedding(n_users, n_factors)\n"," self.m = nn.Embedding(n_movies, n_factors)\n"," self.u.weight.data.uniform_(0,0.05)\n"," self.m.weight.data.uniform_(0,0.05)\n"," \n"," def forward(self, cats, conts):\n"," users,movies = cats[:,0],cats[:,1]\n"," u,m = self.u(users),self.m(movies)\n"," return (u*m).sum(1)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"d9bRLT4caoNs","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["x = ratings.drop(['rating', 'timestamp'],axis=1)\n","y = ratings['rating'].astype(np.float32)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"AblAwxcwaoNv","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["data = ColumnarModelData.from_data_frame(path, val_idxs, x, y, ['userId', 'movieId'], 64)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"50xKZlP2aoNz","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["wd=1e-5\n","model = EmbeddingDot(n_users, n_movies).cuda()\n","opt = optim.SGD(model.parameters(), 1e-1, weight_decay=wd, momentum=0.9)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"k8vALYNHaoN2","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{},{}]},"outputId":"142d70ff-4390-43b1-c0bb-82e20906f722"},"cell_type":"code","source":["fit(model, data, 3, opt, F.mse_loss)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"e5c39cb24aff416d9057d4e6f9d46d6a","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 1.6368 1.6415] \n","[ 1. 1.13749 1.29373] \n","[ 2. 0.89736 1.22818] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"QY6F_-DyaoN7","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["set_lrs(opt, 0.01)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"OIPqIIB1aoOE","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{},{}]},"outputId":"a5ace65d-ddcd-4abb-f592-3dbb0396ace8"},"cell_type":"code","source":["fit(model, data, 3, opt, F.mse_loss)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"295b3d75f7ba46118f10072bc3a19533","version_major":2,"version_minor":0},"text/html":["Failed to display Jupyter Widget of type HBox.
\n","\n"," If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n"," that the widgets JavaScript is still loading. If this message persists, it\n"," likely means that the widgets JavaScript library is either not installed or\n"," not enabled. See the Jupyter\n"," Widgets Documentation for setup instructions.\n","
\n","\n"," If you're reading this message in another frontend (for example, a static\n"," rendering on GitHub or NBViewer),\n"," it may mean that your frontend doesn't currently support widgets.\n","
\n"],"text/plain":["HBox(children=(IntProgress(value=0, description='Epoch', max=3), HTML(value='')))"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 0.69763 1.14979] \n","[ 1. 0.70115 1.13657] \n","[ 2. 0.66739 1.1303 ] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"K4hHVoGBaoOI","colab_type":"text"},"cell_type":"markdown","source":["### Bias"]},{"metadata":{"id":"VWXz3cl3aoOJ","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"0d601e7c-dda3-4ef0-c296-2b1afba766d2"},"cell_type":"code","source":["min_rating,max_rating = ratings.rating.min(),ratings.rating.max()\n","min_rating,max_rating"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(0.5, 5.0)"]},"metadata":{"tags":[]},"execution_count":17}]},{"metadata":{"id":"3eyW9mo8aoOL","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["def get_emb(ni,nf):\n"," e = nn.Embedding(ni, nf)\n"," e.weight.data.uniform_(-0.01,0.01)\n"," return e\n","\n","class EmbeddingDotBias(nn.Module):\n"," def __init__(self, n_users, n_movies):\n"," super().__init__()\n"," (self.u, self.m, self.ub, self.mb) = [get_emb(*o) for o in [\n"," (n_users, n_factors), (n_movies, n_factors), (n_users,1), (n_movies,1)\n"," ]]\n"," \n"," def forward(self, cats, conts):\n"," users,movies = cats[:,0],cats[:,1]\n"," um = (self.u(users)* self.m(movies)).sum(1)\n"," res = um + self.ub(users).squeeze() + self.mb(movies).squeeze()\n"," res = F.sigmoid(res) * (max_rating-min_rating) + min_rating\n"," return res"],"execution_count":0,"outputs":[]},{"metadata":{"id":"xE4m-_z4aoOQ","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["wd=2e-4\n","model = EmbeddingDotBias(cf.n_users, cf.n_items).cuda()\n","opt = optim.SGD(model.parameters(), 1e-1, weight_decay=wd, momentum=0.9)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"5xHfcK7DaoOU","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{},{}]},"outputId":"c40ce878-1d9f-45b5-bbd5-810265a0029b"},"cell_type":"code","source":["fit(model, data, 3, opt, F.mse_loss)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"95093026b28a415783ac620cc5ade85e","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 0.88212 0.83626] \n","[ 1. 0.8108 0.81831] \n","[ 2. 0.78864 0.80989] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"ayPUNtnwaoOX","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["set_lrs(opt, 1e-2)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"wald34VJaoOa","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{},{}]},"outputId":"c6543c49-e111-4cc5-9e2e-05b857d959c5"},"cell_type":"code","source":["fit(model, data, 3, opt, F.mse_loss)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"4ab6c0fd5887430b9b5f0cda8f8a1772","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 0.72795 0.80337] \n","[ 1. 0.75064 0.80203] \n","[ 2. 0.75122 0.80124] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"P4sWJuGkaoOe","colab_type":"text"},"cell_type":"markdown","source":["### Mini net"]},{"metadata":{"id":"BMGg0RqzaoOf","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["class EmbeddingNet(nn.Module):\n"," def __init__(self, n_users, n_movies, nh=10, p1=0.05, p2=0.5):\n"," super().__init__()\n"," (self.u, self.m) = [get_emb(*o) for o in [\n"," (n_users, n_factors), (n_movies, n_factors)]]\n"," self.lin1 = nn.Linear(n_factors*2, nh)\n"," self.lin2 = nn.Linear(nh, 1)\n"," self.drop1 = nn.Dropout(p1)\n"," self.drop2 = nn.Dropout(p2)\n"," \n"," def forward(self, cats, conts):\n"," users,movies = cats[:,0],cats[:,1]\n"," x = self.drop1(torch.cat([self.u(users),self.m(movies)], dim=1))\n"," x = self.drop2(F.relu(self.lin1(x)))\n"," return F.sigmoid(self.lin2(x)) * (max_rating-min_rating+1) + min_rating-0.5"],"execution_count":0,"outputs":[]},{"metadata":{"id":"LBPXIZQzaoOh","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["wd=1e-5\n","model = EmbeddingNet(n_users, n_movies).cuda()\n","opt = optim.Adam(model.parameters(), 1e-3, weight_decay=wd)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"EUMt7SIHaoOj","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{},{}]},"outputId":"20d387de-ca26-418d-a09d-b6cea664f73d"},"cell_type":"code","source":["fit(model, data, 3, opt, F.mse_loss)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"0ca8d1c156c9403fab6adec1f863786d","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 0.88043 0.82363] \n","[ 1. 0.8941 0.81264] \n","[ 2. 0.86179 0.80706] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"gnBKWwhSaoOm","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["set_lrs(opt, 1e-3)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"VBj2sIaDaoOo","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{},{}]},"outputId":"f509eb4a-a171-41c8-deec-edae5bcf46a1"},"cell_type":"code","source":["fit(model, data, 3, opt, F.mse_loss)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"9d4c659d07b543b796fe37c789daebad","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 0.7669 0.78622] \n","[ 1. 0.74277 0.78152] \n","[ 2. 0.69891 0.78075] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"BUsLBXU-aoO7","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":[""],"execution_count":0,"outputs":[]}]}
\ No newline at end of file
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "name": "lesson5-movielens.ipynb",
+ "version": "0.3.2",
+ "provenance": []
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "accelerator": "GPU"
+ },
+ "cells": [
+ {
+ "metadata": {
+ "id": "gxzvVBdrarg9",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "**Initialization**\n",
+ "\n",
+ "The next few steps(or code snippets) initialize the colab environment for running the fast.ai course. Each line of code that added are in place to avoid any error, please do not change the position of any snippet if you do not know what they do.\n",
+ "\n",
+ "Note:- You will get an error saying that the code is closing in the memory limit of 12Gb. You can click 'terminate other runtimes'.\n",
+ " This error is popping up because the dataset is taking up most of the space, so don't worry\n",
+ " "
+ ]
+ },
+ {
+ "metadata": {
+ "id": "AJU6OF0maw8j",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 106
+ },
+ "outputId": "b9c793ec-8977-4139-8d2e-d5fdb4b1c021"
+ },
+ "cell_type": "code",
+ "source": [
+ "!apt-get install -y -qq software-properties-common python-software-properties module-init-tools\n",
+ "!add-apt-repository -y ppa:alessandro-strada/ppa 2>&1 > /dev/null\n",
+ "!apt-get update -qq 2>&1 > /dev/null\n",
+ "!apt-get -y install -qq google-drive-ocamlfuse fuse\n",
+ "from google.colab import auth\n",
+ "auth.authenticate_user()\n",
+ "from oauth2client.client import GoogleCredentials\n",
+ "creds = GoogleCredentials.get_application_default()\n",
+ "import getpass\n",
+ "!google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} < /dev/null 2>&1 | grep URL\n",
+ "vcode = getpass.getpass()\n",
+ "!echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret}"
+ ],
+ "execution_count": 0,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Please, open the following URL in a web browser: https://accounts.google.com/o/oauth2/auth?client_id=32555940559.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&response_type=code&access_type=offline&approval_prompt=force\r\n",
+ "··········\n",
+ "Please, open the following URL in a web browser: https://accounts.google.com/o/oauth2/auth?client_id=32555940559.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&response_type=code&access_type=offline&approval_prompt=force\n",
+ "Please enter the verification code: Access token retrieved correctly.\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "cBKhUk5Va0GD",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 35
+ },
+ "outputId": "35248010-6895-469f-fbc9-6671484064cb"
+ },
+ "cell_type": "code",
+ "source": [
+ "# http://pytorch.org/\n",
+ "# pre installation\n",
+ "from os import path\n",
+ "from wheel.pep425tags import get_abbr_impl, get_impl_ver, get_abi_tag\n",
+ "platform = '{}{}-{}'.format(get_abbr_impl(), get_impl_ver(), get_abi_tag())\n",
+ "\n",
+ "accelerator = 'cu80' if path.exists('/opt/bin/nvidia-smi') else 'cpu'\n",
+ "\n",
+ "!pip install -q http://download.pytorch.org/whl/{accelerator}/torch-0.3.1-{platform}-linux_x86_64.whl torchvision fastai\n",
+ "import torch"
+ ],
+ "execution_count": 1,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "\u001b[31mplotnine 0.4.0 has requirement scipy>=1.0.0, but you'll have scipy 0.19.1 which is incompatible.\u001b[0m\r\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "hPC6hPgGa_Y-",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 35
+ },
+ "cellView": "both",
+ "outputId": "ca2482c1-3baa-40fb-ac7c-6869789a84a2"
+ },
+ "cell_type": "code",
+ "source": [
+ "#@title\n",
+ "!mkdir -p data && wget -q http://files.grouplens.org/datasets/movielens/ml-latest-small.zip && unzip -qq ml-latest-small.zip -d data/"
+ ],
+ "execution_count": 3,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "replace data/ml-latest-small/links.csv? [y]es, [n]o, [A]ll, [N]one, [r]ename: ^C\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "xZauz4Y7aoId",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Movielens"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "edB27G_3aoIh",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "#%reload_ext autoreload\n",
+ "#%autoreload 2\n",
+ "%matplotlib inline\n",
+ "\n",
+ "from fastai.learner import *\n",
+ "from fastai.column_data import *"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "YhpyX_SRaoIt",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Data available from http://files.grouplens.org/datasets/movielens/ml-latest-small.zip"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "Ds80g2yHaoIv",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "path='data/ml-latest-small/'"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "yh8aAzzaaoI3",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "We're working with the movielens data, which contains one rating per row, like this:"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "avQh5JVuaoI6",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 204
+ },
+ "outputId": "8d0295fa-f9ba-4f36-eb2d-ba3a322a6fe0"
+ },
+ "cell_type": "code",
+ "source": [
+ "ratings = pd.read_csv(path+'ratings.csv')\n",
+ "ratings.head()"
+ ],
+ "execution_count": 6,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " userId | \n",
+ " movieId | \n",
+ " rating | \n",
+ " timestamp | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 1 | \n",
+ " 31 | \n",
+ " 2.5 | \n",
+ " 1260759144 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 1 | \n",
+ " 1029 | \n",
+ " 3.0 | \n",
+ " 1260759179 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 1 | \n",
+ " 1061 | \n",
+ " 3.0 | \n",
+ " 1260759182 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 1 | \n",
+ " 1129 | \n",
+ " 2.0 | \n",
+ " 1260759185 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 1 | \n",
+ " 1172 | \n",
+ " 4.0 | \n",
+ " 1260759205 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " userId movieId rating timestamp\n",
+ "0 1 31 2.5 1260759144\n",
+ "1 1 1029 3.0 1260759179\n",
+ "2 1 1061 3.0 1260759182\n",
+ "3 1 1129 2.0 1260759185\n",
+ "4 1 1172 4.0 1260759205"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 6
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "CI_p8Z_baoJG",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Just for display purposes, let's read in the movie names too."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "HaEUyVEKaoJI",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 204
+ },
+ "outputId": "9171fb93-4eb8-4aad-846c-da5198d99785"
+ },
+ "cell_type": "code",
+ "source": [
+ "movies = pd.read_csv(path+'movies.csv')\n",
+ "movies.head()"
+ ],
+ "execution_count": 7,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " movieId | \n",
+ " title | \n",
+ " genres | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 1 | \n",
+ " Toy Story (1995) | \n",
+ " Adventure|Animation|Children|Comedy|Fantasy | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 2 | \n",
+ " Jumanji (1995) | \n",
+ " Adventure|Children|Fantasy | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 3 | \n",
+ " Grumpier Old Men (1995) | \n",
+ " Comedy|Romance | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 4 | \n",
+ " Waiting to Exhale (1995) | \n",
+ " Comedy|Drama|Romance | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 5 | \n",
+ " Father of the Bride Part II (1995) | \n",
+ " Comedy | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " movieId title \\\n",
+ "0 1 Toy Story (1995) \n",
+ "1 2 Jumanji (1995) \n",
+ "2 3 Grumpier Old Men (1995) \n",
+ "3 4 Waiting to Exhale (1995) \n",
+ "4 5 Father of the Bride Part II (1995) \n",
+ "\n",
+ " genres \n",
+ "0 Adventure|Animation|Children|Comedy|Fantasy \n",
+ "1 Adventure|Children|Fantasy \n",
+ "2 Comedy|Romance \n",
+ "3 Comedy|Drama|Romance \n",
+ "4 Comedy "
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 7
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "0BrNE-q5aoJQ",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Create subset for Excel"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "aYVKuUDWaoJS",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "We create a crosstab of the most popular movies and most movie-addicted users which we'll copy into Excel for creating a simple example. This isn't necessary for any of the modeling below however."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "-fJkSQhNaoJV",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 545
+ },
+ "outputId": "4f3fa90c-5fea-4ed7-edff-ab31b8c36f20"
+ },
+ "cell_type": "code",
+ "source": [
+ "g=ratings.groupby('userId')['rating'].count()\n",
+ "topUsers=g.sort_values(ascending=False)[:15]\n",
+ "\n",
+ "g=ratings.groupby('movieId')['rating'].count()\n",
+ "topMovies=g.sort_values(ascending=False)[:15]\n",
+ "\n",
+ "top_r = ratings.join(topUsers, rsuffix='_r', how='inner', on='userId')\n",
+ "top_r = top_r.join(topMovies, rsuffix='_r', how='inner', on='movieId')\n",
+ "\n",
+ "pd.crosstab(top_r.userId, top_r.movieId, top_r.rating, aggfunc=np.sum)"
+ ],
+ "execution_count": 8,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | movieId | \n",
+ " 1 | \n",
+ " 110 | \n",
+ " 260 | \n",
+ " 296 | \n",
+ " 318 | \n",
+ " 356 | \n",
+ " 480 | \n",
+ " 527 | \n",
+ " 589 | \n",
+ " 593 | \n",
+ " 608 | \n",
+ " 1196 | \n",
+ " 1198 | \n",
+ " 1270 | \n",
+ " 2571 | \n",
+ "
\n",
+ " \n",
+ " | userId | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 15 | \n",
+ " 2.0 | \n",
+ " 3.0 | \n",
+ " 5.0 | \n",
+ " 5.0 | \n",
+ " 2.0 | \n",
+ " 1.0 | \n",
+ " 3.0 | \n",
+ " 4.0 | \n",
+ " 4.0 | \n",
+ " 5.0 | \n",
+ " 5.0 | \n",
+ " 5.0 | \n",
+ " 4.0 | \n",
+ " 5.0 | \n",
+ " 5.0 | \n",
+ "
\n",
+ " \n",
+ " | 30 | \n",
+ " 4.0 | \n",
+ " 5.0 | \n",
+ " 4.0 | \n",
+ " 5.0 | \n",
+ " 5.0 | \n",
+ " 5.0 | \n",
+ " 4.0 | \n",
+ " 5.0 | \n",
+ " 4.0 | \n",
+ " 4.0 | \n",
+ " 5.0 | \n",
+ " 4.0 | \n",
+ " 5.0 | \n",
+ " 5.0 | \n",
+ " 3.0 | \n",
+ "
\n",
+ " \n",
+ " | 73 | \n",
+ " 5.0 | \n",
+ " 4.0 | \n",
+ " 4.5 | \n",
+ " 5.0 | \n",
+ " 5.0 | \n",
+ " 5.0 | \n",
+ " 4.0 | \n",
+ " 5.0 | \n",
+ " 3.0 | \n",
+ " 4.5 | \n",
+ " 4.0 | \n",
+ " 5.0 | \n",
+ " 5.0 | \n",
+ " 5.0 | \n",
+ " 4.5 | \n",
+ "
\n",
+ " \n",
+ " | 212 | \n",
+ " 3.0 | \n",
+ " 5.0 | \n",
+ " 4.0 | \n",
+ " 4.0 | \n",
+ " 4.5 | \n",
+ " 4.0 | \n",
+ " 3.0 | \n",
+ " 5.0 | \n",
+ " 3.0 | \n",
+ " 4.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 3.0 | \n",
+ " 3.0 | \n",
+ " 5.0 | \n",
+ "
\n",
+ " \n",
+ " | 213 | \n",
+ " 3.0 | \n",
+ " 2.5 | \n",
+ " 5.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 2.0 | \n",
+ " 5.0 | \n",
+ " NaN | \n",
+ " 4.0 | \n",
+ " 2.5 | \n",
+ " 2.0 | \n",
+ " 5.0 | \n",
+ " 3.0 | \n",
+ " 3.0 | \n",
+ " 4.0 | \n",
+ "
\n",
+ " \n",
+ " | 294 | \n",
+ " 4.0 | \n",
+ " 3.0 | \n",
+ " 4.0 | \n",
+ " NaN | \n",
+ " 3.0 | \n",
+ " 4.0 | \n",
+ " 4.0 | \n",
+ " 4.0 | \n",
+ " 3.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 4.0 | \n",
+ " 4.5 | \n",
+ " 4.0 | \n",
+ " 4.5 | \n",
+ "
\n",
+ " \n",
+ " | 311 | \n",
+ " 3.0 | \n",
+ " 3.0 | \n",
+ " 4.0 | \n",
+ " 3.0 | \n",
+ " 4.5 | \n",
+ " 5.0 | \n",
+ " 4.5 | \n",
+ " 5.0 | \n",
+ " 4.5 | \n",
+ " 2.0 | \n",
+ " 4.0 | \n",
+ " 3.0 | \n",
+ " 4.5 | \n",
+ " 4.5 | \n",
+ " 4.0 | \n",
+ "
\n",
+ " \n",
+ " | 380 | \n",
+ " 4.0 | \n",
+ " 5.0 | \n",
+ " 4.0 | \n",
+ " 5.0 | \n",
+ " 4.0 | \n",
+ " 5.0 | \n",
+ " 4.0 | \n",
+ " NaN | \n",
+ " 4.0 | \n",
+ " 5.0 | \n",
+ " 4.0 | \n",
+ " 4.0 | \n",
+ " NaN | \n",
+ " 3.0 | \n",
+ " 5.0 | \n",
+ "
\n",
+ " \n",
+ " | 452 | \n",
+ " 3.5 | \n",
+ " 4.0 | \n",
+ " 4.0 | \n",
+ " 5.0 | \n",
+ " 5.0 | \n",
+ " 4.0 | \n",
+ " 5.0 | \n",
+ " 4.0 | \n",
+ " 4.0 | \n",
+ " 5.0 | \n",
+ " 5.0 | \n",
+ " 4.0 | \n",
+ " 4.0 | \n",
+ " 4.0 | \n",
+ " 2.0 | \n",
+ "
\n",
+ " \n",
+ " | 468 | \n",
+ " 4.0 | \n",
+ " 3.0 | \n",
+ " 3.5 | \n",
+ " 3.5 | \n",
+ " 3.5 | \n",
+ " 3.0 | \n",
+ " 2.5 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 3.0 | \n",
+ " 4.0 | \n",
+ " 3.0 | \n",
+ " 3.5 | \n",
+ " 3.0 | \n",
+ " 3.0 | \n",
+ "
\n",
+ " \n",
+ " | 509 | \n",
+ " 3.0 | \n",
+ " 5.0 | \n",
+ " 5.0 | \n",
+ " 5.0 | \n",
+ " 4.0 | \n",
+ " 4.0 | \n",
+ " 3.0 | \n",
+ " 5.0 | \n",
+ " 2.0 | \n",
+ " 4.0 | \n",
+ " 4.5 | \n",
+ " 5.0 | \n",
+ " 5.0 | \n",
+ " 3.0 | \n",
+ " 4.5 | \n",
+ "
\n",
+ " \n",
+ " | 547 | \n",
+ " 3.5 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 5.0 | \n",
+ " 5.0 | \n",
+ " 2.0 | \n",
+ " 3.0 | \n",
+ " 5.0 | \n",
+ " NaN | \n",
+ " 5.0 | \n",
+ " 5.0 | \n",
+ " 2.5 | \n",
+ " 2.0 | \n",
+ " 3.5 | \n",
+ " 3.5 | \n",
+ "
\n",
+ " \n",
+ " | 564 | \n",
+ " 4.0 | \n",
+ " 1.0 | \n",
+ " 2.0 | \n",
+ " 5.0 | \n",
+ " NaN | \n",
+ " 3.0 | \n",
+ " 5.0 | \n",
+ " 4.0 | \n",
+ " 5.0 | \n",
+ " 5.0 | \n",
+ " 5.0 | \n",
+ " 5.0 | \n",
+ " 5.0 | \n",
+ " 3.0 | \n",
+ " 3.0 | \n",
+ "
\n",
+ " \n",
+ " | 580 | \n",
+ " 4.0 | \n",
+ " 4.5 | \n",
+ " 4.0 | \n",
+ " 4.5 | \n",
+ " 4.0 | \n",
+ " 3.5 | \n",
+ " 3.0 | \n",
+ " 4.0 | \n",
+ " 4.5 | \n",
+ " 4.0 | \n",
+ " 4.5 | \n",
+ " 4.0 | \n",
+ " 3.5 | \n",
+ " 3.0 | \n",
+ " 4.5 | \n",
+ "
\n",
+ " \n",
+ " | 624 | \n",
+ " 5.0 | \n",
+ " NaN | \n",
+ " 5.0 | \n",
+ " 5.0 | \n",
+ " NaN | \n",
+ " 3.0 | \n",
+ " 3.0 | \n",
+ " NaN | \n",
+ " 3.0 | \n",
+ " 5.0 | \n",
+ " 4.0 | \n",
+ " 5.0 | \n",
+ " 5.0 | \n",
+ " 5.0 | \n",
+ " 2.0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "movieId 1 110 260 296 318 356 480 527 589 593 608 \\\n",
+ "userId \n",
+ "15 2.0 3.0 5.0 5.0 2.0 1.0 3.0 4.0 4.0 5.0 5.0 \n",
+ "30 4.0 5.0 4.0 5.0 5.0 5.0 4.0 5.0 4.0 4.0 5.0 \n",
+ "73 5.0 4.0 4.5 5.0 5.0 5.0 4.0 5.0 3.0 4.5 4.0 \n",
+ "212 3.0 5.0 4.0 4.0 4.5 4.0 3.0 5.0 3.0 4.0 NaN \n",
+ "213 3.0 2.5 5.0 NaN NaN 2.0 5.0 NaN 4.0 2.5 2.0 \n",
+ "294 4.0 3.0 4.0 NaN 3.0 4.0 4.0 4.0 3.0 NaN NaN \n",
+ "311 3.0 3.0 4.0 3.0 4.5 5.0 4.5 5.0 4.5 2.0 4.0 \n",
+ "380 4.0 5.0 4.0 5.0 4.0 5.0 4.0 NaN 4.0 5.0 4.0 \n",
+ "452 3.5 4.0 4.0 5.0 5.0 4.0 5.0 4.0 4.0 5.0 5.0 \n",
+ "468 4.0 3.0 3.5 3.5 3.5 3.0 2.5 NaN NaN 3.0 4.0 \n",
+ "509 3.0 5.0 5.0 5.0 4.0 4.0 3.0 5.0 2.0 4.0 4.5 \n",
+ "547 3.5 NaN NaN 5.0 5.0 2.0 3.0 5.0 NaN 5.0 5.0 \n",
+ "564 4.0 1.0 2.0 5.0 NaN 3.0 5.0 4.0 5.0 5.0 5.0 \n",
+ "580 4.0 4.5 4.0 4.5 4.0 3.5 3.0 4.0 4.5 4.0 4.5 \n",
+ "624 5.0 NaN 5.0 5.0 NaN 3.0 3.0 NaN 3.0 5.0 4.0 \n",
+ "\n",
+ "movieId 1196 1198 1270 2571 \n",
+ "userId \n",
+ "15 5.0 4.0 5.0 5.0 \n",
+ "30 4.0 5.0 5.0 3.0 \n",
+ "73 5.0 5.0 5.0 4.5 \n",
+ "212 NaN 3.0 3.0 5.0 \n",
+ "213 5.0 3.0 3.0 4.0 \n",
+ "294 4.0 4.5 4.0 4.5 \n",
+ "311 3.0 4.5 4.5 4.0 \n",
+ "380 4.0 NaN 3.0 5.0 \n",
+ "452 4.0 4.0 4.0 2.0 \n",
+ "468 3.0 3.5 3.0 3.0 \n",
+ "509 5.0 5.0 3.0 4.5 \n",
+ "547 2.5 2.0 3.5 3.5 \n",
+ "564 5.0 5.0 3.0 3.0 \n",
+ "580 4.0 3.5 3.0 4.5 \n",
+ "624 5.0 5.0 5.0 2.0 "
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 8
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "Kfx2VkaCaoJf",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Collaborative filtering"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "DwfdnPx3aoJh",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "val_idxs = get_cv_idxs(len(ratings))\n",
+ "wd=2e-4\n",
+ "n_factors = 50"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "vA_phG-OaoJp",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "cf = CollabFilterDataset.from_csv(path, 'ratings.csv', 'userId', 'movieId', 'rating')\n",
+ "learn = cf.get_learner(n_factors, val_idxs, 64, opt_fn=optim.Adam)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "Uw_1sRIgaoJ2",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 143
+ },
+ "outputId": "2ba87526-3e66-4e86-858c-f3bc16717cb9"
+ },
+ "cell_type": "code",
+ "source": [
+ "learn.fit(1e-2, 2, wds=wd, cycle_len=1, cycle_mult=2)"
+ ],
+ "execution_count": 11,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "f3c5a020ae3d4c76b70ae873cf059917",
+ "version_minor": 0,
+ "version_major": 2
+ },
+ "text/plain": [
+ "HBox(children=(IntProgress(value=0, description='Epoch', max=3), HTML(value='')))"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ },
+ {
+ "output_type": "stream",
+ "text": [
+ "epoch trn_loss val_loss \n",
+ " 0 0.814093 0.809851 \n",
+ " 1 0.773127 0.781133 \n",
+ " 2 0.596628 0.765896 \n",
+ "\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "[array([0.7659])]"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 11
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "CIkH0YEMaoKD",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Let's compare to some benchmarks. Here's [some benchmarks](https://www.librec.net/release/v1.3/example.html) on the same dataset for the popular Librec system for collaborative filtering. They show best results based on [RMSE](http://www.statisticshowto.com/rmse/) of 0.91. We'll need to take the square root of our loss, since we use plain MSE."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "DQ86B35xaoKF",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 35
+ },
+ "outputId": "2ff0d93a-74a5-497a-c3a2-52211cf357f5"
+ },
+ "cell_type": "code",
+ "source": [
+ "math.sqrt(0.776)"
+ ],
+ "execution_count": 12,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "0.8809086218218096"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 12
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "WYFD98xbaoKQ",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Looking good - we've found a solution better than any of those benchmarks! Let's take a look at how the predictions compare to actuals for this model."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "tzCTw9s8aoKV",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "preds = learn.predict()"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "BNXnU8gYaoKb",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 441
+ },
+ "outputId": "5cbbaae8-d19d-435d-96f7-3288a573cd84"
+ },
+ "cell_type": "code",
+ "source": [
+ "y=learn.data.val_y\n",
+ "sns.jointplot(preds, y, kind='hex', stat_func=None);"
+ ],
+ "execution_count": 14,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\nMKgF/z9sR/+9ZplsKQAAAABJRU5ErkJggg==\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "zd-rTE8xaoKl",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Analyze results"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "QppvoDQsaoKm",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Movie bias"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "enSxQrVWaoKn",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "movie_names = movies.set_index('movieId')['title'].to_dict()\n",
+ "g=ratings.groupby('movieId')['rating'].count()\n",
+ "topMovies=g.sort_values(ascending=False).index.values[:3000]\n",
+ "topMovieIdx = np.array([cf.item2idx[o] for o in topMovies])"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "fEEWZXbIaoKr",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 125
+ },
+ "outputId": "2c7dfbdc-069b-44ac-a194-8753db482e6c"
+ },
+ "cell_type": "code",
+ "source": [
+ "m=learn.model; m.cuda()"
+ ],
+ "execution_count": 16,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "EmbeddingDotBias(\n",
+ " (u): Embedding(671, 50)\n",
+ " (i): Embedding(9066, 50)\n",
+ " (ub): Embedding(671, 1)\n",
+ " (ib): Embedding(9066, 1)\n",
+ ")"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 16
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "BYYeQCTpaoK4",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "First, we'll look at the movie bias term. Here, our input is the movie id (a single id), and the output is the movie bias (a single float)."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "gTxGsWo3aoK6",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "movie_bias = to_np(m.ib(V(topMovieIdx)))"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "1bxr0OpKaoLM",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 143
+ },
+ "outputId": "85de1f50-df76-4f1c-d618-0bbb79f5c61a"
+ },
+ "cell_type": "code",
+ "source": [
+ "movie_bias"
+ ],
+ "execution_count": 18,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([[ 0.84709],\n",
+ " [ 0.87448],\n",
+ " [ 1.3271 ],\n",
+ " ...,\n",
+ " [ 0.34872],\n",
+ " [-0.00952],\n",
+ " [ 0.19517]], dtype=float32)"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 18
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "DdAFVLLkaoLV",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "movie_ratings = [(b[0], movie_names[i]) for i,b in zip(topMovies,movie_bias)]"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "E275orCkaoLf",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Now we can look at the top and bottom rated movies. These ratings are corrected for different levels of reviewer sentiment, as well as different types of movies that different reviewers watch."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "sSdOWsFpaoLg",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 287
+ },
+ "outputId": "b902277a-486a-43e4-dc5d-ba3dd47dec9b"
+ },
+ "cell_type": "code",
+ "source": [
+ "sorted(movie_ratings, key=lambda o: o[0])[:15]"
+ ],
+ "execution_count": 20,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "[(-0.92658275, 'Battlefield Earth (2000)'),\n",
+ " (-0.7169637, 'Batman & Robin (1997)'),\n",
+ " (-0.7130065, 'Mighty Morphin Power Rangers: The Movie (1995)'),\n",
+ " (-0.7125808, 'Wild Wild West (1999)'),\n",
+ " (-0.7081583, 'Super Mario Bros. (1993)'),\n",
+ " (-0.7075122, 'Speed 2: Cruise Control (1997)'),\n",
+ " (-0.7018496, 'Anaconda (1997)'),\n",
+ " (-0.6857145, 'Inspector Gadget (1999)'),\n",
+ " (-0.63308793, 'Jaws 3-D (1983)'),\n",
+ " (-0.6216595, 'Hollow Man (2000)'),\n",
+ " (-0.5970961, \"Joe's Apartment (1996)\"),\n",
+ " (-0.5883046, 'Message in a Bottle (1999)'),\n",
+ " (-0.57434773, 'Flintstones, The (1994)'),\n",
+ " (-0.5714112, 'Congo (1995)'),\n",
+ " (-0.56774807, 'Bio-Dome (1996)')]"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 20
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "_-7c4VCOaoLt",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 287
+ },
+ "outputId": "0cd750cd-15cf-4883-c8a4-8e5d4feffb56"
+ },
+ "cell_type": "code",
+ "source": [
+ "sorted(movie_ratings, key=itemgetter(0))[:15]"
+ ],
+ "execution_count": 21,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "[(-0.92658275, 'Battlefield Earth (2000)'),\n",
+ " (-0.7169637, 'Batman & Robin (1997)'),\n",
+ " (-0.7130065, 'Mighty Morphin Power Rangers: The Movie (1995)'),\n",
+ " (-0.7125808, 'Wild Wild West (1999)'),\n",
+ " (-0.7081583, 'Super Mario Bros. (1993)'),\n",
+ " (-0.7075122, 'Speed 2: Cruise Control (1997)'),\n",
+ " (-0.7018496, 'Anaconda (1997)'),\n",
+ " (-0.6857145, 'Inspector Gadget (1999)'),\n",
+ " (-0.63308793, 'Jaws 3-D (1983)'),\n",
+ " (-0.6216595, 'Hollow Man (2000)'),\n",
+ " (-0.5970961, \"Joe's Apartment (1996)\"),\n",
+ " (-0.5883046, 'Message in a Bottle (1999)'),\n",
+ " (-0.57434773, 'Flintstones, The (1994)'),\n",
+ " (-0.5714112, 'Congo (1995)'),\n",
+ " (-0.56774807, 'Bio-Dome (1996)')]"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 21
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "Q6fpxHZoaoL5",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 287
+ },
+ "outputId": "d86e3807-4a7d-4c77-9a44-479c650189f9"
+ },
+ "cell_type": "code",
+ "source": [
+ "sorted(movie_ratings, key=lambda o: o[0], reverse=True)[:15]"
+ ],
+ "execution_count": 22,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "[(1.3271029, 'Shawshank Redemption, The (1994)'),\n",
+ " (1.1674513, 'Godfather, The (1972)'),\n",
+ " (1.0488297, 'Usual Suspects, The (1995)'),\n",
+ " (0.9501025, 'Godfather: Part II, The (1974)'),\n",
+ " (0.94562376, \"Schindler's List (1993)\"),\n",
+ " (0.93235403, 'Fargo (1996)'),\n",
+ " (0.89398134, 'Princess Bride, The (1987)'),\n",
+ " (0.88672304, '12 Angry Men (1957)'),\n",
+ " (0.88666296, 'Dark Knight, The (2008)'),\n",
+ " (0.8744787, 'Pulp Fiction (1994)'),\n",
+ " (0.84709436, 'Forrest Gump (1994)'),\n",
+ " (0.8419705, 'Silence of the Lambs, The (1991)'),\n",
+ " (0.8238199, 'Star Wars: Episode V - The Empire Strikes Back (1980)'),\n",
+ " (0.814556, 'Rear Window (1954)'),\n",
+ " (0.80908984, 'To Kill a Mockingbird (1962)')]"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 22
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "ipNxDLYaaoMC",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Embedding interpretation"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "Rh460mL8aoMC",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "We can now do the same thing for the embeddings."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "Bm8IoigqaoMG",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 35
+ },
+ "outputId": "c0ca73e0-18b1-4c72-cdc2-4416762b33de"
+ },
+ "cell_type": "code",
+ "source": [
+ "movie_emb = to_np(m.i(V(topMovieIdx)))\n",
+ "movie_emb.shape"
+ ],
+ "execution_count": 23,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "(3000, 50)"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 23
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "5pglg7pNaoMM",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Because it's hard to interpret 50 embeddings, we use [PCA](https://plot.ly/ipython-notebooks/principal-component-analysis/) to simplify them down to just 3 vectors. "
+ ]
+ },
+ {
+ "metadata": {
+ "id": "HSsiwtKyaoMN",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "from sklearn.decomposition import PCA\n",
+ "pca = PCA(n_components=3)\n",
+ "movie_pca = pca.fit(movie_emb.T).components_"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "kvWR1kmLaoMT",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 35
+ },
+ "outputId": "70721817-5562-444c-b7fc-9e36ed0e1769"
+ },
+ "cell_type": "code",
+ "source": [
+ "movie_pca.shape"
+ ],
+ "execution_count": 25,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "(3, 3000)"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 25
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "ro3nsvQOaoMY",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "fac0 = movie_pca[0]\n",
+ "movie_comp = [(f, movie_names[i]) for f,i in zip(fac0, topMovies)]"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "bighQuJFaoMb",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Here's the 1st component. It seems to be 'easy watching' vs 'serious'."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "D_PlpPlNaoMe",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 197
+ },
+ "outputId": "0a9071ff-5b3a-4337-fdde-b2cd8077c016"
+ },
+ "cell_type": "code",
+ "source": [
+ "sorted(movie_comp, key=itemgetter(0), reverse=True)[:10]"
+ ],
+ "execution_count": 27,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "[(0.0748648, 'Pulp Fiction (1994)'),\n",
+ " (0.067012206, 'Being John Malkovich (1999)'),\n",
+ " (0.06494048, 'Goodfellas (1990)'),\n",
+ " (0.06399871, 'Apocalypse Now (1979)'),\n",
+ " (0.063683785, 'Fargo (1996)'),\n",
+ " (0.06240465, 'Taxi Driver (1976)'),\n",
+ " (0.06120869, '2001: A Space Odyssey (1968)'),\n",
+ " (0.06092186, 'Chinatown (1974)'),\n",
+ " (0.060390476, 'Full Metal Jacket (1987)'),\n",
+ " (0.059391852, 'Godfather, The (1972)')]"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 27
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "J3InLi6OaoMl",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 197
+ },
+ "outputId": "cda64745-9384-49dd-f090-9a97d26d42d3"
+ },
+ "cell_type": "code",
+ "source": [
+ "sorted(movie_comp, key=itemgetter(0))[:10]"
+ ],
+ "execution_count": 28,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "[(-0.081905656, 'Independence Day (a.k.a. ID4) (1996)'),\n",
+ " (-0.067392305, 'Armageddon (1998)'),\n",
+ " (-0.06071082, 'Mission: Impossible II (2000)'),\n",
+ " (-0.058770295, 'Police Academy 3: Back in Training (1986)'),\n",
+ " (-0.05820271, 'Waterworld (1995)'),\n",
+ " (-0.057661768, 'Lost in Space (1998)'),\n",
+ " (-0.057333887, 'Miss Congeniality (2000)'),\n",
+ " (-0.0529592, 'Man in the Iron Mask, The (1998)'),\n",
+ " (-0.052421413, 'Home Alone 3 (1997)'),\n",
+ " (-0.05172587, 'Lost World: Jurassic Park, The (1997)')]"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 28
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "PAReed_JaoMp",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "fac1 = movie_pca[1]\n",
+ "movie_comp = [(f, movie_names[i]) for f,i in zip(fac1, topMovies)]"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "2T855Ob8aoMt",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Here's the 2nd component. It seems to be 'CGI' vs 'dialog driven'."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "HhFG0fodaoMu",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 215
+ },
+ "outputId": "0a9d0912-063b-46c5-c13f-c5f8d3736a61"
+ },
+ "cell_type": "code",
+ "source": [
+ "sorted(movie_comp, key=itemgetter(0), reverse=True)[:10]"
+ ],
+ "execution_count": 30,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "[(0.13113573, 'Lord of the Rings: The Fellowship of the Ring, The (2001)'),\n",
+ " (0.12278012, 'Lord of the Rings: The Return of the King, The (2003)'),\n",
+ " (0.121389315, 'Star Wars: Episode IV - A New Hope (1977)'),\n",
+ " (0.11740691, 'Star Wars: Episode VI - Return of the Jedi (1983)'),\n",
+ " (0.10265454, 'Matrix, The (1999)'),\n",
+ " (0.09896215, 'Lethal Weapon (1987)'),\n",
+ " (0.09785297, 'Lord of the Rings: The Two Towers, The (2002)'),\n",
+ " (0.09635479,\n",
+ " 'Raiders of the Lost Ark (Indiana Jones and the Raiders of the Lost Ark) (1981)'),\n",
+ " (0.094043314, 'Star Wars: Episode V - The Empire Strikes Back (1980)'),\n",
+ " (0.08387991, 'Forrest Gump (1994)')]"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 30
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "mCq86eSVaoM0",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 215
+ },
+ "outputId": "7cf7d15d-46eb-4474-e557-ce386323fb4b"
+ },
+ "cell_type": "code",
+ "source": [
+ "sorted(movie_comp, key=itemgetter(0))[:10]"
+ ],
+ "execution_count": 31,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "[(-0.054945692, 'Stepford Wives, The (1975)'),\n",
+ " (-0.047687177, 'Leaving Las Vegas (1995)'),\n",
+ " (-0.04644712, 'Mulholland Drive (2001)'),\n",
+ " (-0.046221506, 'Space Jam (1996)'),\n",
+ " (-0.046169367, 'Pieces of April (2003)'),\n",
+ " (-0.04288475, 'Friday the 13th Part 3: 3D (1982)'),\n",
+ " (-0.042447466,\n",
+ " 'Dr. Strangelove or: How I Learned to Stop Worrying and Love the Bomb (1964)'),\n",
+ " (-0.042090956, 'Bringing Up Baby (1938)'),\n",
+ " (-0.04192074, '8 1/2 (8½) (1963)'),\n",
+ " (-0.040324356, 'Home Alone 2: Lost in New York (1992)')]"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 31
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "4DiEWiI1aoM7",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "We can draw a picture to see how various movies appear on the map of these components. This picture shows the first two components."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "t7Q8_qTMaoM8",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 863
+ },
+ "outputId": "1cb904dd-4301-4eaa-d2c9-1d0d7a7463b5"
+ },
+ "cell_type": "code",
+ "source": [
+ "idxs = np.random.choice(len(topMovies), 50, replace=False)\n",
+ "X = fac0[idxs]\n",
+ "Y = fac1[idxs]\n",
+ "plt.figure(figsize=(15,15))\n",
+ "plt.scatter(X, Y)\n",
+ "for i, x, y in zip(topMovies[idxs], X, Y):\n",
+ " plt.text(x,y,movie_names[i], color=np.random.rand(3)*0.7, fontsize=11)\n",
+ "plt.show()"
+ ],
+ "execution_count": 32,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\nG/GX+xkeGUXGkcq9kPm5Obz2yCT+75OvqB/XxFmmS9/+rF40nzJrKWXWUlYtnEvXiwfSvmcftqxb\nQ35ONna7nWVzZtHt4kE0bdue1KRDpBw8AMAvs7+jW/9BzvrSk5OoG1PvL/dRRGqm5akiIiIi/2B5\nhVay863OY696bajIO0LG3P8jy82DSUv8iahbl7uefv6E9Yy8/S4eGHMVEVExXH3bnbw48S6+//g9\nWnbqwv/dcxtuHu6MuuNuXntoIhNGDsdut7mekaxBxz592bhiGbHxTVnwzVcU5efx0qR7nfkXX34V\nl4y6jouvuJqJoy4Dg4GLr7ia+NZtAbjx/od4+MZrMbmZaN6+Ez0HD8FgMDDh+Vd57r47MLm5EVU/\nluHX3wxAfk426SlJxLdqeyq3U0RqYPgrywfOp4yMgtrdwbMoPNyfjIyC890NkRppfEptpvEptdnf\nPT6t5TYe/WAtWccFjn8IDfDi2Vu74Olu+tvaO13pyUk8dOM1vDt3ifPtqGfTJy9NxsfPn1F33H3W\n2/o30edn7RQe7l/DJt5zR8tTRURERP7BPN1NtIsPrzGvXXxYrQgYofKlNKNuv4v3Jz9x1tva9ftv\n7N62havGjjvrbYlcCDTTWIvpmx6pzTQ+pTbT+JTa7GyMz2NvT80kp6CUYH8v2sWHMapfY0xGzRHI\nX6fPz9rpfM80ak+jiIiIyD+cyWhkdP94RvSJI6/QSqCfZ62ZYRSRfz4FjSIiIiL/Ep7uJiKCfc53\nN0TkX0brFURERERERMQlBY0iIiIiIiLikoJGERERERERcUlBo4iIiIiIiLikoFFERERERERcUtAo\nIiIiIiIiLiloFBEREREREZcUNIqIiIiIiIhLChpFRERERETEJQWNIiIiIiIi4pKCRhEREREREXFJ\nQaOIiIiIiIi4pKBRREREREREXFLQKCIiIiIiIi4paBQRERERERGXFDSKiIiIiIiISwoaRURERERE\nxCUFjSIiIiIiIuKSgkYRERERERFxSUGjiIiIiIiIuKSgUURERERERFxS0CgiIiIiIiIuKWgUERER\nERERlxQ0ioiIiIiIiEsKGkVERERERMQlBY0iIiIiIiLikoJGERERERERcUlBo4iIiIiIiLikoFFE\nRERERERcUtAoIiIiIiIiLiloFBEREREREZcUNIqIiIiIiIhLChpFRERERETEJQWNIiIiIiIi4pKC\n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\nxzbs6xWkdVvz+VrSrxuEzWZrtvf3f/7x3wSFBHLbA7c2eVtw7vtFTVYL/PaHg4mPrn8HzpaWl53H\n7q17Lum7Ib+NtV+to3vf7kTHRjX6tfOz8zlsHrmoza7WfL6W1fPX8vhrj3rKao5Pp9PJr37wAt97\n9A56DOje6H2t6W/PziS5ezI3TL2uSdu5XCk0XoBCo0KjtKzWOquyY8k8Erv3qbUhTlMpyc9lz8pF\npE347iVvQCIN09Svn2d3T80it7CM6PAg0lJjmTK6KzZvOwSKVGut7++X+/vF3h37sPnZ6NK9c5O2\nc9A8REV5Bam9u124cgtorePzctfSoVH3NIrIeQX620hLjat3ViUtNdan/wA4n9TBo9i1YiFhMfHn\nzFo2JpfTyb71KzCGjVFgbEVsVitTx6YyeUSKZ0fhy/X/gkhjudzfL7r1+nb3m16szkanZmlHpDEp\nNIrIBU0ZXfVGWnNWZVjf9kwc0vSzdE0lICSUfjdMbvJ2rDYbfa6b1OTtSMsI9Lf57HI7kZZQ3/vF\nmVl4Ebl8aXmqD9PyAPE1Nb+nMal9lMan+Cy9foovuxLGZ833C1+fYZTaroTxeTnS8lQRuWxoVkVE\nRC6G3i9EWhfdrS8iIiIiIiJeKTSKiIiIiIiIVwqNIiIiIiIi4pVCo4iIiIiIiHil0CgiIiIiIiJe\nKTSKiIiIiIiIVwqNIiIiIiIi4pVCo4iIiIiIiHil0CgiIiIiIiJeKTSKiIiIiIiIVwqNIiIiIiIi\n4pVCo4iIiIiIiHil0CgiIiIiIiJeKTSKiIiIiIiIVwqNIiIiIiIi4pVCo4iIiIiIiHil0CgiIiIi\nIiJeKTSKiIiIiIiIVwqNIiIiIiIi4pVfS3dARKQp5J46wl/uH0qH7gOwWCyUlxbTpe9wxt35NBaL\n5Vtde8n7f2DlnNd44p3tBIdFeso//esj7N+2gsdmbbrka85++Yd8597niYhpd1H1XU4n/3zx+4yc\n8iiRsYl8+teHqSx3UO4oYdwPfkHXtFEU52fx8Z9/QnlZCS5XJd+599d06D6ACkcpc/7yUwpzTlJZ\nUc7IKY/SfdD1bFr0L7Yu+9DTRt7powy4/k6K87No27E7/a+bdsnPS0RERC5/Co0i0mqFRsYw/bef\nAuB0VvLqA8PoPfxm2nXp/a2vHRmXyDcrPiZ9/L0AlDtKOHlwZ4OvN+Xxty6p/prP3iChU086dh/I\n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\n04ENpmnmm6ZZCqyurvNP4NHqOnYgpoHti4iIiIiISDNoaGhMoCr0YZqmC3AbhhFQ3/Fqp4F2pmlW\nmKZZVl32MPB+A9sXERERERGRZnDBexoNw5gBzKhTnF7nseUCl6l13DCMB4GrgYkXaj86OgQ/vyt3\ny/y4uPCW7oKIVxqf4ss0PsWXaXyKL9P4lLouGBpN05wFzKpZZhjGO1TNJm6r3hTHYppmeY0qx6uP\nn5EIrKs+dzpVYfFm0zQrLtR+bm7Jhaq0WnFx4djthS3dDZF6aXyKL9P4FF+m8Sm+TOPTN7V0kG/o\n8tRFwO3VP08EltY5vh4YaBhGlGEYYVTdz7jSMIwuwI+BW2ssUxUREREREREf1aCv3ABmA+MMw1gF\nOIC7AQzDeApYbprm2uqfvwDcwPOmaeYbhvEkVZvfLDAM48y1rqszSykiIiIiIiI+wuJ2u1u6D+dl\ntxf6dgebkJYHiC/T+BRfpvEpvkzjU3yZxqdviosLv9AeMk2qoctTRURERERE5Aqg0CgiIiIiIiJe\nKTSKiIiIiIiIVwqNIiIiIiIi4pVCo4iIiIiIiHil0CgiIiIiIiJeKTSKiIiIiIiIVwqNIiIiIiIi\n4pVCo4hIEyspzmXp3JfPKV/4n2dwuZxez8s+fZB1S2YCsH7p22Sd2t9ofVr4n2cwv1lUq6y0OI+F\nHz5L5sHNjdJG9qn9bFn9Pm63m8N717HmyzdZu/hvbFv3IS5nJQBHD2xk7eI3WffVW+zcNBe32wXA\n6eMmaxf/jfVLZrF1zQc4KysAyMs+yrqv3mL9kllsXPEu5WXFlBTnsm7JTCorHI3SbxEREalNoVFE\n5AoUGBzOqWO7cLtcnrJjh7YQGhbTKNevrHCwc9N/6TngZooKTnN47zoGj57BkLE/wuWs5MTR7ZSV\n5LN/1zIGXHsX6aPvw1FawIkj23E6K9i58TP6DZlC+ugZBASFcyhjDQDbv55D937jSR89g5i2KWTs\nWExIaDSJyf0wv/miUfouIiIitfm1dAdERK50bpeL3VsXUJB7HLAQE9+Zbr3Heq2/f9cyTh83sVpt\nhEXGc1XaBDYsf4ceaRMIj0pgz9aFFOSdYNDIe3C5nCyf/ydGTHgUq9XmuYbFYiMiqh32k3uJb28A\ncPLodmITunnqHNn3NccOb8VqtWG1+tFvyHfxDwhm2bxX6NRtCPaTGZQW59Kz/03EtE2p1cfMA5uI\n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\niIiIiIhXCo0iIiIiIiLilUKjiIiIiIiIeKXQKCIiIiIiIl4pNIqIiIiIiIhXCo0iIiIiIiLilUKj\niIiIiIiIeKXQKCIiIiIiIl4pNIqIiIiIiIhXCo0iIiIiIiLilUKjiIiIiIiIeKXQKCIiIiIiIl4p\nNIqIiIiIiIhXCo0iIiIiIiLilUKjiIiIiIiIeKXQKCIiIiIiIl4pNIqIiIiIiIhXCo0iIiIiIiLi\nlUKjiIiIiIiIeKXQKCIiIiIiIl4pNIqIiIiIiIhXCo0iIiIiIiLilUKjiIiIiIiIeKXQKCIiIiIi\nIl4pNIqIiIiIiIhXCo0iIiIiIiLilUKjiIiIiIiIeKXQKCIiIiIiIl4pNIqIiIiIiIhXCo0iIiIi\nIiLilUKjiIiIiIiIeKXQKCIiIiIiIl4pNIqIiIiIiIhXfg05yTAMf+AdIBlwAveYpnmgTp1pwMOA\nC3jLNM23axxrC+wBbjFNc1mDei4iIiIiIiJNrqEzjVOBPNM0rwF+A7xU86BhGKHAs8BYYCTwiGEY\nbWpUeRmoFTJFRERERETE9zQ0NI4BPqn+eTEwrM7xdGCDaZr5pmmWAqvP1DEMYzRQCGxvYNsiIiIi\nIiLSTBoaGhMAO4Bpmi7AbRhGQH3Hq50G2lXXeQ74ZQPbFRERERERkWZ0wXsaDcOYAcyoU5xe57Hl\nApc5c/wpYKZpmnmGYVxUB6OjQ/Dzs11U3dYoLi68pbsg4pXGp/gyjU/xZRqf4ss0PqWuC4ZG0zRn\nAbNqlhmG8Q5Vs4nbqjfFsZimWV6jyvHq42ckAuuAuwCbYRg/AVKAQYZh3G6a5k5v7efmllzkU2l9\n4uLCsdsLW7obIvXS+BRfpvEpvkzjU3yZxqdvaukg36DdU4FFwO3AF8BEYGmd4+uBWYZhRAGVVN3P\n+LBpmvPOVKgOnu+cLzACxMWFX2gWs1Vr6QEicj4an+LLND7Fl2l8ii/T+JS6GhoaZwPjDMNYBTiA\nuwEMw3gKWG6a5trqn78A3MDzpmnmN0J/RUREREREpBlZ3G53S/dBREREREREfFRDd08VERERERGR\nK4BCo4iIiIiIiHil0CgiIiIiIiJeKTSKiIiIiIiIVwqNIiIiIiIi4lVDv3JDGoFhGP7AO0Ay4ATu\nMU3zQJ0604CHARfwlmmab9c41hbYA9ximuayZuq2XCEaOj4Nw/AD3gZSqHqN+Zlpmquas+/SuhmG\n8WdgMFVf6fSQaZobahwbC/yWqjG7wDTNFy50jkhjauD4/AMwnKrXzJdM05zT7B2XK0JDxmf1sWBg\nB/CCaZrvNGunxSdoprFlTQXyTNO8BvgN8FLNg4ZhhALPAmOBkcAjhmG0qVHlZaDWH/Eijaih4/MH\nQHH1edOBPzVnp6V1MwxjBNDNNM0hVI2vV+tUeRWYDAwDrjMMo8dFnCPSKBo4PkcBvarPuQH43+bs\ns1w5GjI+axx7Gshplo6KT1JobFljgE+qf15M1X/SmtKBDaZp5pumWQqsPlPHMIzRQCGwvZn6Klee\nho7PfwKPVtexAzHN0Fe5cowBPgUwTXM3EG0YRgSAYRhdgBzTNI+apukCFlTX93qOSCNryPhcAdxe\nfX4eEGoYhq3Zey5XgoaMTwzD6A70AOa3SK/FJyg0tqwEqv6opvo/qNswjID6jlc7DbSrrvMc8Mvm\n6qhckRo0Pk3TrDBNs6y67GHg/eborFwx6o47e3VZfcdOA+0ucI5IY7rk8WmaptM0zeLqsulULQt0\nNnlP5UrUkNdPgFc4+2GwXKF0T2MzMQxjBjCjTnF6nceWC1zmzPGngJmmaeYZhtEY3ZMrXCOPzzPX\nfBC4Gpj47Xoncl7nG5fejl1oLIs0losen4ZhTKIqNF7XpD0SOeuC49MwjDuBtaZpHtTfnFc2hcZm\nYprmLGBWzTLDMN6h6pOdbdWbjlhM0yyvUeU4tT8NTwTWAXcBNsMwfkLVZiODDMO43TTNnU34FKQV\na+TxiWEY06kKizebplnRhF2XK0/dcdceOOHlWGJ1Wfl5zhFpTA0ZnxiGcT1Vq4duME0zvxn6KVem\nhozPCUAXwzBuBJIAh2EYmaZpLm6G/ooP0fLUlrWIs/cxTASW1jm+HhhoGEaUYRhhVN0vttI0zWGm\naQ42TXMwVevLH1BglCbQoPFZfV/Ej4FbayxTFWksi4DbAAzDuBo4bppmIYBpmoeACMMwOlXv4ntj\ndX2v54g0sksen4ZhRFK1sd2NpmlqoxFpSpc8Pk3TnGKa5sDqvzlnUbV7qgLjFUgzjS1rNjDOMIxV\ngAO4G8AwjKeA5aZprq3++QuqtkZ+Xp9ASjNq0Pg0DONJqja/WVBjKct1dWYpRRrENM01hmFsMgxj\nDVVf9fKgYRh3A/mmaX4C3A/8u7r6bNM0M4CMuue0RN+l9WvI+DQM44dALPCfGq+Zd5qmeaSZuy+t\nXANfP0UAsLjd7pbug4iIiIiIiPgoLU8VERERERERrxQaRURERERExCuFRhEREREREfFKoVFERERE\nRES8UmgUERERERERrxQaRURERERExCuFRhEREREREfHq/wMiSY9wk22uVQAAAABJRU5ErkJggg==\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "1201U-CkaoNK",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Collab filtering from scratch"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "FXWsGVweaoNL",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Dot product example"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "IF8jf6NnaoNN",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 143
+ },
+ "outputId": "c9e91f1b-d8b7-4aeb-ec94-72012eb7f281"
+ },
+ "cell_type": "code",
+ "source": [
+ "a = T([[1.,2],[3,4]])\n",
+ "b = T([[2.,2],[10,10]])\n",
+ "a,b"
+ ],
+ "execution_count": 33,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "(\n",
+ " 1 2\n",
+ " 3 4\n",
+ " [torch.cuda.FloatTensor of size 2x2 (GPU 0)], \n",
+ " 2 2\n",
+ " 10 10\n",
+ " [torch.cuda.FloatTensor of size 2x2 (GPU 0)])"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 33
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "C_tffm2NaoNS",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 89
+ },
+ "outputId": "7221d7dd-9189-4848-953e-cb8853f43ef1"
+ },
+ "cell_type": "code",
+ "source": [
+ "a*b"
+ ],
+ "execution_count": 34,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "\n",
+ " 2 4\n",
+ " 30 40\n",
+ "[torch.cuda.FloatTensor of size 2x2 (GPU 0)]"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 34
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "Vu4EAqlgaoNY",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 89
+ },
+ "outputId": "71b2910a-121e-47e8-a40c-5b0dfa9872cd"
+ },
+ "cell_type": "code",
+ "source": [
+ "(a*b).sum(1)"
+ ],
+ "execution_count": 35,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "\n",
+ " 6\n",
+ " 70\n",
+ "[torch.cuda.FloatTensor of size 2 (GPU 0)]"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 35
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "KKpPObVAaoNc",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "class DotProduct(nn.Module):\n",
+ " def forward(self, u, m): return (u*m).sum(1)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "6l0zAogkaoNf",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "model=DotProduct()"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "GU9b0CRnaoNj",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 89
+ },
+ "outputId": "88e74eb4-1c59-42f0-f140-4e7e99bf8038"
+ },
+ "cell_type": "code",
+ "source": [
+ "model(a,b)"
+ ],
+ "execution_count": 38,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "\n",
+ " 6\n",
+ " 70\n",
+ "[torch.cuda.FloatTensor of size 2 (GPU 0)]"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 38
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "wC0oZrxuaoNm",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Dot product model"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "MSbo4cylaoNn",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "u_uniq = ratings.userId.unique()\n",
+ "user2idx = {o:i for i,o in enumerate(u_uniq)}\n",
+ "ratings.userId = ratings.userId.apply(lambda x: user2idx[x])\n",
+ "\n",
+ "m_uniq = ratings.movieId.unique()\n",
+ "movie2idx = {o:i for i,o in enumerate(m_uniq)}\n",
+ "ratings.movieId = ratings.movieId.apply(lambda x: movie2idx[x])\n",
+ "\n",
+ "n_users=int(ratings.userId.nunique())\n",
+ "n_movies=int(ratings.movieId.nunique())"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "37blaBCeaoNp",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "class EmbeddingDot(nn.Module):\n",
+ " def __init__(self, n_users, n_movies):\n",
+ " super().__init__()\n",
+ " self.u = nn.Embedding(n_users, n_factors)\n",
+ " self.m = nn.Embedding(n_movies, n_factors)\n",
+ " self.u.weight.data.uniform_(0,0.05)\n",
+ " self.m.weight.data.uniform_(0,0.05)\n",
+ " \n",
+ " def forward(self, cats, conts):\n",
+ " users,movies = cats[:,0],cats[:,1]\n",
+ " u,m = self.u(users),self.m(movies)\n",
+ " return (u*m).sum(1)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "d9bRLT4caoNs",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "x = ratings.drop(['rating', 'timestamp'],axis=1)\n",
+ "y = ratings['rating'].astype(np.float32)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "AblAwxcwaoNv",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "data = ColumnarModelData.from_data_frame(path, val_idxs, x, y, ['userId', 'movieId'], 64)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "50xKZlP2aoNz",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "wd=1e-5\n",
+ "model = EmbeddingDot(n_users, n_movies).cuda()\n",
+ "opt = optim.SGD(model.parameters(), 1e-1, weight_decay=wd, momentum=0.9)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "k8vALYNHaoN2",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 143
+ },
+ "outputId": "755ddc08-3a96-4be6-8d3a-c233344d2555"
+ },
+ "cell_type": "code",
+ "source": [
+ "fit(model, data, 3, opt, F.mse_loss)"
+ ],
+ "execution_count": 44,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "cb933e4427864a27a9927a430533c2b2",
+ "version_minor": 0,
+ "version_major": 2
+ },
+ "text/plain": [
+ "HBox(children=(IntProgress(value=0, description='Epoch', max=3), HTML(value='')))"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ },
+ {
+ "output_type": "stream",
+ "text": [
+ "epoch trn_loss val_loss \n",
+ " 0 1.694518 1.636231 \n",
+ " 1 1.061668 1.299865 \n",
+ " 2 0.955639 1.225609 \n",
+ "\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "[array([1.22561])]"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 44
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "QY6F_-DyaoN7",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "set_lrs(opt, 0.01)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "OIPqIIB1aoOE",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 143
+ },
+ "outputId": "a84bd912-de17-4888-8172-27847d5bca13"
+ },
+ "cell_type": "code",
+ "source": [
+ "fit(model, data, 3, opt, F.mse_loss)"
+ ],
+ "execution_count": 46,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "75097afb143846beb1155d3535a8e106",
+ "version_minor": 0,
+ "version_major": 2
+ },
+ "text/plain": [
+ "HBox(children=(IntProgress(value=0, description='Epoch', max=3), HTML(value='')))"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ },
+ {
+ "output_type": "stream",
+ "text": [
+ "epoch trn_loss val_loss \n",
+ " 0 0.716424 1.147718 \n",
+ " 1 0.698611 1.13465 \n",
+ " 2 0.670888 1.130182 \n",
+ "\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "[array([1.13018])]"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 46
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "K4hHVoGBaoOI",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Bias"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "VWXz3cl3aoOJ",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 35
+ },
+ "outputId": "1ca649cb-2643-4c2b-a265-d1da0ba389c6"
+ },
+ "cell_type": "code",
+ "source": [
+ "min_rating,max_rating = ratings.rating.min(),ratings.rating.max()\n",
+ "min_rating,max_rating"
+ ],
+ "execution_count": 47,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "(0.5, 5.0)"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 47
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "3eyW9mo8aoOL",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def get_emb(ni,nf):\n",
+ " e = nn.Embedding(ni, nf)\n",
+ " e.weight.data.uniform_(-0.01,0.01)\n",
+ " return e\n",
+ "\n",
+ "class EmbeddingDotBias(nn.Module):\n",
+ " def __init__(self, n_users, n_movies):\n",
+ " super().__init__()\n",
+ " (self.u, self.m, self.ub, self.mb) = [get_emb(*o) for o in [\n",
+ " (n_users, n_factors), (n_movies, n_factors), (n_users,1), (n_movies,1)\n",
+ " ]]\n",
+ " \n",
+ " def forward(self, cats, conts):\n",
+ " users,movies = cats[:,0],cats[:,1]\n",
+ " um = (self.u(users)* self.m(movies)).sum(1)\n",
+ " res = um + self.ub(users).squeeze() + self.mb(movies).squeeze()\n",
+ " res = F.sigmoid(res) * (max_rating-min_rating) + min_rating\n",
+ " return res"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "xE4m-_z4aoOQ",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "wd=2e-4\n",
+ "model = EmbeddingDotBias(cf.n_users, cf.n_items).cuda()\n",
+ "opt = optim.SGD(model.parameters(), 1e-1, weight_decay=wd, momentum=0.9)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "5xHfcK7DaoOU",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 143
+ },
+ "outputId": "079b746c-e8e0-4338-fcf0-179bbb5ee7f8"
+ },
+ "cell_type": "code",
+ "source": [
+ "fit(model, data, 3, opt, F.mse_loss)"
+ ],
+ "execution_count": 50,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "f9d8daa95b4241b2a5d16bed0a6058b2",
+ "version_minor": 0,
+ "version_major": 2
+ },
+ "text/plain": [
+ "HBox(children=(IntProgress(value=0, description='Epoch', max=3), HTML(value='')))"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ },
+ {
+ "output_type": "stream",
+ "text": [
+ "epoch trn_loss val_loss \n",
+ " 0 0.849339 0.837104 \n",
+ " 1 0.811242 0.814318 \n",
+ " 2 0.769739 0.811844 \n",
+ "\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "[array([0.81184])]"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 50
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "ayPUNtnwaoOX",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "set_lrs(opt, 1e-2)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "wald34VJaoOa",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 143
+ },
+ "outputId": "179ec447-08c3-49d0-eba8-767f856c91a7"
+ },
+ "cell_type": "code",
+ "source": [
+ "fit(model, data, 3, opt, F.mse_loss)"
+ ],
+ "execution_count": 52,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "b59d396c48cc4ed5b8333f9f27e83b56",
+ "version_minor": 0,
+ "version_major": 2
+ },
+ "text/plain": [
+ "HBox(children=(IntProgress(value=0, description='Epoch', max=3), HTML(value='')))"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ },
+ {
+ "output_type": "stream",
+ "text": [
+ "epoch trn_loss val_loss \n",
+ " 0 0.73834 0.803762 \n",
+ " 1 0.748575 0.801889 \n",
+ " 2 0.751373 0.801111 \n",
+ "\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "[array([0.80111])]"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 52
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "P4sWJuGkaoOe",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Mini net"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "BMGg0RqzaoOf",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "class EmbeddingNet(nn.Module):\n",
+ " def __init__(self, n_users, n_movies, nh=10, p1=0.05, p2=0.5):\n",
+ " super().__init__()\n",
+ " (self.u, self.m) = [get_emb(*o) for o in [\n",
+ " (n_users, n_factors), (n_movies, n_factors)]]\n",
+ " self.lin1 = nn.Linear(n_factors*2, nh)\n",
+ " self.lin2 = nn.Linear(nh, 1)\n",
+ " self.drop1 = nn.Dropout(p1)\n",
+ " self.drop2 = nn.Dropout(p2)\n",
+ " \n",
+ " def forward(self, cats, conts):\n",
+ " users,movies = cats[:,0],cats[:,1]\n",
+ " x = self.drop1(torch.cat([self.u(users),self.m(movies)], dim=1))\n",
+ " x = self.drop2(F.relu(self.lin1(x)))\n",
+ " return F.sigmoid(self.lin2(x)) * (max_rating-min_rating+1) + min_rating-0.5"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "LBPXIZQzaoOh",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "wd=1e-5\n",
+ "model = EmbeddingNet(n_users, n_movies).cuda()\n",
+ "opt = optim.Adam(model.parameters(), 1e-3, weight_decay=wd)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "EUMt7SIHaoOj",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 143
+ },
+ "outputId": "262fd887-0553-4135-8d13-498238cc69f0"
+ },
+ "cell_type": "code",
+ "source": [
+ "fit(model, data, 3, opt, F.mse_loss)"
+ ],
+ "execution_count": 55,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "3b612b266e224395b81f95d49dd57136",
+ "version_minor": 0,
+ "version_major": 2
+ },
+ "text/plain": [
+ "HBox(children=(IntProgress(value=0, description='Epoch', max=3), HTML(value='')))"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ },
+ {
+ "output_type": "stream",
+ "text": [
+ "epoch trn_loss val_loss \n",
+ " 0 0.921004 0.807385 \n",
+ " 1 0.840737 0.790992 \n",
+ " 2 0.791038 0.785069 \n",
+ "\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "[array([0.78507])]"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 55
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "gnBKWwhSaoOm",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "set_lrs(opt, 1e-3)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "VBj2sIaDaoOo",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 143
+ },
+ "outputId": "2060fab1-668e-4830-9db8-f4796642adc7"
+ },
+ "cell_type": "code",
+ "source": [
+ "fit(model, data, 3, opt, F.mse_loss)"
+ ],
+ "execution_count": 57,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "44594446a04747f19c4c84199278ad2a",
+ "version_minor": 0,
+ "version_major": 2
+ },
+ "text/plain": [
+ "HBox(children=(IntProgress(value=0, description='Epoch', max=3), HTML(value='')))"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ },
+ {
+ "output_type": "stream",
+ "text": [
+ "epoch trn_loss val_loss \n",
+ " 0 0.788819 0.791403 \n",
+ " 1 0.801915 0.790946 \n",
+ " 2 0.759726 0.79143 \n",
+ "\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "[array([0.79143])]"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 57
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "BUsLBXU-aoO7",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ ""
+ ],
+ "execution_count": 0,
+ "outputs": []
+ }
+ ]
+}
\ No newline at end of file
diff --git a/dl1/lesson6-rnn.ipynb b/dl1/lesson6-rnn.ipynb
index ae8605a..76c92a5 100644
--- a/dl1/lesson6-rnn.ipynb
+++ b/dl1/lesson6-rnn.ipynb
@@ -1 +1 @@
-{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"lesson6-rnn.ipynb","version":"0.3.2","views":{},"default_view":{},"provenance":[],"collapsed_sections":["uUDe60OCrHZS","n7gYrKbkrHaY","a44UGgCprHbj","DvL5CpVTrHb7","K9wBiQD7rHcf","lZjlv7-prHdj","uw5ypci7rHfC","F-hDuB55rHff","4k4xdEklrHfx","sDc2lWUMrHgF","x-IQB_carHgO","lm48Z4FzrHgU","yilVO5OirHge","KX1Y-gNlrHgm","PRDKmPOzrHg4","nmrT3Yd0rHhE"]},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"}},"cells":[{"metadata":{"id":"Qyv3uQYmrSpJ","colab_type":"text"},"cell_type":"markdown","source":["**Initialization**\n","\n","The next few steps(or code snippets) initialize the colab environment for running the fast.ai course. Each line of code that added are in place to avoid any error, please do not change the position of any snippet if you do not know what they do.\n","Be sure to change your runtime to GPU.\n","\n","Note:- You will get an error saying that the code is closing in the memory limit of 12GB. You can click 'terminate other runtimes'.\n"," This error is popping up because the dataset is taking up most of the space, so don't worry"]},{"metadata":{"id":"lT_mmpADrUSn","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["!apt-get install -y -qq software-properties-common python-software-properties module-init-tools\n","!add-apt-repository -y ppa:alessandro-strada/ppa 2>&1 > /dev/null\n","!apt-get update -qq 2>&1 > /dev/null\n","!apt-get -y install -qq google-drive-ocamlfuse fuse\n","from google.colab import auth\n","auth.authenticate_user()\n","from oauth2client.client import GoogleCredentials\n","creds = GoogleCredentials.get_application_default()\n","import getpass\n","!google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} < /dev/null 2>&1 | grep URL\n","vcode = getpass.getpass()\n","!echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret}"],"execution_count":0,"outputs":[]},{"metadata":{"id":"4npuan8DrUBt","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["!pip install -q fastai"],"execution_count":0,"outputs":[]},{"metadata":{"id":"hXc0hQLLrTxA","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["# http://pytorch.org/\n","# pre installation\n","from os import path\n","from wheel.pep425tags import get_abbr_impl, get_impl_ver, get_abi_tag\n","platform = '{}{}-{}'.format(get_abbr_impl(), get_impl_ver(), get_abi_tag())\n","\n","accelerator = 'cu80' if path.exists('/opt/bin/nvidia-smi') else 'cpu'\n","\n","!pip install -q http://download.pytorch.org/whl/{accelerator}/torch-0.3.0.post4-{platform}-linux_x86_64.whl torchvision\n","import torch"],"execution_count":0,"outputs":[]},{"metadata":{"id":"N_Rd8j03rHXr","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["# %reload_ext autoreload\n","# %autoreload 2\n","%matplotlib inline\n","\n","from fastai.io import *\n","from fastai.conv_learner import *\n","\n","from fastai.column_data import *"],"execution_count":0,"outputs":[]},{"metadata":{"id":"84AL7CcArHX3","colab_type":"text"},"cell_type":"markdown","source":["## Setup"]},{"metadata":{"id":"fNRMbB6nrHX5","colab_type":"text"},"cell_type":"markdown","source":["We're going to download the collected works of Nietzsche to use as our data for this class."]},{"metadata":{"id":"EtxhUj6trHX8","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["PATH='data/nietzsche/'"],"execution_count":0,"outputs":[]},{"metadata":{"id":"IwpXVQBmrHYD","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"f5857d81-7316-4197-ce50-c4bcf3815252"},"cell_type":"code","source":["get_data(\"https://s3.amazonaws.com/text-datasets/nietzsche.txt\", f'{PATH}nietzsche.txt')\n","text = open(f'{PATH}nietzsche.txt').read()\n","print('corpus length:', len(text))"],"execution_count":0,"outputs":[{"output_type":"stream","text":["corpus length: 600893\n"],"name":"stdout"}]},{"metadata":{"id":"lMMgsdWZrHYP","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"ad5688d0-9f51-4e8d-a23d-ca41b38ede3e"},"cell_type":"code","source":["text[:400]"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'PREFACE\\n\\n\\nSUPPOSING that Truth is a woman--what then? Is there not ground\\nfor suspecting that all philosophers, in so far as they have been\\ndogmatists, have failed to understand women--that the terrible\\nseriousness and clumsy importunity with which they have usually paid\\ntheir addresses to Truth, have been unskilled and unseemly methods for\\nwinning a woman? Certainly she has never allowed herself '"]},"metadata":{"tags":[]},"execution_count":4}]},{"metadata":{"id":"D8ITLyEPrHYW","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"363909ea-4d90-48d5-a805-2ff25c4cf789"},"cell_type":"code","source":["chars = sorted(list(set(text)))\n","vocab_size = len(chars)+1\n","print('total chars:', vocab_size)"],"execution_count":0,"outputs":[{"output_type":"stream","text":["total chars: 85\n"],"name":"stdout"}]},{"metadata":{"id":"c0XIa3OCrHYf","colab_type":"text"},"cell_type":"markdown","source":["Sometimes it's useful to have a zero value in the dataset, e.g. for padding"]},{"metadata":{"id":"Z10eS2Q_rHYh","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"90254c65-c3cd-4701-a0dc-20790f62426b"},"cell_type":"code","source":["chars.insert(0, \"\\0\")\n","\n","''.join(chars[1:-6])"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'\\n !\"\\'(),-.0123456789:;=?ABCDEFGHIJKLMNOPQRSTUVWXYZ[]_abcdefghijklmnopqrstuvwxy'"]},"metadata":{"tags":[]},"execution_count":6}]},{"metadata":{"id":"tLg7uFsGrHYq","colab_type":"text"},"cell_type":"markdown","source":["Map from chars to indices and back again"]},{"metadata":{"id":"OYsZ7RlkrHYt","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["char_indices = {c: i for i, c in enumerate(chars)}\n","indices_char = {i: c for i, c in enumerate(chars)}"],"execution_count":0,"outputs":[]},{"metadata":{"id":"_tDjftALrHY5","colab_type":"text"},"cell_type":"markdown","source":["*idx* will be the data we use from now own - it simply converts all the characters to their index (based on the mapping above)"]},{"metadata":{"id":"PxEuK1DfrHY-","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"a56f8966-82a4-4e7d-f805-2ebfe23e6dad"},"cell_type":"code","source":["idx = [char_indices[c] for c in text]\n","\n","idx[:10]"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[40, 42, 29, 30, 25, 27, 29, 1, 1, 1]"]},"metadata":{"tags":[]},"execution_count":8}]},{"metadata":{"id":"1IN540VPrHZF","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"515fb31a-7d51-41bb-93e5-0cb10989c1e0"},"cell_type":"code","source":["''.join(indices_char[i] for i in idx[:70])"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'PREFACE\\n\\n\\nSUPPOSING that Truth is a woman--what then? Is there not gro'"]},"metadata":{"tags":[]},"execution_count":9}]},{"metadata":{"id":"FgZyrhM2rHZO","colab_type":"text"},"cell_type":"markdown","source":["## Three char model"]},{"metadata":{"id":"uUDe60OCrHZS","colab_type":"text"},"cell_type":"markdown","source":["### Create inputs"]},{"metadata":{"id":"MGwnzOp9rHZU","colab_type":"text"},"cell_type":"markdown","source":["Create a list of every 4th character, starting at the 0th, 1st, 2nd, then 3rd characters"]},{"metadata":{"id":"1GG92r2yrHZV","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["cs=3\n","c1_dat = [idx[i] for i in range(0, len(idx)-cs, cs)]\n","c2_dat = [idx[i+1] for i in range(0, len(idx)-cs, cs)]\n","c3_dat = [idx[i+2] for i in range(0, len(idx)-cs, cs)]\n","c4_dat = [idx[i+3] for i in range(0, len(idx)-cs, cs)]"],"execution_count":0,"outputs":[]},{"metadata":{"id":"1s9NdctirHZe","colab_type":"text"},"cell_type":"markdown","source":["Our inputs"]},{"metadata":{"id":"v7eFDi6lrHZi","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["x1 = np.stack(c1_dat)\n","x2 = np.stack(c2_dat)\n","x3 = np.stack(c3_dat)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"WFMLjKVJrHZm","colab_type":"text"},"cell_type":"markdown","source":["Our output"]},{"metadata":{"id":"r6jodbCCrHZn","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["y = np.stack(c4_dat)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"0z0uE3zsrHZr","colab_type":"text"},"cell_type":"markdown","source":["The first 4 inputs and outputs"]},{"metadata":{"id":"kTR9XD1FrHZt","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"4aee1fa8-86c3-473a-d862-f75b5fb9eb66"},"cell_type":"code","source":["x1[:4], x2[:4], x3[:4]"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(array([40, 30, 29, 1]), array([42, 25, 1, 43]), array([29, 27, 1, 45]))"]},"metadata":{"tags":[]},"execution_count":14}]},{"metadata":{"id":"M935n_26rHZ6","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"f5d6f518-ecdb-400e-f906-62f146c817cb"},"cell_type":"code","source":["y[:4]"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([30, 29, 1, 40])"]},"metadata":{"tags":[]},"execution_count":15}]},{"metadata":{"id":"pGaMekjDrHaO","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"8831c67e-4342-48d6-d27e-122727c6664c"},"cell_type":"code","source":["x1.shape, y.shape"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["((200295,), (200295,))"]},"metadata":{"tags":[]},"execution_count":16}]},{"metadata":{"id":"n7gYrKbkrHaY","colab_type":"text"},"cell_type":"markdown","source":["### Create and train model"]},{"metadata":{"id":"hTZnMtKQrHaZ","colab_type":"text"},"cell_type":"markdown","source":["Pick a size for our hidden state"]},{"metadata":{"id":"UaDA31AArHae","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["n_hidden = 256"],"execution_count":0,"outputs":[]},{"metadata":{"id":"mUlhDT2MrHaq","colab_type":"text"},"cell_type":"markdown","source":["The number of latent factors to create (i.e. the size of the embedding matrix)"]},{"metadata":{"id":"4-X8kl62rHat","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["n_fac = 42"],"execution_count":0,"outputs":[]},{"metadata":{"id":"Gv73jMfTrHa5","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["class Char3Model(nn.Module):\n"," def __init__(self, vocab_size, n_fac):\n"," super().__init__()\n"," self.e = nn.Embedding(vocab_size, n_fac)\n","\n"," # The 'green arrow' from our diagram - the layer operation from input to hidden\n"," self.l_in = nn.Linear(n_fac, n_hidden)\n","\n"," # The 'orange arrow' from our diagram - the layer operation from hidden to hidden\n"," self.l_hidden = nn.Linear(n_hidden, n_hidden)\n"," \n"," # The 'blue arrow' from our diagram - the layer operation from hidden to output\n"," self.l_out = nn.Linear(n_hidden, vocab_size)\n"," \n"," def forward(self, c1, c2, c3):\n"," in1 = F.relu(self.l_in(self.e(c1)))\n"," in2 = F.relu(self.l_in(self.e(c2)))\n"," in3 = F.relu(self.l_in(self.e(c3)))\n"," \n"," h = V(torch.zeros(in1.size()).cuda())\n"," h = F.tanh(self.l_hidden(h+in1))\n"," h = F.tanh(self.l_hidden(h+in2))\n"," h = F.tanh(self.l_hidden(h+in3))\n"," \n"," return F.log_softmax(self.l_out(h))"],"execution_count":0,"outputs":[]},{"metadata":{"id":"QOptI2_trHa9","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["md = ColumnarModelData.from_arrays('.', [-1], np.stack([x1,x2,x3], axis=1), y, bs=512)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"_vrwpZtrrHbA","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["m = Char3Model(vocab_size, n_fac).cuda()"],"execution_count":0,"outputs":[]},{"metadata":{"id":"AD31pYyFrHbI","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["it = iter(md.trn_dl)\n","*xs,yt = next(it)\n","t = m(*V(xs))"],"execution_count":0,"outputs":[]},{"metadata":{"id":"TozLJDkyrHbP","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["opt = optim.Adam(m.parameters(), 1e-2)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"G9n9J58OrHbS","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{},{}]},"outputId":"b66f4920-a07a-40e0-b07e-51fa8633ff52"},"cell_type":"code","source":["fit(m, md, 1, opt, F.nll_loss)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"73483a3ac1804c3e81c8de6744d5c4bd","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 2.09627 6.52849] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"hC3O0p8xrHbb","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["set_lrs(opt, 0.001)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"aG7iiDW_rHbd","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{},{}]},"outputId":"f1fa1a92-d42e-4851-df57-1bb2448166b8"},"cell_type":"code","source":["fit(m, md, 1, opt, F.nll_loss)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"d7278ec0864e451795d91bac0ff944c7","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 1.84525 6.52312] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"a44UGgCprHbj","colab_type":"text"},"cell_type":"markdown","source":["### Test model"]},{"metadata":{"id":"2iJQrQNlrHbk","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["def get_next(inp):\n"," idxs = T(np.array([char_indices[c] for c in inp]))\n"," p = m(*VV(idxs))\n"," i = np.argmax(to_np(p))\n"," return chars[i]"],"execution_count":0,"outputs":[]},{"metadata":{"id":"QTARPKlerHbm","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"da25b8aa-e0a3-447e-a911-90b1da2cd78d"},"cell_type":"code","source":["get_next('y. ')"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'T'"]},"metadata":{"tags":[]},"execution_count":196}]},{"metadata":{"id":"Lp99f53irHbq","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"5a3ba9b4-1430-499a-e734-cdeffd0b3d0d"},"cell_type":"code","source":["get_next('ppl')"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'e'"]},"metadata":{"tags":[]},"execution_count":197}]},{"metadata":{"id":"8kt98YeKrHbu","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"06675a1b-2ce8-4dc4-dd9f-4cd2ce076279"},"cell_type":"code","source":["get_next(' th')"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'e'"]},"metadata":{"tags":[]},"execution_count":198}]},{"metadata":{"id":"Ue8KJDgqrHby","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"bb4dcab0-d7bd-469f-b251-da1b966438c4"},"cell_type":"code","source":["get_next('and')"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["' '"]},"metadata":{"tags":[]},"execution_count":199}]},{"metadata":{"id":"DlXKFo48rHb6","colab_type":"text"},"cell_type":"markdown","source":["## Our first RNN!"]},{"metadata":{"id":"DvL5CpVTrHb7","colab_type":"text"},"cell_type":"markdown","source":["### Create inputs"]},{"metadata":{"id":"iKYe1arVrHb-","colab_type":"text"},"cell_type":"markdown","source":["This is the size of our unrolled RNN."]},{"metadata":{"id":"omSpoGWBrHb_","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["cs=8"],"execution_count":0,"outputs":[]},{"metadata":{"id":"dCv0AYNjrHcF","colab_type":"text"},"cell_type":"markdown","source":["For each of 0 through 7, create a list of every 8th character with that starting point. These will be the 8 inputs to out model."]},{"metadata":{"id":"yGKkgscBrHcG","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["c_in_dat = [[idx[i+j] for i in range(cs)] for j in range(len(idx)-cs)]"],"execution_count":0,"outputs":[]},{"metadata":{"id":"1nan6ZJDrHcJ","colab_type":"text"},"cell_type":"markdown","source":["Then create a list of the next character in each of these series. This will be the labels for our model."]},{"metadata":{"id":"LvjNcYbtrHcK","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["c_out_dat = [idx[j+cs] for j in range(len(idx)-cs)]"],"execution_count":0,"outputs":[]},{"metadata":{"id":"jX5S9ju2rHcN","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["xs = np.stack(c_in_dat, axis=0)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"13XrzURprHcR","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"7955514c-7300-4571-ebf8-cf5e17b0112c"},"cell_type":"code","source":["xs.shape"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(600884, 8)"]},"metadata":{"tags":[]},"execution_count":67}]},{"metadata":{"id":"lpkjymJnrHcW","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["y = np.stack(c_out_dat)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"Afq00IiErHcX","colab_type":"text"},"cell_type":"markdown","source":["So each column below is one series of 8 characters from the text."]},{"metadata":{"id":"EPzlulYdrHcZ","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"fe16cb03-c465-440f-d5f3-46ea7ef9f9b6"},"cell_type":"code","source":["xs[:cs,:cs]"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([[40, 42, 29, 30, 25, 27, 29, 1],\n"," [42, 29, 30, 25, 27, 29, 1, 1],\n"," [29, 30, 25, 27, 29, 1, 1, 1],\n"," [30, 25, 27, 29, 1, 1, 1, 43],\n"," [25, 27, 29, 1, 1, 1, 43, 45],\n"," [27, 29, 1, 1, 1, 43, 45, 40],\n"," [29, 1, 1, 1, 43, 45, 40, 40],\n"," [ 1, 1, 1, 43, 45, 40, 40, 39]])"]},"metadata":{"tags":[]},"execution_count":69}]},{"metadata":{"id":"fYHWBMVrrHcc","colab_type":"text"},"cell_type":"markdown","source":["...and this is the next character after each sequence."]},{"metadata":{"id":"mVKiy2VDrHcc","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"445656de-ae9b-4159-b130-d2a380e3f819"},"cell_type":"code","source":["y[:cs]"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([ 1, 1, 43, 45, 40, 40, 39, 43])"]},"metadata":{"tags":[]},"execution_count":70}]},{"metadata":{"id":"K9wBiQD7rHcf","colab_type":"text"},"cell_type":"markdown","source":["### Create and train model"]},{"metadata":{"id":"t7Im1mUdrHcg","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["val_idx = get_cv_idxs(len(idx)-cs-1)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"TywBATc8rHci","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["md = ColumnarModelData.from_arrays('.', val_idx, xs, y, bs=512)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"NmAQMq1ZrHcv","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["class CharLoopModel(nn.Module):\n"," # This is an RNN!\n"," def __init__(self, vocab_size, n_fac):\n"," super().__init__()\n"," self.e = nn.Embedding(vocab_size, n_fac)\n"," self.l_in = nn.Linear(n_fac, n_hidden)\n"," self.l_hidden = nn.Linear(n_hidden, n_hidden)\n"," self.l_out = nn.Linear(n_hidden, vocab_size)\n"," \n"," def forward(self, *cs):\n"," bs = cs[0].size(0)\n"," h = V(torch.zeros(bs, n_hidden).cuda())\n"," for c in cs:\n"," inp = F.relu(self.l_in(self.e(c)))\n"," h = F.tanh(self.l_hidden(h+inp))\n"," \n"," return F.log_softmax(self.l_out(h), dim=-1)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"7TaUAbZurHcy","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["m = CharLoopModel(vocab_size, n_fac).cuda()\n","opt = optim.Adam(m.parameters(), 1e-2)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"JEUj77DUrHc5","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{},{}]},"outputId":"f623d340-c972-4e17-9e34-4bbf5ec017f3"},"cell_type":"code","source":["fit(m, md, 1, opt, F.nll_loss)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"6d1c8fb012c74fe191921d467c80b5ea","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 2.02986 1.99268] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"jmWaaU0XrHdB","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["set_lrs(opt, 0.001)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"0RA339BsrHdD","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{},{}]},"outputId":"fa0afc6f-e4cc-4933-f14a-ca26a0759cdc"},"cell_type":"code","source":["fit(m, md, 1, opt, F.nll_loss)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"6e4a151c0f274c129e346a22fd4bdece","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 1.73588 1.75103] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"z_XS2mr1rHdG","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["class CharLoopConcatModel(nn.Module):\n"," def __init__(self, vocab_size, n_fac):\n"," super().__init__()\n"," self.e = nn.Embedding(vocab_size, n_fac)\n"," self.l_in = nn.Linear(n_fac+n_hidden, n_hidden)\n"," self.l_hidden = nn.Linear(n_hidden, n_hidden)\n"," self.l_out = nn.Linear(n_hidden, vocab_size)\n"," \n"," def forward(self, *cs):\n"," bs = cs[0].size(0)\n"," h = V(torch.zeros(bs, n_hidden).cuda())\n"," for c in cs:\n"," inp = torch.cat((h, self.e(c)), 1)\n"," inp = F.relu(self.l_in(inp))\n"," h = F.tanh(self.l_hidden(inp))\n"," \n"," return F.log_softmax(self.l_out(h), dim=-1)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"wXd116SXrHdJ","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["m = CharLoopConcatModel(vocab_size, n_fac).cuda()\n","opt = optim.Adam(m.parameters(), 1e-3)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"F2dQNIcvrHdQ","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["it = iter(md.trn_dl)\n","*xs,yt = next(it)\n","t = m(*V(xs))"],"execution_count":0,"outputs":[]},{"metadata":{"id":"52kvZ0wtrHdS","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{},{}]},"outputId":"fe01fd0e-a5d4-4641-a871-8a98ec623aab"},"cell_type":"code","source":["fit(m, md, 1, opt, F.nll_loss)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"d1b3572e787441d8b2e5d80317245596","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 1.81654 1.78501] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"lB8U-QU1rHdc","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["set_lrs(opt, 1e-4)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"3smBETuMrHdf","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{},{}]},"outputId":"1b1a14fe-cfe3-42be-c611-45eae107359a"},"cell_type":"code","source":["fit(m, md, 1, opt, F.nll_loss)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"9aa67fbb4a2f42509dbe7753bc86d9a1","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 1.69008 1.69936] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"lZjlv7-prHdj","colab_type":"text"},"cell_type":"markdown","source":["### Test model"]},{"metadata":{"id":"XBPL4yk_rHdm","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["def get_next(inp):\n"," idxs = T(np.array([char_indices[c] for c in inp]))\n"," p = m(*VV(idxs))\n"," i = np.argmax(to_np(p))\n"," return chars[i]"],"execution_count":0,"outputs":[]},{"metadata":{"id":"et7ILF0vrHdo","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"8fbe5055-2ad6-4491-ec35-afb9b84becbf"},"cell_type":"code","source":["get_next('for thos')"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'e'"]},"metadata":{"tags":[]},"execution_count":99}]},{"metadata":{"id":"LEbds7tZrHdr","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"60cd29d2-5e54-4d7a-dd2e-2a6fe54b8761"},"cell_type":"code","source":["get_next('part of ')"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'t'"]},"metadata":{"tags":[]},"execution_count":100}]},{"metadata":{"id":"jFH8jNvHrHdu","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"67f72475-c634-4cf1-9e7e-c819e03c0cdb"},"cell_type":"code","source":["get_next('queens a')"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'n'"]},"metadata":{"tags":[]},"execution_count":101}]},{"metadata":{"id":"8OFNwMcarHd4","colab_type":"text"},"cell_type":"markdown","source":["## RNN with pytorch"]},{"metadata":{"id":"Ot7ts2YsrHd4","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["class CharRnn(nn.Module):\n"," def __init__(self, vocab_size, n_fac):\n"," super().__init__()\n"," self.e = nn.Embedding(vocab_size, n_fac)\n"," self.rnn = nn.RNN(n_fac, n_hidden)\n"," self.l_out = nn.Linear(n_hidden, vocab_size)\n"," \n"," def forward(self, *cs):\n"," bs = cs[0].size(0)\n"," h = V(torch.zeros(1, bs, n_hidden))\n"," inp = self.e(torch.stack(cs))\n"," outp,h = self.rnn(inp, h)\n"," \n"," return F.log_softmax(self.l_out(outp[-1]), dim=-1)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"bXk4_v-trHd7","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["m = CharRnn(vocab_size, n_fac).cuda()\n","opt = optim.Adam(m.parameters(), 1e-3)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"ALjak5tvrHd9","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["it = iter(md.trn_dl)\n","*xs,yt = next(it)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"lZbccs4crHd-","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"c639b95f-4200-4d2f-8df2-044c4a5fb1be"},"cell_type":"code","source":["t = m.e(V(torch.stack(xs)))\n","t.size()"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["torch.Size([8, 512, 42])"]},"metadata":{"tags":[]},"execution_count":111}]},{"metadata":{"id":"NWSdAWHdrHeD","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"c9337c1a-68d3-42fa-bfa2-964eced5d4c8"},"cell_type":"code","source":["ht = V(torch.zeros(1, 512,n_hidden))\n","outp, hn = m.rnn(t, ht)\n","outp.size(), hn.size()"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(torch.Size([8, 512, 256]), torch.Size([1, 512, 256]))"]},"metadata":{"tags":[]},"execution_count":112}]},{"metadata":{"id":"Uko6AqjBrHeW","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"879b89c1-9fdc-4672-8591-b751b80c0952"},"cell_type":"code","source":["t = m(*V(xs)); t.size()"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["torch.Size([512, 85])"]},"metadata":{"tags":[]},"execution_count":113}]},{"metadata":{"id":"hfFAFuryrHea","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{},{}]},"outputId":"2697fa39-b9fa-4c9a-9774-43c47e35194e"},"cell_type":"code","source":["fit(m, md, 4, opt, F.nll_loss)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"497078d15ec348149442681039df2e50","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 1.86065 1.84255] \n","[ 1. 1.68014 1.67387] \n","[ 2. 1.58828 1.59169] \n","[ 3. 1.52989 1.54942] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"oDQTYjoprHen","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["set_lrs(opt, 1e-4)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"lPe2V3NlrHe9","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{},{}]},"outputId":"66e6a527-276c-4e7c-fd20-59392115d670"},"cell_type":"code","source":["fit(m, md, 2, opt, F.nll_loss)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"65a2f7bedaa34de2a40296a07387c1c9","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 1.46841 1.50966] \n","[ 1. 1.46482 1.5039 ] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"uw5ypci7rHfC","colab_type":"text"},"cell_type":"markdown","source":["### Test model"]},{"metadata":{"id":"6YmH5W87rHfC","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["def get_next(inp):\n"," idxs = T(np.array([char_indices[c] for c in inp]))\n"," p = m(*VV(idxs))\n"," i = np.argmax(to_np(p))\n"," return chars[i]"],"execution_count":0,"outputs":[]},{"metadata":{"id":"feQevSOqrHfF","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"883fe9cb-1e8b-45c1-b55c-4803c791d54b"},"cell_type":"code","source":["get_next('for thos')"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'e'"]},"metadata":{"tags":[]},"execution_count":118}]},{"metadata":{"id":"9-bpBPVgrHfL","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["def get_next_n(inp, n):\n"," res = inp\n"," for i in range(n):\n"," c = get_next(inp)\n"," res += c\n"," inp = inp[1:]+c\n"," return res"],"execution_count":0,"outputs":[]},{"metadata":{"id":"bSvf1sa5rHfb","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"6eb46f51-5bdd-4a81-8628-bba5c664a28e"},"cell_type":"code","source":["get_next_n('for thos', 40)"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'for those the same the same the same the same th'"]},"metadata":{"tags":[]},"execution_count":120}]},{"metadata":{"id":"DaWHdP7PrHfe","colab_type":"text"},"cell_type":"markdown","source":["## Multi-output model"]},{"metadata":{"id":"F-hDuB55rHff","colab_type":"text"},"cell_type":"markdown","source":["### Setup"]},{"metadata":{"id":"HirfejrMrHfg","colab_type":"text"},"cell_type":"markdown","source":["Let's take non-overlapping sets of characters this time"]},{"metadata":{"id":"To5MSt9prHfh","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["c_in_dat = [[idx[i+j] for i in range(cs)] for j in range(0, len(idx)-cs-1, cs)]"],"execution_count":0,"outputs":[]},{"metadata":{"id":"BCGqoOQLrHfk","colab_type":"text"},"cell_type":"markdown","source":["Then create the exact same thing, offset by 1, as our labels"]},{"metadata":{"id":"0D4mIHbrrHfk","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["c_out_dat = [[idx[i+j] for i in range(cs)] for j in range(1, len(idx)-cs, cs)]"],"execution_count":0,"outputs":[]},{"metadata":{"id":"uEtWPRycrHfn","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"4b53d86c-4a08-43b0-baa0-ce473d0ab766"},"cell_type":"code","source":["xs = np.stack(c_in_dat)\n","xs.shape"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(75111, 8)"]},"metadata":{"tags":[]},"execution_count":21}]},{"metadata":{"id":"ojVw9pX6rHfq","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"47e328e3-1fcc-477f-a952-330d6bb62c52"},"cell_type":"code","source":["ys = np.stack(c_out_dat)\n","ys.shape"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(75111, 8)"]},"metadata":{"tags":[]},"execution_count":22}]},{"metadata":{"id":"hiK3R9AbrHft","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"694d87e4-a298-4b53-9783-0e907b908f16"},"cell_type":"code","source":["xs[:cs,:cs]"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([[40, 42, 29, 30, 25, 27, 29, 1],\n"," [ 1, 1, 43, 45, 40, 40, 39, 43],\n"," [33, 38, 31, 2, 73, 61, 54, 73],\n"," [ 2, 44, 71, 74, 73, 61, 2, 62],\n"," [72, 2, 54, 2, 76, 68, 66, 54],\n"," [67, 9, 9, 76, 61, 54, 73, 2],\n"," [73, 61, 58, 67, 24, 2, 33, 72],\n"," [ 2, 73, 61, 58, 71, 58, 2, 67]])"]},"metadata":{"tags":[]},"execution_count":23}]},{"metadata":{"id":"raNK7H10rHfv","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"3fcd70b3-6d86-4974-9da8-2745db5350a7"},"cell_type":"code","source":["ys[:cs,:cs]"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([[42, 29, 30, 25, 27, 29, 1, 1],\n"," [ 1, 43, 45, 40, 40, 39, 43, 33],\n"," [38, 31, 2, 73, 61, 54, 73, 2],\n"," [44, 71, 74, 73, 61, 2, 62, 72],\n"," [ 2, 54, 2, 76, 68, 66, 54, 67],\n"," [ 9, 9, 76, 61, 54, 73, 2, 73],\n"," [61, 58, 67, 24, 2, 33, 72, 2],\n"," [73, 61, 58, 71, 58, 2, 67, 68]])"]},"metadata":{"tags":[]},"execution_count":24}]},{"metadata":{"id":"4k4xdEklrHfx","colab_type":"text"},"cell_type":"markdown","source":["### Create and train model"]},{"metadata":{"id":"OTugKHx5rHfy","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["val_idx = get_cv_idxs(len(xs)-cs-1)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"lL3JnQrTrHf0","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["md = ColumnarModelData.from_arrays('.', val_idx, xs, ys, bs=512)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"9_SWOwDjrHf2","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["class CharSeqRnn(nn.Module):\n"," def __init__(self, vocab_size, n_fac):\n"," super().__init__()\n"," self.e = nn.Embedding(vocab_size, n_fac)\n"," self.rnn = nn.RNN(n_fac, n_hidden)\n"," self.l_out = nn.Linear(n_hidden, vocab_size)\n"," \n"," def forward(self, *cs):\n"," bs = cs[0].size(0)\n"," h = V(torch.zeros(1, bs, n_hidden))\n"," inp = self.e(torch.stack(cs))\n"," outp,h = self.rnn(inp, h)\n"," return F.log_softmax(self.l_out(outp), dim=-1)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"CXd26sEtrHf3","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["m = CharSeqRnn(vocab_size, n_fac).cuda()\n","opt = optim.Adam(m.parameters(), 1e-3)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"dKd2LFzDrHf5","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["it = iter(md.trn_dl)\n","*xst,yt = next(it)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"gnZ2gkBTrHf_","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["def nll_loss_seq(inp, targ):\n"," sl,bs,nh = inp.size()\n"," targ = targ.transpose(0,1).contiguous().view(-1)\n"," return F.nll_loss(inp.view(-1,nh), targ)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"yQC-axd8rHgA","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{},{}]},"outputId":"24349bae-4b1a-4ee6-8984-94261e734c90"},"cell_type":"code","source":["fit(m, md, 4, opt, nll_loss_seq)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"725ca331d28b482e9c7a4f83f741498e","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 2.59241 2.40251] \n","[ 1. 2.28474 2.19859] \n","[ 2. 2.13883 2.08836] \n","[ 3. 2.04892 2.01564] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"M5NqK3FurHgC","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["set_lrs(opt, 1e-4)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"RMfX2GDJrHgE","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{},{}]},"outputId":"a3afc915-2a94-47b9-e813-97421c0ebfdf"},"cell_type":"code","source":["fit(m, md, 1, opt, nll_loss_seq)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"adb9aa22524d4bfd8b001d2efd10dbc3","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 1.99819 2.00106] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"sDc2lWUMrHgF","colab_type":"text"},"cell_type":"markdown","source":["### Identity init!"]},{"metadata":{"id":"2Umq1cwwrHgG","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["m = CharSeqRnn(vocab_size, n_fac).cuda()\n","opt = optim.Adam(m.parameters(), 1e-2)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"gLN05QPnrHgH","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"1c90e914-5904-4e33-c8f6-d68a312618a8"},"cell_type":"code","source":["m.rnn.weight_hh_l0.data.copy_(torch.eye(n_hidden))"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["\n"," 1 0 0 ... 0 0 0\n"," 0 1 0 ... 0 0 0\n"," 0 0 1 ... 0 0 0\n"," ... ⋱ ... \n"," 0 0 0 ... 1 0 0\n"," 0 0 0 ... 0 1 0\n"," 0 0 0 ... 0 0 1\n","[torch.cuda.FloatTensor of size 256x256 (GPU 0)]"]},"metadata":{"tags":[]},"execution_count":141}]},{"metadata":{"id":"wnMmTXB9rHgI","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{},{}]},"outputId":"74e5fae1-b802-4df8-bf8f-87438d09d326"},"cell_type":"code","source":["fit(m, md, 4, opt, nll_loss_seq)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"8e141251f24d4083a6e8b2fa15dea724","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 2.39428 2.21111] \n","[ 1. 2.10381 2.03275] \n","[ 2. 1.99451 1.96393] \n","[ 3. 1.93492 1.91763] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"XNDiUNOnrHgL","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["set_lrs(opt, 1e-3)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"kzEhBnw6rHgM","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{},{}]},"outputId":"5b4c6b18-b2a5-4b00-f554-fc22d56b8041"},"cell_type":"code","source":["fit(m, md, 4, opt, nll_loss_seq)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"ddf833e8b7ec4a3aa29dd271911f76ec","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 1.84035 1.85742] \n","[ 1. 1.82896 1.84887] \n","[ 2. 1.81879 1.84281] \n","[ 3. 1.81337 1.83801] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"wbrCUdXmrHgN","colab_type":"text"},"cell_type":"markdown","source":["## Stateful model"]},{"metadata":{"id":"x-IQB_carHgO","colab_type":"text"},"cell_type":"markdown","source":["### Setup"]},{"metadata":{"id":"Puwc5gPHrHgO","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"823f9ac4-f98e-4b76-80ff-8d1f3632c80f"},"cell_type":"code","source":["from torchtext import vocab, data\n","\n","from fastai.nlp import *\n","from fastai.lm_rnn import *\n","\n","PATH='data/nietzsche/'\n","\n","TRN_PATH = 'trn/'\n","VAL_PATH = 'val/'\n","TRN = f'{PATH}{TRN_PATH}'\n","VAL = f'{PATH}{VAL_PATH}'\n","\n","%ls {PATH}"],"execution_count":0,"outputs":[{"output_type":"stream","text":["\u001b[0m\u001b[01;34mmodels\u001b[0m/ nietzsche.txt \u001b[01;34mtrn\u001b[0m/ \u001b[01;34mval\u001b[0m/\r\n"],"name":"stdout"}]},{"metadata":{"id":"Axu5td5yrHgR","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"e58533cc-6f3d-4893-b8e5-9b07e73accc7"},"cell_type":"code","source":["%ls {PATH}trn"],"execution_count":0,"outputs":[{"output_type":"stream","text":["trn.txt\r\n"],"name":"stdout"}]},{"metadata":{"id":"Uxukjp5HrHgS","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"eb1db6c1-a225-435e-f7bc-eacdc953c3a2"},"cell_type":"code","source":["TEXT = data.Field(lower=True, tokenize=list)\n","bs=64; bptt=8; n_fac=42; n_hidden=256\n","\n","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=3)\n","\n","len(md.trn_dl), md.nt, len(md.trn_ds), len(md.trn_ds[0].text)"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(963, 56, 1, 493747)"]},"metadata":{"tags":[]},"execution_count":18}]},{"metadata":{"id":"lm48Z4FzrHgU","colab_type":"text"},"cell_type":"markdown","source":["### RNN"]},{"metadata":{"id":"RDS3n5gBrHgV","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["class CharSeqStatefulRnn(nn.Module):\n"," def __init__(self, vocab_size, n_fac, bs):\n"," self.vocab_size = vocab_size\n"," super().__init__()\n"," self.e = nn.Embedding(vocab_size, n_fac)\n"," self.rnn = nn.RNN(n_fac, n_hidden)\n"," self.l_out = nn.Linear(n_hidden, vocab_size)\n"," self.init_hidden(bs)\n"," \n"," def forward(self, cs):\n"," bs = cs[0].size(0)\n"," if self.h.size(1) != bs: self.init_hidden(bs)\n"," outp,h = self.rnn(self.e(cs), self.h)\n"," self.h = repackage_var(h)\n"," return F.log_softmax(self.l_out(outp), dim=-1).view(-1, self.vocab_size)\n"," \n"," def init_hidden(self, bs): self.h = V(torch.zeros(1, bs, n_hidden))"],"execution_count":0,"outputs":[]},{"metadata":{"id":"__WdxjBerHgW","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["m = CharSeqStatefulRnn(md.nt, n_fac, 512).cuda()\n","opt = optim.Adam(m.parameters(), 1e-3)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"yBthYeDvrHgY","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{},{}]},"outputId":"950cc9ab-eca1-432f-f47a-70896b46377a"},"cell_type":"code","source":["fit(m, md, 4, opt, F.nll_loss)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"2a9e0a39ef174c72bac575be7e20579c","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 1.81983 1.81247] \n","[ 1. 1.63097 1.66228] \n","[ 2. 1.54433 1.57824] \n","[ 3. 1.48563 1.54505] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"KrXXKeIarHga","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{},{}]},"outputId":"3055843c-9b0d-40a5-b909-326f2384e804"},"cell_type":"code","source":["set_lrs(opt, 1e-4)\n","\n","fit(m, md, 4, opt, F.nll_loss)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"8b15bf8bcc7445e694dbcb3beb658b74","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 1.4187 1.50374] \n","[ 1. 1.41492 1.49391] \n","[ 2. 1.41001 1.49339] \n","[ 3. 1.40756 1.486 ] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"yilVO5OirHge","colab_type":"text"},"cell_type":"markdown","source":["### RNN loop"]},{"metadata":{"id":"MOpw_VSerHge","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["# From the pytorch source\n","\n","def RNNCell(input, hidden, w_ih, w_hh, b_ih, b_hh):\n"," return F.tanh(F.linear(input, w_ih, b_ih) + F.linear(hidden, w_hh, b_hh))"],"execution_count":0,"outputs":[]},{"metadata":{"id":"XW9RHpRhrHgf","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["class CharSeqStatefulRnn2(nn.Module):\n"," def __init__(self, vocab_size, n_fac, bs):\n"," super().__init__()\n"," self.vocab_size = vocab_size\n"," self.e = nn.Embedding(vocab_size, n_fac)\n"," self.rnn = nn.RNNCell(n_fac, n_hidden)\n"," self.l_out = nn.Linear(n_hidden, vocab_size)\n"," self.init_hidden(bs)\n"," \n"," def forward(self, cs):\n"," bs = cs[0].size(0)\n"," if self.h.size(1) != bs: self.init_hidden(bs)\n"," outp = []\n"," o = self.h\n"," for c in cs: \n"," o = self.rnn(self.e(c), o)\n"," outp.append(o)\n"," outp = self.l_out(torch.stack(outp))\n"," self.h = repackage_var(o)\n"," return F.log_softmax(outp, dim=-1).view(-1, self.vocab_size)\n"," \n"," def init_hidden(self, bs): self.h = V(torch.zeros(1, bs, n_hidden))"],"execution_count":0,"outputs":[]},{"metadata":{"id":"yAkfKT5IrHgh","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}}},"cell_type":"code","source":["m = CharSeqStatefulRnn2(md.nt, n_fac, 512).cuda()\n","opt = optim.Adam(m.parameters(), 1e-3)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"bZSGiPTHrHgk","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{},{}]},"outputId":"947d2e5f-39bc-4cd9-e0b7-479152a87573"},"cell_type":"code","source":["fit(m, md, 4, opt, F.nll_loss)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"8c46f24bfa194e1ba9d73e22283ca6af","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 1.81013 1.7969 ] \n","[ 1. 1.62515 1.65346] \n","[ 2. 1.53913 1.58065] \n","[ 3. 1.48698 1.54217] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"KX1Y-gNlrHgm","colab_type":"text"},"cell_type":"markdown","source":["### GRU"]},{"metadata":{"id":"kwXSRVMnrHgn","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["class CharSeqStatefulGRU(nn.Module):\n"," def __init__(self, vocab_size, n_fac, bs):\n"," super().__init__()\n"," self.vocab_size = vocab_size\n"," self.e = nn.Embedding(vocab_size, n_fac)\n"," self.rnn = nn.GRU(n_fac, n_hidden)\n"," self.l_out = nn.Linear(n_hidden, vocab_size)\n"," self.init_hidden(bs)\n"," \n"," def forward(self, cs):\n"," bs = cs[0].size(0)\n"," if self.h.size(1) != bs: self.init_hidden(bs)\n"," outp,h = self.rnn(self.e(cs), self.h)\n"," self.h = repackage_var(h)\n"," return F.log_softmax(self.l_out(outp), dim=-1).view(-1, self.vocab_size)\n"," \n"," def init_hidden(self, bs): self.h = V(torch.zeros(1, bs, n_hidden))"],"execution_count":0,"outputs":[]},{"metadata":{"id":"Q3SfHI44rHgo","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["# From the pytorch source code - for reference\n","\n","def GRUCell(input, hidden, w_ih, w_hh, b_ih, b_hh):\n"," gi = F.linear(input, w_ih, b_ih)\n"," gh = F.linear(hidden, w_hh, b_hh)\n"," i_r, i_i, i_n = gi.chunk(3, 1)\n"," h_r, h_i, h_n = gh.chunk(3, 1)\n","\n"," resetgate = F.sigmoid(i_r + h_r)\n"," inputgate = F.sigmoid(i_i + h_i)\n"," newgate = F.tanh(i_n + resetgate * h_n)\n"," return newgate + inputgate * (hidden - newgate)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"3vqFbjPPrHgp","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["m = CharSeqStatefulGRU(md.nt, n_fac, 512).cuda()\n","\n","opt = optim.Adam(m.parameters(), 1e-3)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"wpS-PkfgrHgr","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{},{}]},"outputId":"5d7d95dd-7b72-42a9-acb2-86756be8be72"},"cell_type":"code","source":["fit(m, md, 6, opt, F.nll_loss)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"e518384d71c345a8b145b35d4ee894fa","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 1.68409 1.67784] \n","[ 1. 1.49813 1.52661] \n","[ 2. 1.41674 1.46769] \n","[ 3. 1.36359 1.43818] \n","[ 4. 1.33223 1.41777] \n","[ 5. 1.30217 1.40511] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"M84ops6frHgz","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["set_lrs(opt, 1e-4)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"yOx3znAIrHg1","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{},{}]},"outputId":"a2b9b3ab-fad4-445e-b9ae-6b2b7c7c8f2e"},"cell_type":"code","source":["fit(m, md, 3, opt, F.nll_loss)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"be385370c27f4b788920caf48f90aeea","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 1.22708 1.36926] \n","[ 1. 1.21948 1.3696 ] \n","[ 2. 1.22541 1.36969] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"PRDKmPOzrHg4","colab_type":"text"},"cell_type":"markdown","source":["### Putting it all together: LSTM"]},{"metadata":{"id":"I5f-oXU_rHg5","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["from fastai import sgdr\n","\n","n_hidden=512"],"execution_count":0,"outputs":[]},{"metadata":{"id":"nwIHcjBHrHg6","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["class CharSeqStatefulLSTM(nn.Module):\n"," def __init__(self, vocab_size, n_fac, bs, nl):\n"," super().__init__()\n"," self.vocab_size,self.nl = vocab_size,nl\n"," self.e = nn.Embedding(vocab_size, n_fac)\n"," self.rnn = nn.LSTM(n_fac, n_hidden, nl, dropout=0.5)\n"," self.l_out = nn.Linear(n_hidden, vocab_size)\n"," self.init_hidden(bs)\n"," \n"," def forward(self, cs):\n"," bs = cs[0].size(0)\n"," if self.h[0].size(1) != bs: self.init_hidden(bs)\n"," outp,h = self.rnn(self.e(cs), self.h)\n"," self.h = repackage_var(h)\n"," return F.log_softmax(self.l_out(outp), dim=-1).view(-1, self.vocab_size)\n"," \n"," def init_hidden(self, bs):\n"," self.h = (V(torch.zeros(self.nl, bs, n_hidden)),\n"," V(torch.zeros(self.nl, bs, n_hidden)))"],"execution_count":0,"outputs":[]},{"metadata":{"id":"puKResEkrHg7","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["m = CharSeqStatefulLSTM(md.nt, n_fac, 512, 2).cuda()\n","lo = LayerOptimizer(optim.Adam, m, 1e-2, 1e-5)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"tr7C55-drHg8","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["os.makedirs(f'{PATH}models', exist_ok=True)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"PX3YrG0VrHg9","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{},{}]},"outputId":"e0e61dc1-2ead-4dba-dd10-357ae2834319"},"cell_type":"code","source":["fit(m, md, 2, lo.opt, F.nll_loss)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"6943ca600bbf4a49a0020b2467c2ddb8","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 1.72032 1.64016] \n","[ 1. 1.62891 1.58176] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"s1K4QQDIrHg-","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{},{}]},"outputId":"69191dfd-97a6-43c2-fdc1-a5bff9fb7760"},"cell_type":"code","source":["on_end = lambda sched, cycle: save_model(m, f'{PATH}models/cyc_{cycle}')\n","cb = [CosAnneal(lo, len(md.trn_dl), cycle_mult=2, on_cycle_end=on_end)]\n","fit(m, md, 2**4-1, lo.opt, F.nll_loss, callbacks=cb)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"765d0d78da6647d48276a638f70aeec9","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 1.47969 1.4472 ] \n","[ 1. 1.51411 1.46612] \n","[ 2. 1.412 1.39909] \n","[ 3. 1.53689 1.48337] \n","[ 4. 1.47375 1.43169] \n","[ 5. 1.39828 1.37963] \n","[ 6. 1.34546 1.35795] \n","[ 7. 1.51999 1.47165] \n","[ 8. 1.48992 1.46146] \n","[ 9. 1.45492 1.42829] \n","[ 10. 1.42027 1.39028] \n","[ 11. 1.3814 1.36539] \n","[ 12. 1.33895 1.34178] \n","[ 13. 1.30737 1.32871] \n","[ 14. 1.28244 1.31518] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"eB06g8VTrHhA","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{},{}]},"outputId":"1194c107-50a0-4f50-9db2-9aef327d2244"},"cell_type":"code","source":["on_end = lambda sched, cycle: save_model(m, f'{PATH}models/cyc_{cycle}')\n","cb = [CosAnneal(lo, len(md.trn_dl), cycle_mult=2, on_cycle_end=on_end)]\n","fit(m, md, 2**6-1, lo.opt, F.nll_loss, callbacks=cb)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"4394818ec37f4b419397628b7cc8b815","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 1.46053 1.43462] \n","[ 1. 1.51537 1.47747] \n","[ 2. 1.39208 1.38293] \n","[ 3. 1.53056 1.49371] \n","[ 4. 1.46812 1.43389] \n","[ 5. 1.37624 1.37523] \n","[ 6. 1.3173 1.34022] \n","[ 7. 1.51783 1.47554] \n","[ 8. 1.4921 1.45785] \n","[ 9. 1.44843 1.42215] \n","[ 10. 1.40948 1.40858] \n","[ 11. 1.37098 1.36648] \n","[ 12. 1.32255 1.33842] \n","[ 13. 1.28243 1.31106] \n","[ 14. 1.25031 1.2918 ] \n","[ 15. 1.49236 1.45316] \n","[ 16. 1.46041 1.43622] \n","[ 17. 1.45043 1.4498 ] \n","[ 18. 1.43331 1.41297] \n","[ 19. 1.43841 1.41704] \n","[ 20. 1.41536 1.40521] \n","[ 21. 1.39829 1.37656] \n","[ 22. 1.37001 1.36891] \n","[ 23. 1.35469 1.35909] \n","[ 24. 1.32202 1.34228] \n","[ 25. 1.29972 1.32256] \n","[ 26. 1.28007 1.30903] \n","[ 27. 1.24503 1.29125] \n","[ 28. 1.22261 1.28316] \n","[ 29. 1.20563 1.27397] \n","[ 30. 1.18764 1.27178] \n","[ 31. 1.18114 1.26694] \n","[ 32. 1.44344 1.42405] \n","[ 33. 1.43344 1.41616] \n","[ 34. 1.4346 1.40442] \n","[ 35. 1.42152 1.41359] \n","[ 36. 1.42072 1.40835] \n","[ 37. 1.41732 1.40498] \n","[ 38. 1.41268 1.395 ] \n","[ 39. 1.40725 1.39433] \n","[ 40. 1.40181 1.39864] \n","[ 41. 1.38621 1.37549] \n","[ 42. 1.3838 1.38587] \n","[ 43. 1.37644 1.37118] \n","[ 44. 1.36287 1.36211] \n","[ 45. 1.35942 1.36145] \n","[ 46. 1.34712 1.34924] \n","[ 47. 1.32994 1.34884] \n","[ 48. 1.32788 1.33387] \n","[ 49. 1.31553 1.342 ] \n","[ 50. 1.30088 1.32435] \n","[ 51. 1.28446 1.31166] \n","[ 52. 1.27058 1.30807] \n","[ 53. 1.26271 1.29935] \n","[ 54. 1.24351 1.28942] \n","[ 55. 1.23119 1.2838 ] \n","[ 56. 1.2086 1.28364] \n","[ 57. 1.19742 1.27375] \n","[ 58. 1.18127 1.26758] \n","[ 59. 1.17475 1.26858] \n","[ 60. 1.15349 1.25999] \n","[ 61. 1.14718 1.25779] \n","[ 62. 1.13174 1.2524 ] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"IMJsjmvTrHhB","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":[""],"execution_count":0,"outputs":[]},{"metadata":{"id":"nmrT3Yd0rHhE","colab_type":"text"},"cell_type":"markdown","source":["### Test"]},{"metadata":{"id":"1r9kmwVKrHhE","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["def get_next(inp):\n"," idxs = TEXT.numericalize(inp)\n"," p = m(VV(idxs.transpose(0,1)))\n"," r = torch.multinomial(p[-1].exp(), 1)\n"," return TEXT.vocab.itos[to_np(r)[0]]"],"execution_count":0,"outputs":[]},{"metadata":{"id":"im4-n7T0rHhG","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"ff3476a1-74e5-4ca5-fa00-eb964025b843"},"cell_type":"code","source":["get_next('for thos')"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'e'"]},"metadata":{"tags":[]},"execution_count":46}]},{"metadata":{"id":"XN5zhilSrHhW","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":["def get_next_n(inp, n):\n"," res = inp\n"," for i in range(n):\n"," c = get_next(inp)\n"," res += c\n"," inp = inp[1:]+c\n"," return res"],"execution_count":0,"outputs":[]},{"metadata":{"id":"62sLhMY4rHhY","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0},"output_extras":[{}]},"outputId":"71923cfa-188a-48e3-f64e-80db17e97ab0"},"cell_type":"code","source":["print(get_next_n('for thos', 400))"],"execution_count":0,"outputs":[{"output_type":"stream","text":["for those the skemps), or\n","imaginates, though they deceives. it should so each ourselvess and new\n","present, step absolutely for the\n","science.\" the contradity and\n","measuring, \n","the whole!\n","\n","293. perhaps, that every life a values of blood\n","of\n","intercourse when it senses there is unscrupulus, his very rights, and still impulse, love?\n","just after that thereby how made with the way anything, and set for harmless philos\n"],"name":"stdout"}]},{"metadata":{"id":"gpvOybMErHhc","colab_type":"code","colab":{"autoexec":{"startup":false,"wait_interval":0}},"collapsed":true},"cell_type":"code","source":[""],"execution_count":0,"outputs":[]}]}
\ No newline at end of file
+{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"lesson6-rnn.ipynb","version":"0.3.2","provenance":[],"collapsed_sections":["pi9rwGw8kU4W","I4OhcBUEkU58","ldHJPGhKkU8G"]},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"accelerator":"GPU"},"cells":[{"metadata":{"id":"PjOMeCoHHlzQ","colab_type":"text"},"cell_type":"markdown","source":["# Using Google Colab for Fast.ai\n","\n","Welcome! Here is my one-stop-shop for getting all the Fast.ai lessons to work on Google Colab. I'll be updating this as I work through new lessons. Let me know if you have suggestions or improvements at @corythesaurus (DM me on Twitter).\n","\n","My general workflow is to open each Fast.ai notebook and make a copy of it to save in my Drive, so I can add in my own cells as needed (and save them for later!). You can do that from within Colab: *File > Open Notebook... > click on \"Github\" tab > search for \"fastai\"*. All the notebooks should be there. Once you open a notebook, you can make a copy of it: *File > Save a copy in Drive...*. \n","\n","Finally, make sure you've enabled the GPU! *Edit > Notebook settings > set \"Hardware Accelerator\" to GPU.*"]},{"metadata":{"id":"77tchMjPHSkL","colab_type":"text"},"cell_type":"markdown","source":["### The contribution of @denis-trofimov:\n","* bump PyTorch version\n","* make utilities quiet, less verbose\n","* unite install commands in one inside some sections"]},{"metadata":{"id":"ArPdbxB-vl9Y","colab_type":"text"},"cell_type":"markdown","source":["## Installing dependencies ##\n","We need to manually install fastai and pytorch. And maybe other things that fastai depends on (see [here](https://github.com/fastai/fastai/blob/master/requirements.txt)).\n","\n","I will be referring to [this fastai forum thread](http://forums.fast.ai/t/colaboratory-and-fastai/10122/6) and [this blogpost](https://towardsdatascience.com/fast-ai-lesson-1-on-google-colab-free-gpu-d2af89f53604) if I get stuck. This is also a handy resource for using pytorch in colab: https://jovianlin.io/pytorch-with-gpu-in-google-colab/ (and his [example notebook](https://colab.research.google.com/drive/1jxUPzMsAkBboHMQtGyfv5M5c7hU8Ss2c#scrollTo=ed-8FUn2GqQ4)!). And this [post](https://medium.com/@chsafouane/getting-started-with-pytorch-on-google-colab-811c59a656b6)."]},{"metadata":{"id":"zfndtl8SImbL","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":53},"outputId":"5b75075b-b6c8-47e5-bc6c-36ffc1440363","executionInfo":{"status":"ok","timestamp":1536500500868,"user_tz":-180,"elapsed":122308,"user":{"displayName":"Denis Trofimov","photoUrl":"//lh4.googleusercontent.com/-5mI1PahJKgY/AAAAAAAAAAI/AAAAAAAApTs/jE-MakZklpc/s50-c-k-no/photo.jpg","userId":"118344610648363214086"}}},"cell_type":"code","source":["# Install PyTorch fastai\n","!pip3 install -q http://download.pytorch.org/whl/cu80/torch-0.3.1-cp36-cp36m-linux_x86_64.whl fastai torchvision"],"execution_count":5,"outputs":[{"output_type":"stream","text":["\u001b[31mtorchvision 0.2.1 has requirement pillow>=4.1.1, but you'll have pillow 4.0.0 which is incompatible.\u001b[0m\n","\u001b[31mplotnine 0.4.0 has requirement scipy>=1.0.0, but you'll have scipy 0.19.1 which is incompatible.\u001b[0m\n"],"name":"stdout"}]},{"metadata":{"id":"MgvJGuuJs_tL","colab_type":"text"},"cell_type":"markdown","source":["## GPU setup ##\n","Google is very generous and gives access to a GPU for CoLab users. Make sure it's enabled: Edit > Notebook settings > set \"Hardware accelerator\" to GPU.\n","\n","The following is just to assuage your fears that you're being rate-limited or otherwise; you don't need to add these cells to your notebooks to get them to run. Just make sure you've enabled the GPU in the notebook settings. This is easy to forget :)"]},{"metadata":{"id":"KoM3dhqdM8Fh","colab_type":"text"},"cell_type":"markdown","source":["### Special additions for particular lessons 4, 6"]},{"metadata":{"id":"vYKZXEMYM9ta","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":271},"outputId":"02319771-10e1-4928-9a7a-d630201d23d9","executionInfo":{"status":"ok","timestamp":1536500527405,"user_tz":-180,"elapsed":26372,"user":{"displayName":"Denis Trofimov","photoUrl":"//lh4.googleusercontent.com/-5mI1PahJKgY/AAAAAAAAAAI/AAAAAAAApTs/jE-MakZklpc/s50-c-k-no/photo.jpg","userId":"118344610648363214086"}}},"cell_type":"code","source":["!pip3 -q install spacy\n","!python -m spacy download en"],"execution_count":6,"outputs":[{"output_type":"stream","text":["Collecting en_core_web_sm==2.0.0 from https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-2.0.0/en_core_web_sm-2.0.0.tar.gz#egg=en_core_web_sm==2.0.0\n","\u001b[?25l Downloading https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-2.0.0/en_core_web_sm-2.0.0.tar.gz (37.4MB)\n","\u001b[K 100% |████████████████████████████████| 37.4MB 65.7MB/s \n","\u001b[?25hInstalling collected packages: en-core-web-sm\n"," Running setup.py install for en-core-web-sm ... \u001b[?25l-\b \b\\\b \bdone\n","\u001b[?25hSuccessfully installed en-core-web-sm-2.0.0\n","\n","\u001b[93m Linking successful\u001b[0m\n"," /usr/local/lib/python3.6/dist-packages/en_core_web_sm -->\n"," /usr/local/lib/python3.6/dist-packages/spacy/data/en\n","\n"," You can now load the model via spacy.load('en')\n","\n"],"name":"stdout"}]},{"metadata":{"id":"N_Rd8j03rHXr","colab_type":"code","colab":{}},"cell_type":"code","source":["# %reload_ext autoreload\n","# %autoreload 2\n","%matplotlib inline\n","\n","from fastai.io import *\n","from fastai.conv_learner import *\n","\n","from fastai.column_data import *"],"execution_count":0,"outputs":[]},{"metadata":{"id":"4qGWYvr4kUxJ","colab_type":"text"},"cell_type":"markdown","source":["## Setup"]},{"metadata":{"id":"g7_z6AOfkUxK","colab_type":"text"},"cell_type":"markdown","source":["We're going to download the collected works of Nietzsche to use as our data for this class."]},{"metadata":{"id":"RZm-5iHJkUxM","colab_type":"code","colab":{}},"cell_type":"code","source":["PATH='data/nietzsche/'\n","!mkdir -p PATH"],"execution_count":0,"outputs":[]},{"metadata":{"id":"WRf2nrzWkUxQ","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":35},"outputId":"552c75b4-5a77-41cd-c876-f21681e37234","executionInfo":{"status":"ok","timestamp":1536501087675,"user_tz":-180,"elapsed":1342,"user":{"displayName":"Denis Trofimov","photoUrl":"//lh4.googleusercontent.com/-5mI1PahJKgY/AAAAAAAAAAI/AAAAAAAApTs/jE-MakZklpc/s50-c-k-no/photo.jpg","userId":"118344610648363214086"}}},"cell_type":"code","source":["get_data(\"https://s3.amazonaws.com/text-datasets/nietzsche.txt\", f'{PATH}nietzsche.txt')\n","text = open(f'{PATH}nietzsche.txt').read()\n","print('corpus length:', len(text))"],"execution_count":17,"outputs":[{"output_type":"stream","text":["corpus length: 600893\n"],"name":"stdout"}]},{"metadata":{"id":"brCX4tutkUxa","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":55},"outputId":"20afd8f4-f162-4f15-87d6-6526ca2f8329","executionInfo":{"status":"ok","timestamp":1536319397014,"user_tz":-180,"elapsed":1492,"user":{"displayName":"Denis Trofimov","photoUrl":"//lh4.googleusercontent.com/-5mI1PahJKgY/AAAAAAAAAAI/AAAAAAAApTs/jE-MakZklpc/s50-c-k-no/photo.jpg","userId":"118344610648363214086"}}},"cell_type":"code","source":["text[:400]"],"execution_count":11,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'PREFACE\\n\\n\\nSUPPOSING that Truth is a woman--what then? Is there not ground\\nfor suspecting that all philosophers, in so far as they have been\\ndogmatists, have failed to understand women--that the terrible\\nseriousness and clumsy importunity with which they have usually paid\\ntheir addresses to Truth, have been unskilled and unseemly methods for\\nwinning a woman? Certainly she has never allowed herself '"]},"metadata":{"tags":[]},"execution_count":11}]},{"metadata":{"id":"MNBuyUVgkUxl","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":35},"outputId":"3e229bb0-1b26-4d77-b048-22ded74e99ca","executionInfo":{"status":"ok","timestamp":1536319398307,"user_tz":-180,"elapsed":1080,"user":{"displayName":"Denis Trofimov","photoUrl":"//lh4.googleusercontent.com/-5mI1PahJKgY/AAAAAAAAAAI/AAAAAAAApTs/jE-MakZklpc/s50-c-k-no/photo.jpg","userId":"118344610648363214086"}}},"cell_type":"code","source":["chars = sorted(list(set(text)))\n","vocab_size = len(chars)+1\n","print('total chars:', vocab_size)"],"execution_count":12,"outputs":[{"output_type":"stream","text":["total chars: 85\n"],"name":"stdout"}]},{"metadata":{"id":"YN006PSCkUxr","colab_type":"text"},"cell_type":"markdown","source":["Sometimes it's useful to have a zero value in the dataset, e.g. for padding"]},{"metadata":{"id":"BIAj2hB4kUxs","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":35},"outputId":"1ff11067-605c-4193-ee3d-a1e091645996","executionInfo":{"status":"ok","timestamp":1536319399986,"user_tz":-180,"elapsed":1449,"user":{"displayName":"Denis Trofimov","photoUrl":"//lh4.googleusercontent.com/-5mI1PahJKgY/AAAAAAAAAAI/AAAAAAAApTs/jE-MakZklpc/s50-c-k-no/photo.jpg","userId":"118344610648363214086"}}},"cell_type":"code","source":["chars.insert(0, \"\\0\")\n","\n","''.join(chars[1:-6])"],"execution_count":13,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'\\n !\"\\'(),-.0123456789:;=?ABCDEFGHIJKLMNOPQRSTUVWXYZ[]_abcdefghijklmnopqrstuvwxy'"]},"metadata":{"tags":[]},"execution_count":13}]},{"metadata":{"id":"CrG4nk0QkUx0","colab_type":"text"},"cell_type":"markdown","source":["Map from chars to indices and back again"]},{"metadata":{"id":"EUjWUrTWkUx1","colab_type":"code","colab":{}},"cell_type":"code","source":["char_indices = {c: i for i, c in enumerate(chars)}\n","indices_char = {i: c for i, c in enumerate(chars)}"],"execution_count":0,"outputs":[]},{"metadata":{"id":"fJHKnhBKkUx7","colab_type":"text"},"cell_type":"markdown","source":["*idx* will be the data we use from now on - it simply converts all the characters to their index (based on the mapping above)"]},{"metadata":{"id":"dxaHxF9bkUx8","colab_type":"code","colab":{},"outputId":"0c5ba1e4-65d2-478f-b1c3-b1092f36d6a1"},"cell_type":"code","source":["idx = [char_indices[c] for c in text]\n","\n","idx[:10]"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[40, 42, 29, 30, 25, 27, 29, 1, 1, 1]"]},"metadata":{"tags":[]},"execution_count":8}]},{"metadata":{"id":"hOziYlNakUyC","colab_type":"code","colab":{},"outputId":"1bc2e78e-5830-452e-cbae-43470124253e"},"cell_type":"code","source":["''.join(indices_char[i] for i in idx[:70])"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'PREFACE\\n\\n\\nSUPPOSING that Truth is a woman--what then? Is there not gro'"]},"metadata":{"tags":[]},"execution_count":9}]},{"metadata":{"id":"CdMHXSpckUyJ","colab_type":"text"},"cell_type":"markdown","source":["## Three char model"]},{"metadata":{"id":"g0QofUrrkUyL","colab_type":"text"},"cell_type":"markdown","source":["### Create inputs"]},{"metadata":{"id":"LWwOTT8kkUyM","colab_type":"text"},"cell_type":"markdown","source":["Create a list of every 4th character, starting at the 0th, 1st, 2nd, then 3rd characters"]},{"metadata":{"id":"haiat8wMkUyO","colab_type":"code","colab":{}},"cell_type":"code","source":["cs=3\n","c1_dat = [idx[i] for i in range(0, len(idx)-cs, cs)]\n","c2_dat = [idx[i+1] for i in range(0, len(idx)-cs, cs)]\n","c3_dat = [idx[i+2] for i in range(0, len(idx)-cs, cs)]\n","c4_dat = [idx[i+3] for i in range(0, len(idx)-cs, cs)]"],"execution_count":0,"outputs":[]},{"metadata":{"id":"B3R_FTjkkUyV","colab_type":"text"},"cell_type":"markdown","source":["Our inputs"]},{"metadata":{"id":"FHTMWyAJkUyW","colab_type":"code","colab":{}},"cell_type":"code","source":["x1 = np.stack(c1_dat)\n","x2 = np.stack(c2_dat)\n","x3 = np.stack(c3_dat)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"OZK_j474kUyb","colab_type":"text"},"cell_type":"markdown","source":["Our output"]},{"metadata":{"id":"a7WD2SwEkUyd","colab_type":"code","colab":{}},"cell_type":"code","source":["y = np.stack(c4_dat)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"5K2cLvRekUyk","colab_type":"text"},"cell_type":"markdown","source":["The first 4 inputs and outputs"]},{"metadata":{"id":"CuVsCWArkUym","colab_type":"code","colab":{},"outputId":"8f5227f2-2c43-404b-ca72-e4955831751e"},"cell_type":"code","source":["x1[:4], x2[:4], x3[:4]"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(array([40, 30, 29, 1]), array([42, 25, 1, 43]), array([29, 27, 1, 45]))"]},"metadata":{"tags":[]},"execution_count":14}]},{"metadata":{"id":"W73mkDrqkUy1","colab_type":"code","colab":{},"outputId":"fa31dbb4-f31a-48a1-ddf0-2ff68c02cc62"},"cell_type":"code","source":["y[:4]"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([30, 29, 1, 40])"]},"metadata":{"tags":[]},"execution_count":15}]},{"metadata":{"id":"S_mrWpYkkUzH","colab_type":"code","colab":{},"outputId":"7d3f9e4e-79ac-4c04-c973-3b4297a739cc"},"cell_type":"code","source":["x1.shape, y.shape"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["((200295,), (200295,))"]},"metadata":{"tags":[]},"execution_count":16}]},{"metadata":{"id":"1bkKV5wtkUzP","colab_type":"text"},"cell_type":"markdown","source":["### Create and train model"]},{"metadata":{"id":"jzJSjMTDkUzQ","colab_type":"text"},"cell_type":"markdown","source":["Pick a size for our hidden state"]},{"metadata":{"id":"vojiW74DkUzW","colab_type":"code","colab":{}},"cell_type":"code","source":["n_hidden = 256"],"execution_count":0,"outputs":[]},{"metadata":{"id":"NH9wOkoxkUzb","colab_type":"text"},"cell_type":"markdown","source":["The number of latent factors to create (i.e. the size of the embedding matrix)"]},{"metadata":{"id":"ovg2W6z1kUzd","colab_type":"code","colab":{}},"cell_type":"code","source":["n_fac = 42"],"execution_count":0,"outputs":[]},{"metadata":{"id":"Y2GJLkLRkUzj","colab_type":"code","colab":{}},"cell_type":"code","source":["class Char3Model(nn.Module):\n"," def __init__(self, vocab_size, n_fac):\n"," super().__init__()\n"," self.e = nn.Embedding(vocab_size, n_fac)\n","\n"," # The 'green arrow' from our diagram - the layer operation from input to hidden\n"," self.l_in = nn.Linear(n_fac, n_hidden)\n","\n"," # The 'orange arrow' from our diagram - the layer operation from hidden to hidden\n"," self.l_hidden = nn.Linear(n_hidden, n_hidden)\n"," \n"," # The 'blue arrow' from our diagram - the layer operation from hidden to output\n"," self.l_out = nn.Linear(n_hidden, vocab_size)\n"," \n"," def forward(self, c1, c2, c3):\n"," in1 = F.relu(self.l_in(self.e(c1)))\n"," in2 = F.relu(self.l_in(self.e(c2)))\n"," in3 = F.relu(self.l_in(self.e(c3)))\n"," \n"," h = V(torch.zeros(in1.size()).cuda())\n"," h = F.tanh(self.l_hidden(h+in1))\n"," h = F.tanh(self.l_hidden(h+in2))\n"," h = F.tanh(self.l_hidden(h+in3))\n"," \n"," return F.log_softmax(self.l_out(h))"],"execution_count":0,"outputs":[]},{"metadata":{"id":"ot5FR1s3kUzo","colab_type":"code","colab":{}},"cell_type":"code","source":["md = ColumnarModelData.from_arrays('.', [-1], np.stack([x1,x2,x3], axis=1), y, bs=512)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"P7EkziCukUzt","colab_type":"code","colab":{}},"cell_type":"code","source":["m = Char3Model(vocab_size, n_fac).cuda()"],"execution_count":0,"outputs":[]},{"metadata":{"id":"M3JcQnxvkUz2","colab_type":"code","colab":{}},"cell_type":"code","source":["it = iter(md.trn_dl)\n","*xs,yt = next(it)\n","t = m(*V(xs))"],"execution_count":0,"outputs":[]},{"metadata":{"id":"S3WBWSqRkUz-","colab_type":"code","colab":{}},"cell_type":"code","source":["opt = optim.Adam(m.parameters(), 1e-2)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"_r2fRJogkU0E","colab_type":"code","colab":{},"outputId":"c4519789-6266-4e9e-a14f-1b1547d090f0"},"cell_type":"code","source":["fit(m, md, 1, opt, F.nll_loss)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"73483a3ac1804c3e81c8de6744d5c4bd","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 2.09627 6.52849] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"cKZcr4t6kU0N","colab_type":"code","colab":{}},"cell_type":"code","source":["set_lrs(opt, 0.001)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"NrzCMgyzkU0W","colab_type":"code","colab":{},"outputId":"6bf41250-6849-465e-823a-82a58cbf02c6"},"cell_type":"code","source":["fit(m, md, 1, opt, F.nll_loss)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"d7278ec0864e451795d91bac0ff944c7","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 1.84525 6.52312] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"C4LKmp-mkU0e","colab_type":"text"},"cell_type":"markdown","source":["### Test model"]},{"metadata":{"id":"xwF7EAILkU0h","colab_type":"code","colab":{}},"cell_type":"code","source":["def get_next(inp):\n"," idxs = T(np.array([char_indices[c] for c in inp]))\n"," p = m(*VV(idxs))\n"," i = np.argmax(to_np(p))\n"," return chars[i]"],"execution_count":0,"outputs":[]},{"metadata":{"id":"MfmfbT4OkU0q","colab_type":"code","colab":{},"outputId":"4fb64b2c-1d5b-49b9-a229-8fcc822c397e"},"cell_type":"code","source":["get_next('y. ')"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'T'"]},"metadata":{"tags":[]},"execution_count":196}]},{"metadata":{"id":"wp6o6AwakU01","colab_type":"code","colab":{},"outputId":"e442a5ad-2934-448d-e6af-25d5de319e23"},"cell_type":"code","source":["get_next('ppl')"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'e'"]},"metadata":{"tags":[]},"execution_count":197}]},{"metadata":{"id":"V7aYuM8kkU0_","colab_type":"code","colab":{},"outputId":"f35e34bf-6e34-4acc-e149-86144e00aab4"},"cell_type":"code","source":["get_next(' th')"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'e'"]},"metadata":{"tags":[]},"execution_count":198}]},{"metadata":{"id":"GfnQcQ19kU1I","colab_type":"code","colab":{},"outputId":"18a94bf9-740b-4899-9df4-9e73dd5a0293"},"cell_type":"code","source":["get_next('and')"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["' '"]},"metadata":{"tags":[]},"execution_count":199}]},{"metadata":{"id":"Vc5afejSkU1Y","colab_type":"text"},"cell_type":"markdown","source":["## Our first RNN!"]},{"metadata":{"id":"0K28TJrlkU1Z","colab_type":"text"},"cell_type":"markdown","source":["### Create inputs"]},{"metadata":{"id":"IaluWbfLkU1b","colab_type":"text"},"cell_type":"markdown","source":["This is the size of our unrolled RNN."]},{"metadata":{"id":"miVjxupskU1d","colab_type":"code","colab":{}},"cell_type":"code","source":["cs=8"],"execution_count":0,"outputs":[]},{"metadata":{"id":"90ImZgqskU1h","colab_type":"text"},"cell_type":"markdown","source":["For each of 0 through 7, create a list of every 8th character with that starting point. These will be the 8 inputs to our model."]},{"metadata":{"id":"uZ9kdmdOkU1k","colab_type":"code","colab":{}},"cell_type":"code","source":["c_in_dat = [[idx[i+j] for i in range(cs)] for j in range(len(idx)-cs)]"],"execution_count":0,"outputs":[]},{"metadata":{"id":"iKMwgYtwkU1p","colab_type":"text"},"cell_type":"markdown","source":["Then create a list of the next character in each of these series. This will be the labels for our model."]},{"metadata":{"id":"ywxLO9qfkU1t","colab_type":"code","colab":{}},"cell_type":"code","source":["c_out_dat = [idx[j+cs] for j in range(len(idx)-cs)]"],"execution_count":0,"outputs":[]},{"metadata":{"id":"BsZBn6sfkU13","colab_type":"code","colab":{}},"cell_type":"code","source":["xs = np.stack(c_in_dat, axis=0)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"vOKJkTMEkU2B","colab_type":"code","colab":{},"outputId":"fbfd6fb5-fa3a-4533-cce6-f1ab132a6bd5"},"cell_type":"code","source":["xs.shape"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(600884, 8)"]},"metadata":{"tags":[]},"execution_count":67}]},{"metadata":{"id":"Q9PG8lUSkU2H","colab_type":"code","colab":{}},"cell_type":"code","source":["y = np.stack(c_out_dat)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"19ZgZNzAkU2L","colab_type":"text"},"cell_type":"markdown","source":["So each column below is one series of 8 characters from the text."]},{"metadata":{"id":"vabnO_Q9kU2O","colab_type":"code","colab":{},"outputId":"1ee22b16-87ab-49d6-ce77-3a730a6e172c"},"cell_type":"code","source":["xs[:cs,:cs]"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([[40, 42, 29, 30, 25, 27, 29, 1],\n"," [42, 29, 30, 25, 27, 29, 1, 1],\n"," [29, 30, 25, 27, 29, 1, 1, 1],\n"," [30, 25, 27, 29, 1, 1, 1, 43],\n"," [25, 27, 29, 1, 1, 1, 43, 45],\n"," [27, 29, 1, 1, 1, 43, 45, 40],\n"," [29, 1, 1, 1, 43, 45, 40, 40],\n"," [ 1, 1, 1, 43, 45, 40, 40, 39]])"]},"metadata":{"tags":[]},"execution_count":69}]},{"metadata":{"id":"mlFY04lmkU2U","colab_type":"text"},"cell_type":"markdown","source":["...and this is the next character after each sequence."]},{"metadata":{"id":"FnSGeH5XkU2Z","colab_type":"code","colab":{},"outputId":"a8caf4b1-7046-4976-fc4d-c039de2be109"},"cell_type":"code","source":["y[:cs]"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([ 1, 1, 43, 45, 40, 40, 39, 43])"]},"metadata":{"tags":[]},"execution_count":70}]},{"metadata":{"id":"bD75UcNKkU2h","colab_type":"text"},"cell_type":"markdown","source":["### Create and train model"]},{"metadata":{"id":"7udNtfKpkU2i","colab_type":"code","colab":{}},"cell_type":"code","source":["val_idx = get_cv_idxs(len(idx)-cs-1)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"jw5buy9nkU2n","colab_type":"code","colab":{}},"cell_type":"code","source":["md = ColumnarModelData.from_arrays('.', val_idx, xs, y, bs=512)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"10RM_dTMkU2x","colab_type":"code","colab":{}},"cell_type":"code","source":["class CharLoopModel(nn.Module):\n"," # This is an RNN!\n"," def __init__(self, vocab_size, n_fac):\n"," super().__init__()\n"," self.e = nn.Embedding(vocab_size, n_fac)\n"," self.l_in = nn.Linear(n_fac, n_hidden)\n"," self.l_hidden = nn.Linear(n_hidden, n_hidden)\n"," self.l_out = nn.Linear(n_hidden, vocab_size)\n"," \n"," def forward(self, *cs):\n"," bs = cs[0].size(0)\n"," h = V(torch.zeros(bs, n_hidden).cuda())\n"," for c in cs:\n"," inp = F.relu(self.l_in(self.e(c)))\n"," h = F.tanh(self.l_hidden(h+inp))\n"," \n"," return F.log_softmax(self.l_out(h), dim=-1)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"9Wb7fmkXkU21","colab_type":"code","colab":{}},"cell_type":"code","source":["m = CharLoopModel(vocab_size, n_fac).cuda()\n","opt = optim.Adam(m.parameters(), 1e-2)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"uRl3wSCgkU3C","colab_type":"code","colab":{},"outputId":"339c7ff3-aaf7-49ca-9703-3e735f65a767"},"cell_type":"code","source":["fit(m, md, 1, opt, F.nll_loss)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"6d1c8fb012c74fe191921d467c80b5ea","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 2.02986 1.99268] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"-cXtqmlfkU3H","colab_type":"code","colab":{}},"cell_type":"code","source":["set_lrs(opt, 0.001)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"tOkpMIbjkU3W","colab_type":"code","colab":{},"outputId":"fb530a1f-977b-499d-acfb-9b5d823a2cdb"},"cell_type":"code","source":["fit(m, md, 1, opt, F.nll_loss)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"6e4a151c0f274c129e346a22fd4bdece","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 1.73588 1.75103] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"5Ts0V08LkU3d","colab_type":"code","colab":{}},"cell_type":"code","source":["class CharLoopConcatModel(nn.Module):\n"," def __init__(self, vocab_size, n_fac):\n"," super().__init__()\n"," self.e = nn.Embedding(vocab_size, n_fac)\n"," self.l_in = nn.Linear(n_fac+n_hidden, n_hidden)\n"," self.l_hidden = nn.Linear(n_hidden, n_hidden)\n"," self.l_out = nn.Linear(n_hidden, vocab_size)\n"," \n"," def forward(self, *cs):\n"," bs = cs[0].size(0)\n"," h = V(torch.zeros(bs, n_hidden).cuda())\n"," for c in cs:\n"," inp = torch.cat((h, self.e(c)), 1)\n"," inp = F.relu(self.l_in(inp))\n"," h = F.tanh(self.l_hidden(inp))\n"," \n"," return F.log_softmax(self.l_out(h), dim=-1)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"J4uwE5UkkU3q","colab_type":"code","colab":{}},"cell_type":"code","source":["m = CharLoopConcatModel(vocab_size, n_fac).cuda()\n","opt = optim.Adam(m.parameters(), 1e-3)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"UgvitPBUkU31","colab_type":"code","colab":{}},"cell_type":"code","source":["it = iter(md.trn_dl)\n","*xs,yt = next(it)\n","t = m(*V(xs))"],"execution_count":0,"outputs":[]},{"metadata":{"id":"LkAFi1_kkU4E","colab_type":"code","colab":{},"outputId":"f34de0e1-a9ae-47fd-9666-e0b898ae7848"},"cell_type":"code","source":["fit(m, md, 1, opt, F.nll_loss)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"d1b3572e787441d8b2e5d80317245596","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 1.81654 1.78501] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"weyzKnrCkU4J","colab_type":"code","colab":{}},"cell_type":"code","source":["set_lrs(opt, 1e-4)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"2oYT5WZykU4O","colab_type":"code","colab":{},"outputId":"2423ae66-bc17-40c8-babc-98d79550a0c2"},"cell_type":"code","source":["fit(m, md, 1, opt, F.nll_loss)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"9aa67fbb4a2f42509dbe7753bc86d9a1","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 1.69008 1.69936] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"pi9rwGw8kU4W","colab_type":"text"},"cell_type":"markdown","source":["### Test model"]},{"metadata":{"id":"KOVnVzEVkU4b","colab_type":"code","colab":{},"collapsed":true},"cell_type":"code","source":["def get_next(inp):\n"," idxs = T(np.array([char_indices[c] for c in inp]))\n"," p = m(*VV(idxs))\n"," i = np.argmax(to_np(p))\n"," return chars[i]"],"execution_count":0,"outputs":[]},{"metadata":{"id":"CazOFGlskU4r","colab_type":"code","colab":{},"outputId":"07d886b1-ff8f-4efe-bb3b-7d2493b32d80"},"cell_type":"code","source":["get_next('for thos')"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'e'"]},"metadata":{"tags":[]},"execution_count":99}]},{"metadata":{"id":"otnZ1MNJkU4x","colab_type":"code","colab":{},"outputId":"5c72ac71-d350-4008-977b-a540249681a7"},"cell_type":"code","source":["get_next('part of ')"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'t'"]},"metadata":{"tags":[]},"execution_count":100}]},{"metadata":{"id":"EzZzC_LckU49","colab_type":"code","colab":{},"outputId":"3ed96eef-338b-4091-8f6c-d93e229c1414"},"cell_type":"code","source":["get_next('queens a')"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'n'"]},"metadata":{"tags":[]},"execution_count":101}]},{"metadata":{"id":"38xKULbekU5C","colab_type":"text"},"cell_type":"markdown","source":["## RNN with pytorch"]},{"metadata":{"id":"TDy2bfuOkU5D","colab_type":"code","colab":{}},"cell_type":"code","source":["class CharRnn(nn.Module):\n"," def __init__(self, vocab_size, n_fac):\n"," super().__init__()\n"," self.e = nn.Embedding(vocab_size, n_fac)\n"," self.rnn = nn.RNN(n_fac, n_hidden)\n"," self.l_out = nn.Linear(n_hidden, vocab_size)\n"," \n"," def forward(self, *cs):\n"," bs = cs[0].size(0)\n"," h = V(torch.zeros(1, bs, n_hidden))\n"," inp = self.e(torch.stack(cs))\n"," outp,h = self.rnn(inp, h)\n"," \n"," return F.log_softmax(self.l_out(outp[-1]), dim=-1)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"RZVFu60_kU5I","colab_type":"code","colab":{}},"cell_type":"code","source":["m = CharRnn(vocab_size, n_fac).cuda()\n","opt = optim.Adam(m.parameters(), 1e-3)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"AhNTN6o9kU5L","colab_type":"code","colab":{}},"cell_type":"code","source":["it = iter(md.trn_dl)\n","*xs,yt = next(it)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"drYeJ4yCkU5S","colab_type":"code","colab":{},"outputId":"7b420a27-6415-4219-dac1-0246e8b046e1"},"cell_type":"code","source":["t = m.e(V(torch.stack(xs)))\n","t.size()"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["torch.Size([8, 512, 42])"]},"metadata":{"tags":[]},"execution_count":111}]},{"metadata":{"id":"g8fEe1nVkU5X","colab_type":"code","colab":{},"outputId":"8170ef6b-fa52-4e68-bdd5-6ec284369b39"},"cell_type":"code","source":["ht = V(torch.zeros(1, 512,n_hidden))\n","outp, hn = m.rnn(t, ht)\n","outp.size(), hn.size()"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(torch.Size([8, 512, 256]), torch.Size([1, 512, 256]))"]},"metadata":{"tags":[]},"execution_count":112}]},{"metadata":{"id":"XXPa_zAakU5k","colab_type":"code","colab":{},"outputId":"d918cb6e-4f4e-41e5-db00-01329c9b019e"},"cell_type":"code","source":["t = m(*V(xs)); t.size()"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["torch.Size([512, 85])"]},"metadata":{"tags":[]},"execution_count":113}]},{"metadata":{"id":"FvZ6hhYYkU5o","colab_type":"code","colab":{},"outputId":"9d3c2664-214b-4115-f1f4-8535a85c63fb"},"cell_type":"code","source":["fit(m, md, 4, opt, F.nll_loss)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"497078d15ec348149442681039df2e50","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 1.86065 1.84255] \n","[ 1. 1.68014 1.67387] \n","[ 2. 1.58828 1.59169] \n","[ 3. 1.52989 1.54942] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"cyeUnFkJkU5x","colab_type":"code","colab":{}},"cell_type":"code","source":["set_lrs(opt, 1e-4)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"iCheRANBkU5z","colab_type":"code","colab":{},"outputId":"6e4411cf-6896-483b-b088-c74715bc698e"},"cell_type":"code","source":["fit(m, md, 2, opt, F.nll_loss)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"65a2f7bedaa34de2a40296a07387c1c9","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 1.46841 1.50966] \n","[ 1. 1.46482 1.5039 ] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"I4OhcBUEkU58","colab_type":"text"},"cell_type":"markdown","source":["### Test model"]},{"metadata":{"id":"6vo8Z-sRkU58","colab_type":"code","colab":{}},"cell_type":"code","source":["def get_next(inp):\n"," idxs = T(np.array([char_indices[c] for c in inp]))\n"," p = m(*VV(idxs))\n"," i = np.argmax(to_np(p))\n"," return chars[i]"],"execution_count":0,"outputs":[]},{"metadata":{"id":"5fRC9IAakU5_","colab_type":"code","colab":{},"outputId":"513f690d-a382-406b-8761-cf9aa5143e87"},"cell_type":"code","source":["get_next('for thos')"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'e'"]},"metadata":{"tags":[]},"execution_count":118}]},{"metadata":{"id":"U2kDrb55kU6K","colab_type":"code","colab":{}},"cell_type":"code","source":["def get_next_n(inp, n):\n"," res = inp\n"," for i in range(n):\n"," c = get_next(inp)\n"," res += c\n"," inp = inp[1:]+c\n"," return res"],"execution_count":0,"outputs":[]},{"metadata":{"id":"e4WU-6-zkU6O","colab_type":"code","colab":{},"outputId":"54d786ea-7108-4d5b-c98d-0e002ff8b2ec"},"cell_type":"code","source":["get_next_n('for thos', 40)"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'for those the same the same the same the same th'"]},"metadata":{"tags":[]},"execution_count":120}]},{"metadata":{"id":"pGdQHBoMkU6W","colab_type":"text"},"cell_type":"markdown","source":["## Multi-output model"]},{"metadata":{"id":"Z7j2HJa2kU6X","colab_type":"text"},"cell_type":"markdown","source":["### Setup"]},{"metadata":{"id":"MSN44Ae0kU6Y","colab_type":"text"},"cell_type":"markdown","source":["Let's take non-overlapping sets of characters this time"]},{"metadata":{"id":"0cIztbm2kU6a","colab_type":"code","colab":{}},"cell_type":"code","source":["c_in_dat = [[idx[i+j] for i in range(cs)] for j in range(0, len(idx)-cs-1, cs)]"],"execution_count":0,"outputs":[]},{"metadata":{"id":"iqttY3_pkU6c","colab_type":"text"},"cell_type":"markdown","source":["Then create the exact same thing, offset by 1, as our labels"]},{"metadata":{"id":"x1_wa78hkU6d","colab_type":"code","colab":{}},"cell_type":"code","source":["c_out_dat = [[idx[i+j] for i in range(cs)] for j in range(1, len(idx)-cs, cs)]"],"execution_count":0,"outputs":[]},{"metadata":{"id":"xndWdMlOkU6u","colab_type":"code","colab":{},"outputId":"38aa3dfe-3ae9-4c58-af60-e84f077ad0f4"},"cell_type":"code","source":["xs = np.stack(c_in_dat)\n","xs.shape"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(75111, 8)"]},"metadata":{"tags":[]},"execution_count":21}]},{"metadata":{"id":"Vc7Lf0SxkU62","colab_type":"code","colab":{},"outputId":"98766bf2-a9f1-47a9-bed5-46d042ef7ca3"},"cell_type":"code","source":["ys = np.stack(c_out_dat)\n","ys.shape"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(75111, 8)"]},"metadata":{"tags":[]},"execution_count":22}]},{"metadata":{"id":"2QRLMN3SkU7E","colab_type":"code","colab":{},"outputId":"257a6b07-f2c0-4435-b064-7f97951b96d1"},"cell_type":"code","source":["xs[:cs,:cs]"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([[40, 42, 29, 30, 25, 27, 29, 1],\n"," [ 1, 1, 43, 45, 40, 40, 39, 43],\n"," [33, 38, 31, 2, 73, 61, 54, 73],\n"," [ 2, 44, 71, 74, 73, 61, 2, 62],\n"," [72, 2, 54, 2, 76, 68, 66, 54],\n"," [67, 9, 9, 76, 61, 54, 73, 2],\n"," [73, 61, 58, 67, 24, 2, 33, 72],\n"," [ 2, 73, 61, 58, 71, 58, 2, 67]])"]},"metadata":{"tags":[]},"execution_count":23}]},{"metadata":{"id":"lyTz_AYNkU7I","colab_type":"code","colab":{},"outputId":"cbdbc050-13e5-456a-ddbd-27502e5fa8bd"},"cell_type":"code","source":["ys[:cs,:cs]"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([[42, 29, 30, 25, 27, 29, 1, 1],\n"," [ 1, 43, 45, 40, 40, 39, 43, 33],\n"," [38, 31, 2, 73, 61, 54, 73, 2],\n"," [44, 71, 74, 73, 61, 2, 62, 72],\n"," [ 2, 54, 2, 76, 68, 66, 54, 67],\n"," [ 9, 9, 76, 61, 54, 73, 2, 73],\n"," [61, 58, 67, 24, 2, 33, 72, 2],\n"," [73, 61, 58, 71, 58, 2, 67, 68]])"]},"metadata":{"tags":[]},"execution_count":24}]},{"metadata":{"id":"Mb5_et0AkU7Y","colab_type":"text"},"cell_type":"markdown","source":["### Create and train model"]},{"metadata":{"id":"WVCWPsWhkU7Z","colab_type":"code","colab":{}},"cell_type":"code","source":["val_idx = get_cv_idxs(len(xs)-cs-1)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"a1CWqwDkkU7e","colab_type":"code","colab":{}},"cell_type":"code","source":["md = ColumnarModelData.from_arrays('.', val_idx, xs, ys, bs=512)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"4-6UABVNkU7g","colab_type":"code","colab":{}},"cell_type":"code","source":["class CharSeqRnn(nn.Module):\n"," def __init__(self, vocab_size, n_fac):\n"," super().__init__()\n"," self.e = nn.Embedding(vocab_size, n_fac)\n"," self.rnn = nn.RNN(n_fac, n_hidden)\n"," self.l_out = nn.Linear(n_hidden, vocab_size)\n"," \n"," def forward(self, *cs):\n"," bs = cs[0].size(0)\n"," h = V(torch.zeros(1, bs, n_hidden))\n"," inp = self.e(torch.stack(cs))\n"," outp,h = self.rnn(inp, h)\n"," return F.log_softmax(self.l_out(outp), dim=-1)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"LRKc-OBjkU7i","colab_type":"code","colab":{}},"cell_type":"code","source":["m = CharSeqRnn(vocab_size, n_fac).cuda()\n","opt = optim.Adam(m.parameters(), 1e-3)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"E0j15Wa_kU7m","colab_type":"code","colab":{}},"cell_type":"code","source":["it = iter(md.trn_dl)\n","*xst,yt = next(it)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"k-ZT3IZMkU7s","colab_type":"code","colab":{}},"cell_type":"code","source":["def nll_loss_seq(inp, targ):\n"," sl,bs,nh = inp.size()\n"," targ = targ.transpose(0,1).contiguous().view(-1)\n"," return F.nll_loss(inp.view(-1,nh), targ)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"l2beM4ezkU7v","colab_type":"code","colab":{},"outputId":"db8f2576-dbd6-4f68-a997-2c816403e0ab"},"cell_type":"code","source":["fit(m, md, 4, opt, nll_loss_seq)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"725ca331d28b482e9c7a4f83f741498e","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 2.59241 2.40251] \n","[ 1. 2.28474 2.19859] \n","[ 2. 2.13883 2.08836] \n","[ 3. 2.04892 2.01564] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"YWXE2oRtkU7y","colab_type":"code","colab":{}},"cell_type":"code","source":["set_lrs(opt, 1e-4)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"OstdrnK2kU73","colab_type":"code","colab":{},"outputId":"b43a3935-5177-4f9c-8208-86248304c5c1"},"cell_type":"code","source":["fit(m, md, 1, opt, nll_loss_seq)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"adb9aa22524d4bfd8b001d2efd10dbc3","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 1.99819 2.00106] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"ldHJPGhKkU8G","colab_type":"text"},"cell_type":"markdown","source":["### Identity init!"]},{"metadata":{"id":"cwu-RryRkU8H","colab_type":"code","colab":{},"collapsed":true},"cell_type":"code","source":["m = CharSeqRnn(vocab_size, n_fac).cuda()\n","opt = optim.Adam(m.parameters(), 1e-2)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"a12IAgqckU8h","colab_type":"code","colab":{},"outputId":"82f0882c-e0fa-42f6-d8eb-a64c820d81b7"},"cell_type":"code","source":["m.rnn.weight_hh_l0.data.copy_(torch.eye(n_hidden))"],"execution_count":0,"outputs":[{"output_type":"execute_result","data":{"text/plain":["\n"," 1 0 0 ... 0 0 0\n"," 0 1 0 ... 0 0 0\n"," 0 0 1 ... 0 0 0\n"," ... ⋱ ... \n"," 0 0 0 ... 1 0 0\n"," 0 0 0 ... 0 1 0\n"," 0 0 0 ... 0 0 1\n","[torch.cuda.FloatTensor of size 256x256 (GPU 0)]"]},"metadata":{"tags":[]},"execution_count":141}]},{"metadata":{"id":"Ty_jzdzIkU8n","colab_type":"code","colab":{},"outputId":"38d6dc57-9e8e-49fe-9a1f-0b16c4ad2a42"},"cell_type":"code","source":["fit(m, md, 4, opt, nll_loss_seq)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"8e141251f24d4083a6e8b2fa15dea724","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 2.39428 2.21111] \n","[ 1. 2.10381 2.03275] \n","[ 2. 1.99451 1.96393] \n","[ 3. 1.93492 1.91763] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"w61pArbXkU8s","colab_type":"code","colab":{},"collapsed":true},"cell_type":"code","source":["set_lrs(opt, 1e-3)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"KTxyJzpNkU8x","colab_type":"code","colab":{},"outputId":"f33477cc-7a21-4d83-b387-6e0e73b658b4"},"cell_type":"code","source":["fit(m, md, 4, opt, nll_loss_seq)"],"execution_count":0,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"ddf833e8b7ec4a3aa29dd271911f76ec","version_major":2,"version_minor":0},"text/plain":["A Jupyter Widget"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["[ 0. 1.84035 1.85742] \n","[ 1. 1.82896 1.84887] \n","[ 2. 1.81879 1.84281] \n","[ 3. 1.81337 1.83801] \n","\n"],"name":"stdout"}]},{"metadata":{"id":"Ttlo7pDMkU81","colab_type":"text"},"cell_type":"markdown","source":["## Stateful model"]},{"metadata":{"id":"k-Fm_f8dkU82","colab_type":"text"},"cell_type":"markdown","source":["### Setup"]},{"metadata":{"id":"eeufVSUgonLn","colab_type":"code","colab":{}},"cell_type":"code","source":["PATH='data/nietzsche/'\n","!mkdir -p PATH"],"execution_count":0,"outputs":[]},{"metadata":{"id":"DKY5XtqDonLr","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":35},"outputId":"552c75b4-5a77-41cd-c876-f21681e37234","executionInfo":{"status":"ok","timestamp":1536501087675,"user_tz":-180,"elapsed":1342,"user":{"displayName":"Denis Trofimov","photoUrl":"//lh4.googleusercontent.com/-5mI1PahJKgY/AAAAAAAAAAI/AAAAAAAApTs/jE-MakZklpc/s50-c-k-no/photo.jpg","userId":"118344610648363214086"}}},"cell_type":"code","source":["get_data(\"https://s3.amazonaws.com/text-datasets/nietzsche.txt\", f'{PATH}nietzsche.txt')\n","text = open(f'{PATH}nietzsche.txt').read()"],"execution_count":0,"outputs":[{"output_type":"stream","text":["corpus length: 600893\n"],"name":"stdout"}]},{"metadata":{"id":"AnvunFIwkU87","colab_type":"code","colab":{}},"cell_type":"code","source":["from torchtext import vocab, data\n","\n","from fastai.nlp import *\n","from fastai.lm_rnn import *\n","\n","PATH='data/nietzsche/'\n","\n","TRN_PATH = 'trn/'\n","VAL_PATH = 'val/'\n","TRN = f'{PATH}{TRN_PATH}'\n","VAL = f'{PATH}{VAL_PATH}'"],"execution_count":0,"outputs":[]},{"metadata":{"id":"V5LkMvHQhtPG","colab_type":"code","colab":{}},"cell_type":"code","source":["# Note: The student needs to practice her shell skills and prepare her own dataset before proceeding:\n","# - trn/trn.txt (first 80% of nietzsche.txt)\n","# - val/val.txt (last 20% of nietzsche.txt)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"GyHpOyi3oWJ5","colab_type":"text"},"cell_type":"markdown","source":["### The cell below is contribution of @denis-trofimov:"]},{"metadata":{"id":"uu00iyocogpS","colab_type":"code","colab":{}},"cell_type":"code","source":["# use the same `text`\n","!mkdir -p {TRN}\n","!mkdir -p {VAL}\n","open(os.path.join(TRN, 'trn.txt'), 'wt').write(text[:len(text)*4//5])\n","open(os.path.join(VAL, 'trn.txt'), 'wt').write(text[len(text)*4//5:])"],"execution_count":0,"outputs":[]},{"metadata":{"id":"c5A4wPOzkU9E","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":35},"outputId":"e6c2e990-de70-463e-9f4f-d745c4d4eb6a","executionInfo":{"status":"ok","timestamp":1536501489975,"user_tz":-180,"elapsed":3884,"user":{"displayName":"Denis Trofimov","photoUrl":"//lh4.googleusercontent.com/-5mI1PahJKgY/AAAAAAAAAAI/AAAAAAAApTs/jE-MakZklpc/s50-c-k-no/photo.jpg","userId":"118344610648363214086"}}},"cell_type":"code","source":["%ls {PATH}trn"],"execution_count":24,"outputs":[{"output_type":"stream","text":["trn.txt\n"],"name":"stdout"}]},{"metadata":{"id":"J1msFyPKkU9J","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":35},"outputId":"0d60e0d9-a1a9-487b-ac93-024ba1095f20","executionInfo":{"status":"ok","timestamp":1536501502007,"user_tz":-180,"elapsed":4075,"user":{"displayName":"Denis Trofimov","photoUrl":"//lh4.googleusercontent.com/-5mI1PahJKgY/AAAAAAAAAAI/AAAAAAAApTs/jE-MakZklpc/s50-c-k-no/photo.jpg","userId":"118344610648363214086"}}},"cell_type":"code","source":["TEXT = data.Field(lower=True, tokenize=list)\n","bs=64; bptt=8; n_fac=42; n_hidden=256\n","\n","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=3)\n","\n","len(md.trn_dl), md.nt, len(md.trn_ds), len(md.trn_ds[0].text)"],"execution_count":25,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(922, 55, 1, 472943)"]},"metadata":{"tags":[]},"execution_count":25}]},{"metadata":{"id":"ipd3HuYwkU9L","colab_type":"text"},"cell_type":"markdown","source":["### RNN"]},{"metadata":{"id":"V7qyiMdgkU9N","colab_type":"code","colab":{}},"cell_type":"code","source":["class CharSeqStatefulRnn(nn.Module):\n"," def __init__(self, vocab_size, n_fac, bs):\n"," self.vocab_size = vocab_size\n"," super().__init__()\n"," self.e = nn.Embedding(vocab_size, n_fac)\n"," self.rnn = nn.RNN(n_fac, n_hidden)\n"," self.l_out = nn.Linear(n_hidden, vocab_size)\n"," self.init_hidden(bs)\n"," \n"," def forward(self, cs):\n"," bs = cs[0].size(0)\n"," if self.h.size(1) != bs: self.init_hidden(bs)\n"," outp,h = self.rnn(self.e(cs), self.h)\n"," self.h = repackage_var(h)\n"," return F.log_softmax(self.l_out(outp), dim=-1).view(-1, self.vocab_size)\n"," \n"," def init_hidden(self, bs): self.h = V(torch.zeros(1, bs, n_hidden))"],"execution_count":0,"outputs":[]},{"metadata":{"id":"q4OFo6sakU9R","colab_type":"code","colab":{}},"cell_type":"code","source":["m = CharSeqStatefulRnn(md.nt, n_fac, 512).cuda()\n","opt = optim.Adam(m.parameters(), 1e-3)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"S3TOiN7WkU9Y","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":161},"outputId":"52f94e4c-a208-45f0-a759-f6b2778ad78d","executionInfo":{"status":"ok","timestamp":1536501551168,"user_tz":-180,"elapsed":43869,"user":{"displayName":"Denis Trofimov","photoUrl":"//lh4.googleusercontent.com/-5mI1PahJKgY/AAAAAAAAAAI/AAAAAAAApTs/jE-MakZklpc/s50-c-k-no/photo.jpg","userId":"118344610648363214086"}}},"cell_type":"code","source":["fit(m, md, 4, opt, F.nll_loss)"],"execution_count":28,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"a53f404f36864d4f82bd5319be72fb7a","version_minor":0,"version_major":2},"text/plain":["HBox(children=(IntProgress(value=0, description='Epoch', max=4), HTML(value='')))"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["epoch trn_loss val_loss \n"," 0 1.871024 1.881474 \n"," 1 1.700691 1.717526 \n"," 2 1.613403 1.657835 \n"," 3 1.559742 1.608276 \n","\n"],"name":"stdout"},{"output_type":"execute_result","data":{"text/plain":["[array([1.60828])]"]},"metadata":{"tags":[]},"execution_count":28}]},{"metadata":{"id":"WAwcOa9mkU9c","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":161},"outputId":"533def5e-a609-4a96-a116-8abd88f99168","executionInfo":{"status":"ok","timestamp":1536501594676,"user_tz":-180,"elapsed":43167,"user":{"displayName":"Denis Trofimov","photoUrl":"//lh4.googleusercontent.com/-5mI1PahJKgY/AAAAAAAAAAI/AAAAAAAApTs/jE-MakZklpc/s50-c-k-no/photo.jpg","userId":"118344610648363214086"}}},"cell_type":"code","source":["set_lrs(opt, 1e-4)\n","\n","fit(m, md, 4, opt, F.nll_loss)"],"execution_count":29,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"39fd551f5f6349f9909f3397f509f81e","version_minor":0,"version_major":2},"text/plain":["HBox(children=(IntProgress(value=0, description='Epoch', max=4), HTML(value='')))"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["epoch trn_loss val_loss \n"," 0 1.487708 1.563567 \n"," 1 1.48392 1.558889 \n"," 2 1.48536 1.554331 \n"," 3 1.478831 1.549998 \n","\n"],"name":"stdout"},{"output_type":"execute_result","data":{"text/plain":["[array([1.55])]"]},"metadata":{"tags":[]},"execution_count":29}]},{"metadata":{"id":"LaPQbbtMkU9i","colab_type":"text"},"cell_type":"markdown","source":["### RNN loop"]},{"metadata":{"id":"OW02-2gtkU9i","colab_type":"code","colab":{}},"cell_type":"code","source":["# From the pytorch source\n","\n","def RNNCell(input, hidden, w_ih, w_hh, b_ih, b_hh):\n"," return F.tanh(F.linear(input, w_ih, b_ih) + F.linear(hidden, w_hh, b_hh))"],"execution_count":0,"outputs":[]},{"metadata":{"id":"yXX3vmWakU9k","colab_type":"code","colab":{}},"cell_type":"code","source":["class CharSeqStatefulRnn2(nn.Module):\n"," def __init__(self, vocab_size, n_fac, bs):\n"," super().__init__()\n"," self.vocab_size = vocab_size\n"," self.e = nn.Embedding(vocab_size, n_fac)\n"," self.rnn = nn.RNNCell(n_fac, n_hidden)\n"," self.l_out = nn.Linear(n_hidden, vocab_size)\n"," self.init_hidden(bs)\n"," \n"," def forward(self, cs):\n"," bs = cs[0].size(0)\n"," if self.h.size(1) != bs: self.init_hidden(bs)\n"," outp = []\n"," o = self.h\n"," for c in cs: \n"," o = self.rnn(self.e(c), o)\n"," outp.append(o)\n"," outp = self.l_out(torch.stack(outp))\n"," self.h = repackage_var(o)\n"," return F.log_softmax(outp, dim=-1).view(-1, self.vocab_size)\n"," \n"," def init_hidden(self, bs): self.h = V(torch.zeros(1, bs, n_hidden))"],"execution_count":0,"outputs":[]},{"metadata":{"id":"8RedoGr0kU9p","colab_type":"code","colab":{}},"cell_type":"code","source":["m = CharSeqStatefulRnn2(md.nt, n_fac, 512).cuda()\n","opt = optim.Adam(m.parameters(), 1e-3)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"o-c5zQGskU9r","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":161},"outputId":"55a11127-9c90-4e49-b771-8a3d5c149c3a","executionInfo":{"status":"ok","timestamp":1536501671715,"user_tz":-180,"elapsed":71953,"user":{"displayName":"Denis Trofimov","photoUrl":"//lh4.googleusercontent.com/-5mI1PahJKgY/AAAAAAAAAAI/AAAAAAAApTs/jE-MakZklpc/s50-c-k-no/photo.jpg","userId":"118344610648363214086"}}},"cell_type":"code","source":["fit(m, md, 4, opt, F.nll_loss)"],"execution_count":33,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"8abb5ea031cb4bfda169b09c6f9b53c1","version_minor":0,"version_major":2},"text/plain":["HBox(children=(IntProgress(value=0, description='Epoch', max=4), HTML(value='')))"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["epoch trn_loss val_loss \n"," 0 1.886794 1.879886 \n"," 1 1.700092 1.723458 \n"," 2 1.61504 1.658945 \n"," 3 1.565847 1.615578 \n","\n"],"name":"stdout"},{"output_type":"execute_result","data":{"text/plain":["[array([1.61558])]"]},"metadata":{"tags":[]},"execution_count":33}]},{"metadata":{"id":"iIE-LEupkU9w","colab_type":"text"},"cell_type":"markdown","source":["### GRU"]},{"metadata":{"id":"FI97VrMgkU9w","colab_type":"code","colab":{}},"cell_type":"code","source":["class CharSeqStatefulGRU(nn.Module):\n"," def __init__(self, vocab_size, n_fac, bs):\n"," super().__init__()\n"," self.vocab_size = vocab_size\n"," self.e = nn.Embedding(vocab_size, n_fac)\n"," self.rnn = nn.GRU(n_fac, n_hidden)\n"," self.l_out = nn.Linear(n_hidden, vocab_size)\n"," self.init_hidden(bs)\n"," \n"," def forward(self, cs):\n"," bs = cs[0].size(0)\n"," if self.h.size(1) != bs: self.init_hidden(bs)\n"," outp,h = self.rnn(self.e(cs), self.h)\n"," self.h = repackage_var(h)\n"," return F.log_softmax(self.l_out(outp), dim=-1).view(-1, self.vocab_size)\n"," \n"," def init_hidden(self, bs): self.h = V(torch.zeros(1, bs, n_hidden))"],"execution_count":0,"outputs":[]},{"metadata":{"id":"NpZSuOpWkU9z","colab_type":"code","colab":{}},"cell_type":"code","source":["# From the pytorch source code - for reference\n","\n","def GRUCell(input, hidden, w_ih, w_hh, b_ih, b_hh):\n"," gi = F.linear(input, w_ih, b_ih)\n"," gh = F.linear(hidden, w_hh, b_hh)\n"," i_r, i_i, i_n = gi.chunk(3, 1)\n"," h_r, h_i, h_n = gh.chunk(3, 1)\n","\n"," resetgate = F.sigmoid(i_r + h_r)\n"," inputgate = F.sigmoid(i_i + h_i)\n"," newgate = F.tanh(i_n + resetgate * h_n)\n"," return newgate + inputgate * (hidden - newgate)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"FCwZkzkHkU92","colab_type":"code","colab":{}},"cell_type":"code","source":["m = CharSeqStatefulGRU(md.nt, n_fac, 512).cuda()\n","\n","opt = optim.Adam(m.parameters(), 1e-3)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"iG5e7IGokU93","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":197},"outputId":"1d190fea-547b-43f4-a838-77f54eb0d848","executionInfo":{"status":"ok","timestamp":1536501741458,"user_tz":-180,"elapsed":65884,"user":{"displayName":"Denis Trofimov","photoUrl":"//lh4.googleusercontent.com/-5mI1PahJKgY/AAAAAAAAAAI/AAAAAAAApTs/jE-MakZklpc/s50-c-k-no/photo.jpg","userId":"118344610648363214086"}}},"cell_type":"code","source":["fit(m, md, 6, opt, F.nll_loss)"],"execution_count":37,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"127b78d2c2174e5a94661ec7cea464de","version_minor":0,"version_major":2},"text/plain":["HBox(children=(IntProgress(value=0, description='Epoch', max=6), HTML(value='')))"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["epoch trn_loss val_loss \n"," 0 1.753962 1.741398 \n"," 1 1.574502 1.605908 \n"," 2 1.480759 1.53872 \n"," 3 1.429622 1.498556 \n"," 4 1.388472 1.479027 \n"," 5 1.359698 1.46679 \n","\n"],"name":"stdout"},{"output_type":"execute_result","data":{"text/plain":["[array([1.46679])]"]},"metadata":{"tags":[]},"execution_count":37}]},{"metadata":{"id":"pBghz7clkU96","colab_type":"code","colab":{}},"cell_type":"code","source":["set_lrs(opt, 1e-4)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"F3--CKcqkU-A","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":143},"outputId":"d7a0c963-38f7-41a1-b4ad-0f0c29d95184","executionInfo":{"status":"ok","timestamp":1536501776855,"user_tz":-180,"elapsed":33453,"user":{"displayName":"Denis Trofimov","photoUrl":"//lh4.googleusercontent.com/-5mI1PahJKgY/AAAAAAAAAAI/AAAAAAAApTs/jE-MakZklpc/s50-c-k-no/photo.jpg","userId":"118344610648363214086"}}},"cell_type":"code","source":["fit(m, md, 3, opt, F.nll_loss)"],"execution_count":39,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"0b4cbc7388624eaf8df80a8c3106e026","version_minor":0,"version_major":2},"text/plain":["HBox(children=(IntProgress(value=0, description='Epoch', max=3), HTML(value='')))"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["epoch trn_loss val_loss \n"," 0 1.270264 1.433494 \n"," 1 1.275244 1.429932 \n"," 2 1.273689 1.427812 \n","\n"],"name":"stdout"},{"output_type":"execute_result","data":{"text/plain":["[array([1.42781])]"]},"metadata":{"tags":[]},"execution_count":39}]},{"metadata":{"id":"Nt3T0swgkU-U","colab_type":"text"},"cell_type":"markdown","source":["### Putting it all together: LSTM"]},{"metadata":{"id":"9b6ky63akU-V","colab_type":"code","colab":{}},"cell_type":"code","source":["from fastai import sgdr\n","\n","n_hidden=512"],"execution_count":0,"outputs":[]},{"metadata":{"id":"2VY_UQuUkU-Z","colab_type":"code","colab":{}},"cell_type":"code","source":["class CharSeqStatefulLSTM(nn.Module):\n"," def __init__(self, vocab_size, n_fac, bs, nl):\n"," super().__init__()\n"," self.vocab_size,self.nl = vocab_size,nl\n"," self.e = nn.Embedding(vocab_size, n_fac)\n"," self.rnn = nn.LSTM(n_fac, n_hidden, nl, dropout=0.5)\n"," self.l_out = nn.Linear(n_hidden, vocab_size)\n"," self.init_hidden(bs)\n"," \n"," def forward(self, cs):\n"," bs = cs[0].size(0)\n"," if self.h[0].size(1) != bs: self.init_hidden(bs)\n"," outp,h = self.rnn(self.e(cs), self.h)\n"," self.h = repackage_var(h)\n"," return F.log_softmax(self.l_out(outp), dim=-1).view(-1, self.vocab_size)\n"," \n"," def init_hidden(self, bs):\n"," self.h = (V(torch.zeros(self.nl, bs, n_hidden)),\n"," V(torch.zeros(self.nl, bs, n_hidden)))"],"execution_count":0,"outputs":[]},{"metadata":{"id":"ROL0AFw4kU-c","colab_type":"code","colab":{}},"cell_type":"code","source":["m = CharSeqStatefulLSTM(md.nt, n_fac, 512, 2).cuda()\n","lo = LayerOptimizer(optim.Adam, m, 1e-2, 1e-5)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"dNLpz4wPkU-f","colab_type":"code","colab":{}},"cell_type":"code","source":["os.makedirs(f'{PATH}models', exist_ok=True)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"QognXcamkU-h","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":125},"outputId":"2975cb9d-710b-46d4-b8e4-d8567ee05101","executionInfo":{"status":"ok","timestamp":1536501823638,"user_tz":-180,"elapsed":39970,"user":{"displayName":"Denis Trofimov","photoUrl":"//lh4.googleusercontent.com/-5mI1PahJKgY/AAAAAAAAAAI/AAAAAAAApTs/jE-MakZklpc/s50-c-k-no/photo.jpg","userId":"118344610648363214086"}}},"cell_type":"code","source":["fit(m, md, 2, lo.opt, F.nll_loss)"],"execution_count":44,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"c76126fe38a6489882f01c563c178e61","version_minor":0,"version_major":2},"text/plain":["HBox(children=(IntProgress(value=0, description='Epoch', max=2), HTML(value='')))"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["epoch trn_loss val_loss \n"," 0 1.844746 1.773394 \n"," 1 1.722143 1.666175 \n","\n"],"name":"stdout"},{"output_type":"execute_result","data":{"text/plain":["[array([1.66618])]"]},"metadata":{"tags":[]},"execution_count":44}]},{"metadata":{"id":"6Ut7c6lLkU-l","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":359},"outputId":"9ded7b1c-a89a-4e1a-a76b-f99336a4705a","executionInfo":{"status":"ok","timestamp":1536502109160,"user_tz":-180,"elapsed":285406,"user":{"displayName":"Denis Trofimov","photoUrl":"//lh4.googleusercontent.com/-5mI1PahJKgY/AAAAAAAAAAI/AAAAAAAApTs/jE-MakZklpc/s50-c-k-no/photo.jpg","userId":"118344610648363214086"}}},"cell_type":"code","source":["on_end = lambda sched, cycle: save_model(m, f'{PATH}models/cyc_{cycle}')\n","cb = [CosAnneal(lo, len(md.trn_dl), cycle_mult=2, on_cycle_end=on_end)]\n","fit(m, md, 2**4-1, lo.opt, F.nll_loss, callbacks=cb)"],"execution_count":45,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"ae671ddc4ff149c1aec0a51e60039a8e","version_minor":0,"version_major":2},"text/plain":["HBox(children=(IntProgress(value=0, description='Epoch', max=15), HTML(value='')))"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["epoch trn_loss val_loss \n"," 0 1.544696 1.514086 \n"," 1 1.586297 1.543018 \n"," 2 1.463393 1.453414 \n"," 3 1.595952 1.566471 \n"," 4 1.526138 1.498232 \n"," 5 1.448789 1.437211 \n"," 6 1.390259 1.401771 \n"," 7 1.588704 1.545149 \n"," 8 1.549123 1.524905 \n"," 9 1.507872 1.489736 \n"," 10 1.478728 1.462811 \n"," 11 1.44421 1.429804 \n"," 12 1.392486 1.398612 \n"," 13 1.359858 1.375908 \n"," 14 1.332991 1.364748 \n","\n"],"name":"stdout"},{"output_type":"execute_result","data":{"text/plain":["[array([1.36475])]"]},"metadata":{"tags":[]},"execution_count":45}]},{"metadata":{"id":"RHtwCDSPkU-o","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":1223},"outputId":"466acae0-8394-4775-d9ca-aef54d3dde53","executionInfo":{"status":"ok","timestamp":1536503305443,"user_tz":-180,"elapsed":1196143,"user":{"displayName":"Denis Trofimov","photoUrl":"//lh4.googleusercontent.com/-5mI1PahJKgY/AAAAAAAAAAI/AAAAAAAApTs/jE-MakZklpc/s50-c-k-no/photo.jpg","userId":"118344610648363214086"}}},"cell_type":"code","source":["on_end = lambda sched, cycle: save_model(m, f'{PATH}models/cyc_{cycle}')\n","cb = [CosAnneal(lo, len(md.trn_dl), cycle_mult=2, on_cycle_end=on_end)]\n","fit(m, md, 2**6-1, lo.opt, F.nll_loss, callbacks=cb)"],"execution_count":46,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"2df7d8426637436cb1672f319eff7731","version_minor":0,"version_major":2},"text/plain":["HBox(children=(IntProgress(value=0, description='Epoch', max=63), HTML(value='')))"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["epoch trn_loss val_loss \n"," 0 1.321252 1.362206 \n"," 1 1.320408 1.360319 \n"," 2 1.317524 1.358856 \n"," 3 1.318397 1.356914 \n"," 4 1.307469 1.353842 \n"," 5 1.296498 1.351125 \n"," 6 1.294319 1.350037 \n"," 7 1.301666 1.349432 \n"," 8 1.290697 1.345898 \n"," 9 1.283525 1.343757 \n"," 10 1.280457 1.341245 \n"," 11 1.266753 1.34024 \n"," 12 1.265934 1.339088 \n"," 13 1.263306 1.338689 \n"," 14 1.25692 1.338239 \n"," 15 1.270346 1.340823 \n"," 16 1.25304 1.338276 \n"," 17 1.253572 1.33681 \n"," 18 1.238753 1.336299 \n"," 19 1.235801 1.335807 \n"," 20 1.218574 1.33572 \n"," 21 1.215939 1.336359 \n"," 22 1.206881 1.335688 \n"," 23 1.201047 1.335435 \n"," 24 1.192418 1.33732 \n"," 25 1.190129 1.336534 \n"," 26 1.178888 1.337297 \n"," 27 1.178591 1.337287 \n"," 28 1.177372 1.336653 \n"," 29 1.176325 1.337028 \n"," 30 1.169835 1.336912 \n"," 31 1.169397 1.336608 \n"," 32 1.193021 1.341146 \n"," 33 1.18832 1.337692 \n"," 34 1.175659 1.340325 \n"," 35 1.165643 1.342672 \n"," 36 1.157848 1.342893 \n"," 37 1.1572 1.346069 \n"," 38 1.143936 1.347931 \n"," 39 1.134674 1.350791 \n"," 40 1.130561 1.352702 \n"," 41 1.121286 1.354239 \n"," 42 1.112185 1.357288 \n"," 43 1.102156 1.358668 \n"," 44 1.099506 1.361332 \n"," 45 1.086269 1.364877 \n"," 46 1.086622 1.366653 \n"," 47 1.082692 1.370558 \n"," 48 1.070877 1.371193 \n"," 49 1.059791 1.373834 \n"," 50 1.055946 1.374995 \n"," 51 1.044676 1.378115 \n"," 52 1.043097 1.377984 \n"," 53 1.04297 1.380855 \n"," 54 1.036388 1.382036 \n"," 55 1.032721 1.383575 \n"," 56 1.032091 1.383753 \n"," 57 1.024543 1.385139 \n"," 58 1.035534 1.385778 \n"," 59 1.025328 1.385643 \n"," 60 1.028057 1.38606 \n"," 61 1.021811 1.386348 \n"," 62 1.024257 1.386254 \n","\n"],"name":"stdout"},{"output_type":"execute_result","data":{"text/plain":["[array([1.38625])]"]},"metadata":{"tags":[]},"execution_count":46}]},{"metadata":{"id":"uD-kcNgbkU-r","colab_type":"code","colab":{}},"cell_type":"code","source":[""],"execution_count":0,"outputs":[]},{"metadata":{"id":"JrYizhXpkU-s","colab_type":"text"},"cell_type":"markdown","source":["### Test"]},{"metadata":{"id":"ARuIGPGukU-t","colab_type":"code","colab":{}},"cell_type":"code","source":["def get_next(inp):\n"," idxs = TEXT.numericalize(inp)\n"," p = m(VV(idxs.transpose(0,1)))\n"," r = torch.multinomial(p[-1].exp(), 1)\n"," return TEXT.vocab.itos[to_np(r)[0]]"],"execution_count":0,"outputs":[]},{"metadata":{"id":"6q8ggxvwkU-u","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":35},"outputId":"8c5cb30e-bd2c-49be-d8e3-fc37bfd0a3a7","executionInfo":{"status":"ok","timestamp":1536503310440,"user_tz":-180,"elapsed":1429,"user":{"displayName":"Denis Trofimov","photoUrl":"//lh4.googleusercontent.com/-5mI1PahJKgY/AAAAAAAAAAI/AAAAAAAApTs/jE-MakZklpc/s50-c-k-no/photo.jpg","userId":"118344610648363214086"}}},"cell_type":"code","source":["get_next('for thos')"],"execution_count":48,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'e'"]},"metadata":{"tags":[]},"execution_count":48}]},{"metadata":{"id":"Np3ulT05kU-x","colab_type":"code","colab":{}},"cell_type":"code","source":["def get_next_n(inp, n):\n"," res = inp\n"," for i in range(n):\n"," c = get_next(inp)\n"," res += c\n"," inp = inp[1:]+c\n"," return res"],"execution_count":0,"outputs":[]},{"metadata":{"id":"aY9eJHT5kU-z","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":55},"outputId":"6dea8a6c-6d68-456f-874f-8dbd101c9778","executionInfo":{"status":"ok","timestamp":1536503314304,"user_tz":-180,"elapsed":2267,"user":{"displayName":"Denis Trofimov","photoUrl":"//lh4.googleusercontent.com/-5mI1PahJKgY/AAAAAAAAAAI/AAAAAAAApTs/jE-MakZklpc/s50-c-k-no/photo.jpg","userId":"118344610648363214086"}}},"cell_type":"code","source":["print(get_next_n('for thos', 400))"],"execution_count":50,"outputs":[{"output_type":"stream","text":["for those ideal, hencefound from a feeling one will not enough to the no-make us in these scholarly, heart; and invedcenturs one's surfying clear suvely, loveto their old praptured at the foreguishedinex[now were speak, with scenere, norbearing to such spoil, not being kniments, therefor everythingin['--let us be wicknownesse-saint: and still prejudices, not at themcoman'sole human was! \"perhaps to welt u\n"],"name":"stdout"}]},{"metadata":{"id":"ub2Fq3XwkU-4","colab_type":"code","colab":{}},"cell_type":"code","source":[""],"execution_count":0,"outputs":[]}]}
\ No newline at end of file