Showing preview only (3,018K chars total). Download the full file or copy to clipboard to get everything.
Repository: yanneta/pytorch-tutorials
Branch: master
Commit: 53c1dc84fc11
Files: 8
Total size: 2.9 MB
Directory structure:
gitextract_84qhok83/
├── README.md
├── cbow.ipynb
├── collaborative-filtering-nn.ipynb
├── environment.yml
├── image-caption-tutorial.ipynb
├── images/
│ ├── tiny_training2.csv
│ └── tiny_val2.csv
└── intro-to-pytoch.ipynb
================================================
FILE CONTENTS
================================================
================================================
FILE: README.md
================================================
# pytorch-tutorials
Here are a few basic deep learning tutorial using Pytorch.
================================================
FILE: cbow.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"toc": true
},
"source": [
"<h1>Table of Contents<span class=\"tocSkip\"></span></h1>\n",
"<div class=\"toc\" style=\"margin-top: 1em;\"><ul class=\"toc-item\"><li><span><a href=\"#Text-Classification\" data-toc-modified-id=\"Text-Classification-1\"><span class=\"toc-item-num\">1 </span>Text Classification</a></span><ul class=\"toc-item\"><li><span><a href=\"#Subjectivity-Dataset\" data-toc-modified-id=\"Subjectivity-Dataset-1.1\"><span class=\"toc-item-num\">1.1 </span>Subjectivity Dataset</a></span></li><li><span><a href=\"#Tokenization\" data-toc-modified-id=\"Tokenization-1.2\"><span class=\"toc-item-num\">1.2 </span>Tokenization</a></span><ul class=\"toc-item\"><li><span><a href=\"#Simple-Tokenization\" data-toc-modified-id=\"Simple-Tokenization-1.2.1\"><span class=\"toc-item-num\">1.2.1 </span>Simple Tokenization</a></span></li><li><span><a href=\"#Much-better-tokenization-with-Spacy\" data-toc-modified-id=\"Much-better-tokenization-with-Spacy-1.2.2\"><span class=\"toc-item-num\">1.2.2 </span>Much better tokenization with Spacy</a></span></li></ul></li><li><span><a href=\"#Split-dataset-in-train-and-validation\" data-toc-modified-id=\"Split-dataset-in-train-and-validation-1.3\"><span class=\"toc-item-num\">1.3 </span>Split dataset in train and validation</a></span></li><li><span><a href=\"#Word-to-index-mapping\" data-toc-modified-id=\"Word-to-index-mapping-1.4\"><span class=\"toc-item-num\">1.4 </span>Word to index mapping</a></span></li><li><span><a href=\"#Sentence-encoding\" data-toc-modified-id=\"Sentence-encoding-1.5\"><span class=\"toc-item-num\">1.5 </span>Sentence encoding</a></span></li><li><span><a href=\"#Embedding-layer\" data-toc-modified-id=\"Embedding-layer-1.6\"><span class=\"toc-item-num\">1.6 </span>Embedding layer</a></span></li><li><span><a href=\"#Continuous-Bag-of-Words-Model\" data-toc-modified-id=\"Continuous-Bag-of-Words-Model-1.7\"><span class=\"toc-item-num\">1.7 </span>Continuous Bag of Words Model</a></span></li></ul></li><li><span><a href=\"#Training-the-CBOW-model\" data-toc-modified-id=\"Training-the-CBOW-model-2\"><span class=\"toc-item-num\">2 </span>Training the CBOW model</a></span></li><li><span><a href=\"#Data-loaders-for-SGD\" data-toc-modified-id=\"Data-loaders-for-SGD-3\"><span class=\"toc-item-num\">3 </span>Data loaders for SGD</a></span></li></ul></div>"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"# import pytorch libraries\n",
"%matplotlib inline\n",
"import torch \n",
"import torch.autograd as autograd \n",
"import torch.nn as nn \n",
"import torch.nn.functional as F\n",
"import torch.optim as optim\n",
"import numpy as np"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Text Classification\n",
"In this part of the tutorial we develop a continuous bag of words (CBOW) model for a text classification task described [here]( https://people.cs.umass.edu/~miyyer/pubs/2015_acl_dan.pdf). The CBOW model was first described [here](https://arxiv.org/pdf/1301.3781.pdf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Subjectivity Dataset\n",
"The subjectivity dataset has 5000 subjective and 5000 objective processed sentences. To get the data:\n",
"```\n",
"wget http://www.cs.cornell.edu/people/pabo/movie-review-data/rotten_imdb.tar.gz\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def unpack_dataset():\n",
" ! wget http://www.cs.cornell.edu/people/pabo/movie-review-data/rotten_imdb.tar.gz\n",
" ! mkdir data\n",
" ! tar -xvf rotten_imdb.tar.gz -C data"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"#unpack_dataset()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"plot.tok.gt9.5000 quote.tok.gt9.5000 subjdata.README.1.0\r\n"
]
}
],
"source": [
"!ls data"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"the movie begins in the past where a young boy named sam attempts to save celebi from a hunter . \r\n",
"emerging from the human psyche and showing characteristics of abstract expressionism , minimalism and russian constructivism , graffiti removal has secured its place in the history of modern art while being created by artists who are unconscious of their artistic achievements . \r\n"
]
}
],
"source": [
"! head -2 data/plot.tok.gt9.5000"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[PosixPath('data/plot.tok.gt9.5000'),\n",
" PosixPath('data/subjdata.README.1.0'),\n",
" PosixPath('data/quote.tok.gt9.5000')]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from pathlib import Path\n",
"PATH = Path(\"data\")\n",
"list(PATH.iterdir())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Tokenization\n",
"Tokenization is the task of chopping up text into pieces, called tokens.\n",
"\n",
"spaCy is an open-source software library for advanced Natural Language Processing. Here we will use it for tokenization. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Simple Tokenization"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"# We need each line in the file \n",
"def read_file(path):\n",
" \"\"\" Read file returns a list of lines.\n",
" \"\"\"\n",
" with open(path, encoding = \"ISO-8859-1\") as f:\n",
" content = f.readlines()\n",
" return content"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"obj_lines = read_file(PATH/\"plot.tok.gt9.5000\")"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'the movie begins in the past where a young boy named sam attempts to save celebi from a hunter . \\n'"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"obj_lines[0]"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(['the', 'movie', 'begins', 'in', 'the', 'past', 'where', 'a',\n",
" 'young', 'boy', 'named', 'sam', 'attempts', 'to', 'save', 'celebi',\n",
" 'from', 'a', 'hunter', '.'], dtype='<U8')"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.array(obj_lines[0].strip().lower().split(\" \"))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Much better tokenization with Spacy"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#!pip install -U spacy"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import spacy"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# first time run this\n",
"#!python3 -m spacy download en"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"tok = spacy.load('en')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"obj_lines = read_file(PATH/\"plot.tok.gt9.5000\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"len(obj_lines)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"obj_lines[0]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"test = tok(obj_lines[0])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"np.array([x for x in test])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Split dataset in train and validation"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.model_selection import train_test_split"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"sub_content = read_file(PATH/\"quote.tok.gt9.5000\")\n",
"obj_content = read_file(PATH/\"plot.tok.gt9.5000\")\n",
"sub_content = np.array([line.strip().lower() for line in sub_content])\n",
"obj_content = np.array([line.strip().lower() for line in obj_content])\n",
"sub_y = np.zeros(len(sub_content))\n",
"obj_y = np.ones(len(obj_content))\n",
"X = np.append(sub_content, obj_content)\n",
"y = np.append(sub_y, obj_y)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"('smart and alert , thirteen conversations about one thing is a small gem .',\n",
" 0.0)"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X[0], y[0]"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(array(['will god let her fall or give her a new path ?',\n",
" \"the director's twitchy sketchbook style and adroit perspective shifts grow wearisome amid leaden pacing and indifferent craftsmanship ( most notably wretched sound design ) .\",\n",
" \"welles groupie/scholar peter bogdanovich took a long time to do it , but he's finally provided his own broadside at publishing giant william randolph hearst .\",\n",
" 'based on the 1997 john king novel of the same name with a rather odd synopsis : \" a first novel about a seasoned chelsea football club hooligan who represents a disaffected society operating by brutal rules .',\n",
" 'yet , beneath an upbeat appearance , she is struggling desperately with the emotional and physical scars left by the attack .'],\n",
" dtype='<U691'), array([1., 0., 0., 1., 1.]))"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X_train[:5], y_train[:5]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Word to index mapping\n",
"In interest of time we will tokenize without spaCy. Here we will compute a vocabulary of words based on the training set and a mapping from word to an index."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"from collections import defaultdict"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"def get_vocab(content):\n",
" \"\"\"Computes Dict of counts of words.\n",
" \n",
" Computes the number of times a word is on a document.\n",
" \"\"\"\n",
" vocab = defaultdict(float)\n",
" for line in content:\n",
" words = set(line.split())\n",
" for word in words:\n",
" vocab[word] += 1\n",
" return vocab "
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"#Getting the vocabulary from the training set\n",
"word_count = get_vocab(X_train)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
"#word_count"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"21415"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(word_count.keys())"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"# let's delete words that are very infrequent\n",
"for word in list(word_count):\n",
" if word_count[word] < 5:\n",
" del word_count[word]"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"4065"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(word_count.keys())"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"## Finally we need an index for each word in the vocab\n",
"vocab2index = {\"<PAD>\":0, \"UNK\":1} # init with padding and unknown\n",
"words = [\"<PAD>\", \"UNK\"]\n",
"for word in word_count:\n",
" vocab2index[word] = len(words)\n",
" words.append(word)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [],
"source": [
"#vocab2index"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Sentence encoding\n",
"Here we encode each sentence as a sequence of indices corresponding to each word."
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"x_train_len = np.array([len(x.split()) for x in X_train])\n",
"x_val_len = np.array([len(x.split()) for x in X_val])"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"43.0"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.percentile(x_train_len, 95) # let set the max sequence len to N=40"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'will god let her fall or give her a new path ?'"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X_train[0]"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"8"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# returns the index of the word or the index of \"UNK\" otherwise\n",
"vocab2index.get(\"?\", vocab2index[\"UNK\"])"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([11, 3, 6, 7, 2, 12, 9, 7, 10, 4, 5, 8])"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.array([vocab2index.get(w, vocab2index[\"UNK\"]) for w in X_train[0].split()])"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [],
"source": [
"def encode_sentence(s, N=40):\n",
" enc = np.zeros(N, dtype=np.int32)\n",
" enc1 = np.array([vocab2index.get(w, vocab2index[\"UNK\"]) for w in s.split()])\n",
" l = min(N, len(enc1))\n",
" enc[:l] = enc1[:l]\n",
" return enc"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([11, 3, 6, 7, 2, 12, 9, 7, 10, 4, 5, 8, 0, 0, 0, 0, 0,\n",
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
" 0, 0, 0, 0, 0, 0], dtype=int32)"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"encode_sentence(X_train[0])"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [],
"source": [
"x_train_len = np.minimum(x_train_len, 40)\n",
"x_val_len = np.minimum(x_val_len, 40)"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(8000, 40)"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x_train = np.vstack([encode_sentence(x) for x in X_train])\n",
"x_train.shape"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(2000, 40)"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x_val = np.vstack([encode_sentence(x) for x in X_val])\n",
"x_val.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Embedding layer\n",
"Most deep learning models use a dense vectors of real numbers as representation of words (word embeddings), as opposed to a one-hot encoding representations. The module torch.nn.Embedding is used to represent word embeddings. It takes two arguments: the vocabulary size, and the dimensionality of the embeddings. The embeddings are initialized with random vectors. "
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Parameter containing:\n",
"tensor([[ 0.0000, 0.0000, 0.0000, 0.0000],\n",
" [-0.9722, 0.9138, 0.0743, -0.1021],\n",
" [-0.0091, -0.4712, 1.2977, -1.2585],\n",
" [ 0.1368, 1.4354, -0.0935, 0.1110],\n",
" [ 0.7230, -0.9195, 0.9880, 1.2590],\n",
" [-0.4534, 0.8292, -0.2036, 0.3768],\n",
" [ 1.1694, 1.6533, 1.1898, 1.0617],\n",
" [-1.1252, -0.2761, -0.1112, 0.7598],\n",
" [ 0.9987, 1.0012, -0.3599, 0.5257],\n",
" [ 1.2248, -0.2419, 0.2870, -1.5904]])"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# an Embedding module containing 10 words with embedding size 4\n",
"# embedding will be initialized at random\n",
"embed = nn.Embedding(10, 4, padding_idx=0)\n",
"embed.weight"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that the `padding_idx` has embedding vector 0."
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"tensor([[[-0.9722, 0.9138, 0.0743, -0.1021],\n",
" [ 0.7230, -0.9195, 0.9880, 1.2590],\n",
" [-0.9722, 0.9138, 0.0743, -0.1021],\n",
" [-0.4534, 0.8292, -0.2036, 0.3768],\n",
" [-0.9722, 0.9138, 0.0743, -0.1021],\n",
" [ 0.0000, 0.0000, 0.0000, 0.0000]]])"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# given a list of ids we can \"look up\" the embedding corresponing to each id\n",
"# can you see that some vectors are the same?\n",
"a = torch.LongTensor([[1,4,1,5,1,0]])\n",
"embed(a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This would be the representation of a sentence with words with indices [1,4,1,5,1] and a padding at the end. Bellow we have an example in which we have two sentences. the first sentence has length 3 and the last sentence has length 2. In order to use a tensor we use padding at the end of the second sentence. "
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [],
"source": [
"a = torch.LongTensor([[1,4,1], [1,3,0]])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Our model takes an average of the word embedding of each word. Here is how we do it."
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [],
"source": [
"s = torch.FloatTensor([3, 2]) # here is the size of the vector"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"tensor([[[-0.9722, 0.9138, 0.0743, -0.1021],\n",
" [ 0.7230, -0.9195, 0.9880, 1.2590],\n",
" [-0.9722, 0.9138, 0.0743, -0.1021]],\n",
"\n",
" [[-0.9722, 0.9138, 0.0743, -0.1021],\n",
" [ 0.1368, 1.4354, -0.0935, 0.1110],\n",
" [ 0.0000, 0.0000, 0.0000, 0.0000]]])"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"embed(a)"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"tensor([[-1.2213, 0.9080, 1.1367, 1.0548],\n",
" [-0.8354, 2.3491, -0.0192, 0.0089]])"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"embed(a).sum(dim=1)"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"tensor([[-0.4071, 0.3027, 0.3789, 0.3516],\n",
" [-0.4177, 1.1746, -0.0096, 0.0044]])"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sum_embs = embed(a).sum(dim=1) \n",
"sum_embs/ s.view(s.shape[0], 1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Continuous Bag of Words Model"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [],
"source": [
"class CBOW(nn.Module):\n",
" def __init__(self, vocab_size, emb_size=100):\n",
" super(CBOW, self).__init__()\n",
" self.word_emb = nn.Embedding(vocab_size, emb_size, padding_idx=0)\n",
" self.linear = nn.Linear(emb_size, 1)\n",
" \n",
" def forward(self, x, s):\n",
" x = self.word_emb(x)\n",
" x = x.sum(dim=1)/ s\n",
" x = self.linear(x)\n",
" return x"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [],
"source": [
"model = CBOW(vocab_size=5, emb_size=3)"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Parameter containing:\n",
"tensor([[ 0.0000, 0.0000, 0.0000],\n",
" [ 1.6292, 1.2889, 0.7647],\n",
" [ 2.5952, -0.9427, 0.3432],\n",
" [ 0.5775, -2.7160, -1.4606],\n",
" [ 1.2119, 0.8058, -0.0705]])"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.word_emb.weight"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"tensor([[ 0.1384],\n",
" [ 0.5663]])"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s = s.view(s.shape[0], 1)\n",
"model(a, s)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Training the CBOW model "
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"4067\n"
]
}
],
"source": [
"V = len(words)\n",
"model = CBOW(vocab_size=V, emb_size=50)\n",
"print(V)"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [],
"source": [
"def val_metrics(model):\n",
" model.eval()\n",
" x = torch.LongTensor(x_val) #.cuda()\n",
" y = torch.Tensor(y_val).unsqueeze(1) #).cuda()\n",
" s = torch.Tensor(x_val_len).view(x_val_len.shape[0], 1)\n",
" y_hat = model(x, s)\n",
" loss = F.binary_cross_entropy_with_logits(y_hat, y)\n",
" y_pred = y_hat > 0\n",
" correct = (y_pred.float() == y).float().sum()\n",
" accuracy = correct/y_pred.shape[0]\n",
" return loss.item(), accuracy.item()"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(0.6892560720443726, 0.5245000123977661)"
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# accuracy of a random model should be around 0.5\n",
"val_metrics(model)"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {},
"outputs": [],
"source": [
"def train_epocs(model, epochs=10, lr=0.01):\n",
" optimizer = torch.optim.Adam(model.parameters(), lr=lr)\n",
" for i in range(epochs):\n",
" model.train()\n",
" x = torch.LongTensor(x_train) #.cuda()\n",
" y = torch.Tensor(y_train).unsqueeze(1)\n",
" s = torch.Tensor(x_train_len).view(x_train_len.shape[0], 1)\n",
" y_hat = model(x, s)\n",
" loss = F.binary_cross_entropy_with_logits(y_hat, y)\n",
" optimizer.zero_grad()\n",
" loss.backward()\n",
" optimizer.step()\n",
" val_loss, val_accuracy = val_metrics(model)\n",
" print(\"train_loss %.3f val_loss %.3f val_accuracy %.3f\" % (loss.item(), val_loss, val_accuracy))"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"train_loss 0.689 val_loss 0.651 val_accuracy 0.582\n",
"train_loss 0.639 val_loss 0.559 val_accuracy 0.766\n",
"train_loss 0.544 val_loss 0.467 val_accuracy 0.825\n",
"train_loss 0.440 val_loss 0.375 val_accuracy 0.866\n",
"train_loss 0.337 val_loss 0.321 val_accuracy 0.867\n",
"train_loss 0.270 val_loss 0.274 val_accuracy 0.893\n",
"train_loss 0.213 val_loss 0.258 val_accuracy 0.900\n",
"train_loss 0.183 val_loss 0.253 val_accuracy 0.902\n",
"train_loss 0.160 val_loss 0.250 val_accuracy 0.909\n",
"train_loss 0.135 val_loss 0.260 val_accuracy 0.905\n"
]
}
],
"source": [
"train_epocs(model, epochs=10, lr=0.1)"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"train_loss 0.120 val_loss 0.257 val_accuracy 0.907\n",
"train_loss 0.115 val_loss 0.257 val_accuracy 0.909\n",
"train_loss 0.113 val_loss 0.256 val_accuracy 0.907\n",
"train_loss 0.110 val_loss 0.256 val_accuracy 0.908\n",
"train_loss 0.107 val_loss 0.255 val_accuracy 0.908\n",
"train_loss 0.103 val_loss 0.255 val_accuracy 0.907\n",
"train_loss 0.100 val_loss 0.255 val_accuracy 0.906\n",
"train_loss 0.098 val_loss 0.256 val_accuracy 0.908\n",
"train_loss 0.095 val_loss 0.257 val_accuracy 0.906\n",
"train_loss 0.092 val_loss 0.257 val_accuracy 0.906\n"
]
}
],
"source": [
"train_epocs(model, epochs=10, lr=0.01)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Data loaders for SGD"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Nearly all of deep learning is powered by one very important algorithm: **stochastic gradient descent (SGD)**. SGD can be seeing as an approximation of **gradient descent** (GD). In GD you have to run through *all* the samples in your training set to do a single itaration. In SGD you use *only one* or *a subset* of training samples to do the update for a parameter in a particular iteration. The subset use in every iteration is called a **batch** or **minibatch**."
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {},
"outputs": [],
"source": [
"from torch.utils.data import Dataset, DataLoader"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Next we are going to create a data loader. The data loader provides the following features:\n",
"* Batching the data\n",
"* Shuffling the data\n",
"* Load the data in parallel using multiprocessing workers."
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [],
"source": [
"def encode_sentence2(s, N=40):\n",
" enc = np.zeros(N, dtype=np.int32)\n",
" enc1 = np.array([vocab2index.get(w, vocab2index[\"UNK\"]) for w in s.split()])\n",
" l = min(N, len(enc1))\n",
" enc[:l] = enc1[:l]\n",
" return enc, l"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(array([11, 3, 6, 7, 2, 12, 9, 7, 10, 4, 5, 8, 0, 0, 0, 0, 0,\n",
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
" 0, 0, 0, 0, 0, 0], dtype=int32), 12)"
]
},
"execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"encode_sentence2(X_train[0])"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {},
"outputs": [],
"source": [
"class SubjectivityDataset(Dataset):\n",
" def __init__(self, X, y):\n",
" self.x = X\n",
" self.y = y\n",
" \n",
" def __len__(self):\n",
" return len(self.y)\n",
" \n",
" def __getitem__(self, idx):\n",
" x = self.x[idx]\n",
" x, s = encode_sentence2(x)\n",
" return x, self.y[idx], s\n",
" \n",
"sub_dataset_train = SubjectivityDataset(X_train, y_train)"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {},
"outputs": [],
"source": [
"train_loader = DataLoader(sub_dataset_train, batch_size=5, shuffle=True)\n",
"x, y, s = next(iter(train_loader))"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(tensor([[ 243, 2146, 1, 384, 57, 1, 57, 1, 1,\n",
" 37, 559, 1, 1, 2632, 1, 42, 24, 15,\n",
" 645, 3014, 2936, 88, 1, 37, 1, 2632, 2029,\n",
" 1, 80, 1, 23, 0, 0, 0, 0, 0,\n",
" 0, 0, 0, 0],\n",
" [ 147, 15, 1075, 1910, 362, 42, 3155, 125, 588,\n",
" 32, 588, 63, 40, 41, 1479, 57, 2537, 24,\n",
" 15, 1, 57, 1725, 152, 40, 233, 23, 0,\n",
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
" 0, 0, 0, 0],\n",
" [ 15, 1873, 24, 119, 29, 2288, 477, 1575, 24,\n",
" 1645, 42, 24, 15, 127, 635, 436, 147, 173,\n",
" 128, 1551, 129, 436, 72, 704, 1, 42, 977,\n",
" 24, 2144, 42, 29, 738, 1, 434, 104, 23,\n",
" 0, 0, 0, 0],\n",
" [ 1, 476, 29, 661, 91, 3319, 42, 24, 1,\n",
" 476, 29, 661, 91, 3320, 23, 0, 0, 0,\n",
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
" 0, 0, 0, 0],\n",
" [ 261, 15, 3115, 354, 1298, 42, 243, 148, 199,\n",
" 1013, 60, 24, 60, 24, 60, 24, 60, 0,\n",
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
" 0, 0, 0, 0]], dtype=torch.int32),\n",
" tensor([ 1., 1., 0., 0., 0.], dtype=torch.float64),\n",
" tensor([ 31, 26, 36, 15, 17]))"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x, y, s"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {},
"outputs": [],
"source": [
"model = CBOW(vocab_size=V, emb_size=50)"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [],
"source": [
"train_loader = DataLoader(sub_dataset_train, batch_size=500, shuffle=True)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def train_epocs(model, epochs=10, lr=0.01):\n",
" optimizer = torch.optim.Adam(model.parameters(), lr=lr)\n",
" for i in range(epochs):\n",
" total_loss = 0\n",
" total = 0\n",
" model.train()\n",
" for x, y, s in train_loader:\n",
" x = x.type(torch.LongTensor) #.cuda()\n",
" y = y.type(torch.FloatTensor).unsqueeze(1)\n",
" s = s.type(torch.Tensor).view(s.shape[0], 1)\n",
" y_hat = model(x, s)\n",
" loss = F.binary_cross_entropy_with_logits(y_hat, y)\n",
" optimizer.zero_grad()\n",
" loss.backward()\n",
" optimizer.step()\n",
" total_loss += x.size(0)*loss.item()\n",
" total += x.size(0)\n",
" train_loss\n",
" val_loss, val_accuracy = val_metrics(model)\n",
" \n",
" print(\"train_loss %.3f val_loss %.3f val_accuracy %.3f\" % (loss.item(), val_loss, val_accuracy))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"train_epocs(model, epochs=10)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.6"
},
"nav_menu": {},
"toc": {
"nav_menu": {
"height": "116px",
"width": "251px"
},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"toc_cell": true,
"toc_position": {},
"toc_section_display": "block",
"toc_window_display": false
},
"widgets": {
"state": {},
"version": "1.1.2"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
================================================
FILE: collaborative-filtering-nn.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Collaborative Filtering with Neural Networks"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this notebook we will write a matrix factorization model in pytorch to solve a recommendation problem. Then we will write a more general neural model for the same problem."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The MovieLens dataset (ml-latest-small) describes 5-star rating and free-text tagging activity from MovieLens, a movie recommendation service. It contains 100004 ratings and 1296 tag applications across 9125 movies. https://grouplens.org/datasets/movielens/. To get the data:\n",
"\n",
"`wget http://files.grouplens.org/datasets/movielens/ml-latest-small.zip`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## MovieLens dataset"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from pathlib import Path\n",
"import pandas as pd\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[PosixPath('/data2/yinterian/ml-latest-small/ratings.csv'),\n",
" PosixPath('/data2/yinterian/ml-latest-small/tags.csv'),\n",
" PosixPath('/data2/yinterian/ml-latest-small/tiny_training2.csv'),\n",
" PosixPath('/data2/yinterian/ml-latest-small/links.csv'),\n",
" PosixPath('/data2/yinterian/ml-latest-small/tiny_val2.csv'),\n",
" PosixPath('/data2/yinterian/ml-latest-small/README.txt'),\n",
" PosixPath('/data2/yinterian/ml-latest-small/movies.csv')]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"PATH = Path(\"/Users/yinterian/teaching/deeplearning/data/ml-latest-small/\")\n",
"PATH = Path(\"/data2/yinterian/ml-latest-small/\")\n",
"list(PATH.iterdir())"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"userId,movieId,rating,timestamp\r",
"\r\n",
"1,31,2.5,1260759144\r",
"\r\n",
"1,1029,3.0,1260759179\r",
"\r\n",
"1,1061,3.0,1260759182\r",
"\r\n",
"1,1129,2.0,1260759185\r",
"\r\n",
"1,1172,4.0,1260759205\r",
"\r\n",
"1,1263,2.0,1260759151\r",
"\r\n",
"1,1287,2.0,1260759187\r",
"\r\n",
"1,1293,2.0,1260759148\r",
"\r\n",
"1,1339,3.5,1260759125\r",
"\r\n"
]
}
],
"source": [
"! head $PATH/ratings.csv"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"data = pd.read_csv(PATH/\"ratings.csv\")"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>userId</th>\n",
" <th>movieId</th>\n",
" <th>rating</th>\n",
" <th>timestamp</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>31</td>\n",
" <td>2.5</td>\n",
" <td>1260759144</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>1029</td>\n",
" <td>3.0</td>\n",
" <td>1260759179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" <td>1061</td>\n",
" <td>3.0</td>\n",
" <td>1260759182</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1</td>\n",
" <td>1129</td>\n",
" <td>2.0</td>\n",
" <td>1260759185</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1</td>\n",
" <td>1172</td>\n",
" <td>4.0</td>\n",
" <td>1260759205</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"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"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Encoding data\n",
"We enconde the data to have contiguous ids for users and movies. You can think about this as a categorical encoding of our two categorical variables userId and movieId."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"# split train and validation before encoding\n",
"np.random.seed(3)\n",
"msk = np.random.rand(len(data)) < 0.8\n",
"train = data[msk].copy()\n",
"val = data[~msk].copy()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"# here is a handy function modified from fast.ai\n",
"def proc_col(col, train_col=None):\n",
" \"\"\"Encodes a pandas column with continuous ids. \n",
" \"\"\"\n",
" if train_col is not None:\n",
" uniq = train_col.unique()\n",
" else:\n",
" uniq = col.unique()\n",
" name2idx = {o:i for i,o in enumerate(uniq)}\n",
" return name2idx, np.array([name2idx.get(x, -1) for x in col]), len(uniq)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"def encode_data(df, train=None):\n",
" \"\"\" Encodes rating data with continous user and movie ids. \n",
" If train is provided, encodes df with the same encoding as train.\n",
" \"\"\"\n",
" df = df.copy()\n",
" for col_name in [\"userId\", \"movieId\"]:\n",
" train_col = None\n",
" if train is not None:\n",
" train_col = train[col_name]\n",
" _,col,_ = proc_col(df[col_name], train_col)\n",
" df[col_name] = col\n",
" df = df[df[col_name] >= 0]\n",
" return df"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" userId movieId rating\n",
"0 11 1 4\n",
"1 11 23 5\n",
"2 2 23 5\n",
"3 2 4 3\n",
"4 31 1 4\n",
"5 31 23 4\n",
"6 4 1 5\n",
"7 4 3 2\n",
"8 52 1 1\n",
"9 52 3 4\n",
"10 61 3 5\n",
"11 7 23 1\n",
"12 7 3 3\n",
" userId movieId rating\n",
"0 0 0 4\n",
"1 0 1 5\n",
"2 1 1 5\n",
"3 1 2 3\n",
"4 2 0 4\n",
"5 2 1 4\n",
"6 3 0 5\n",
"7 3 3 2\n",
"8 4 0 1\n",
"9 4 3 4\n",
"10 5 3 5\n",
"11 6 1 1\n",
"12 6 3 3\n"
]
}
],
"source": [
"# to check my new implementation\n",
"LOCAL_PATH = Path(\"images/\")\n",
"df_t = pd.read_csv(LOCAL_PATH/\"tiny_training2.csv\")\n",
"df_v = pd.read_csv(LOCAL_PATH/\"tiny_val2.csv\")\n",
"print(df_t)\n",
"df_t_e = encode_data(df_t)\n",
"df_v_e = encode_data(df_v, df_t)\n",
"df_v_e\n",
"print(df_t_e)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"# encoding the train and validation data\n",
"df_train = encode_data(train)\n",
"df_val = encode_data(val, train)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Embedding layer"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"import torch\n",
"import torch.nn as nn\n",
"import torch.nn.functional as F"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"# an Embedding module containing 10 user or item embedding size 3\n",
"# embedding will be initialized at random\n",
"embed = nn.Embedding(10, 3)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"tensor([[[-0.1301, 0.0691, -1.1678],\n",
" [-0.9865, 0.4514, -1.4770],\n",
" [-1.7121, 0.0701, 0.0481],\n",
" [ 1.4485, 0.1340, 0.0099],\n",
" [-1.4074, -0.8650, -0.1255],\n",
" [-0.1301, 0.0691, -1.1678]]])"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# given a list of ids we can \"look up\" the embedding corresponing to each id\n",
"a = torch.LongTensor([[1,2,0,4,5,1]])\n",
"embed(a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Matrix factorization model"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"class MF(nn.Module):\n",
" def __init__(self, num_users, num_items, emb_size=100):\n",
" super(MF, self).__init__()\n",
" self.user_emb = nn.Embedding(num_users, emb_size)\n",
" self.item_emb = nn.Embedding(num_items, emb_size)\n",
" self.user_emb.weight.data.uniform_(0, 0.05)\n",
" self.item_emb.weight.data.uniform_(0, 0.05)\n",
" \n",
" def forward(self, u, v):\n",
" u = self.user_emb(u)\n",
" v = self.item_emb(v)\n",
" return (u*v).sum(1) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Debugging MF model"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>userId</th>\n",
" <th>movieId</th>\n",
" <th>rating</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>4</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>4</td>\n",
" <td>3</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>5</td>\n",
" <td>3</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>6</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>6</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" userId movieId rating\n",
"0 0 0 4\n",
"1 0 1 5\n",
"2 1 1 5\n",
"3 1 2 3\n",
"4 2 0 4\n",
"5 2 1 4\n",
"6 3 0 5\n",
"7 3 3 2\n",
"8 4 0 1\n",
"9 4 3 4\n",
"10 5 3 5\n",
"11 6 1 1\n",
"12 6 3 3"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_t_e"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"num_users = 7\n",
"num_items = 4\n",
"emb_size = 3\n",
"\n",
"user_emb = nn.Embedding(num_users, emb_size)\n",
"item_emb = nn.Embedding(num_items, emb_size)\n",
"users = torch.LongTensor(df_t_e.userId.values)\n",
"items = torch.LongTensor(df_t_e.movieId.values)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"U = user_emb(users)\n",
"V = item_emb(items)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"tensor([[ 0.1547, 0.2277, 0.2442],\n",
" [ 0.1547, 0.2277, 0.2442],\n",
" [ 0.6601, 0.8225, -1.2139],\n",
" [ 0.6601, 0.8225, -1.2139],\n",
" [ 0.1672, -1.2177, 0.1403],\n",
" [ 0.1672, -1.2177, 0.1403],\n",
" [-1.1907, -1.2933, -0.5506],\n",
" [-1.1907, -1.2933, -0.5506],\n",
" [ 0.1938, -0.0683, -0.8493],\n",
" [ 0.1938, -0.0683, -0.8493],\n",
" [ 0.8506, -1.1564, 1.1165],\n",
" [ 0.8639, -2.5148, -0.8391],\n",
" [ 0.8639, -2.5148, -0.8391]])"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"tensor([[-0.1766, 0.2957, 0.4409],\n",
" [ 0.1205, 0.1733, 0.1165],\n",
" [ 0.5143, 0.6258, -0.5793],\n",
" [-0.5603, 0.3582, -0.5370],\n",
" [-0.1909, -1.5812, 0.2533],\n",
" [ 0.1303, -0.9266, 0.0670],\n",
" [ 1.3594, -1.6793, -0.9940],\n",
" [-0.2324, 1.4822, 0.5151],\n",
" [-0.2212, -0.0887, -1.5335],\n",
" [ 0.0378, 0.0783, 0.7947],\n",
" [ 0.1660, 1.3253, -1.0447],\n",
" [ 0.6730, -1.9135, -0.4004],\n",
" [ 0.1686, 2.8820, 0.7851]])"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# element wise multiplication\n",
"U*V "
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"tensor([ 0.5600, 0.4103, 0.5608, -0.7391, -1.5187, -0.7294, -1.3139,\n",
" 1.7649, -1.8434, 0.9108, 0.4466, -1.6409, 3.8357])"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# what we want is a dot product per row\n",
"(U*V).sum(1) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Training MF model"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"671 8442\n"
]
}
],
"source": [
"num_users = len(df_train.userId.unique())\n",
"num_items = len(df_train.movieId.unique())\n",
"print(num_users, num_items) "
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"model = MF(num_users, num_items, emb_size=100) # .cuda() if you have a GPU"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"def train_epocs(model, epochs=10, lr=0.01, wd=0.0, unsqueeze=False):\n",
" optimizer = torch.optim.Adam(model.parameters(), lr=lr, weight_decay=wd)\n",
" model.train()\n",
" for i in range(epochs):\n",
" users = torch.LongTensor(df_train.userId.values) # .cuda()\n",
" items = torch.LongTensor(df_train.movieId.values) #.cuda()\n",
" ratings = torch.FloatTensor(df_train.rating.values) #.cuda()\n",
" if unsqueeze:\n",
" ratings = ratings.unsqueeze(1)\n",
" y_hat = model(users, items)\n",
" loss = F.mse_loss(y_hat, ratings)\n",
" optimizer.zero_grad()\n",
" loss.backward()\n",
" optimizer.step()\n",
" print(loss.item()) \n",
" test_loss(model, unsqueeze)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"torch.Size([79799])\n",
"torch.Size([79799, 1])\n"
]
}
],
"source": [
"# Here is what unsqueeze does\n",
"ratings = torch.FloatTensor(df_train.rating.values)\n",
"print(ratings.shape)\n",
"ratings = ratings.unsqueeze(1) # .cuda()\n",
"print(ratings.shape)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"def test_loss(model, unsqueeze=False):\n",
" model.eval()\n",
" users = torch.LongTensor(df_val.userId.values) #.cuda()\n",
" items = torch.LongTensor(df_val.movieId.values) #.cuda()\n",
" ratings = torch.FloatTensor(df_val.rating.values) #.cuda()\n",
" if unsqueeze:\n",
" ratings = ratings.unsqueeze(1)\n",
" y_hat = model(users, items)\n",
" loss = F.mse_loss(y_hat, ratings)\n",
" print(\"test loss %.3f \" % loss.item())"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"13.23068904876709\n",
"5.119534015655518\n",
"2.3902299404144287\n",
"3.441521406173706\n",
"0.9096018671989441\n",
"1.8109439611434937\n",
"2.749631643295288\n",
"2.278921604156494\n",
"1.1593214273452759\n",
"0.925656795501709\n",
"test loss 1.947 \n"
]
}
],
"source": [
"train_epocs(model, epochs=10, lr=0.1)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.7027523517608643\n",
"1.0512956380844116\n",
"0.7498359680175781\n",
"0.6950282454490662\n",
"0.7596880197525024\n",
"0.8397833108901978\n",
"0.8818210363388062\n",
"0.8753886818885803\n",
"0.8334189653396606\n",
"0.7767009735107422\n",
"0.7246581315994263\n",
"0.6901594400405884\n",
"0.6771144866943359\n",
"0.6810137033462524\n",
"0.69219970703125\n",
"test loss 0.894 \n"
]
}
],
"source": [
"train_epocs(model, epochs=15, lr=0.01)"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.7007282376289368\n",
"0.6625022888183594\n",
"0.6684340834617615\n",
"0.6455244421958923\n",
"0.6380830407142639\n",
"0.6450700759887695\n",
"0.6408411264419556\n",
"0.6256920099258423\n",
"0.6144804358482361\n",
"0.6132143139839172\n",
"0.6140048503875732\n",
"0.6083489060401917\n",
"0.5969548225402832\n",
"0.5860226154327393\n",
"0.5791704058647156\n",
"test loss 0.822 \n"
]
}
],
"source": [
"train_epocs(model, epochs=15, lr=0.01)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## MF with bias"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [],
"source": [
"class MF_bias(nn.Module):\n",
" def __init__(self, num_users, num_items, emb_size=100):\n",
" super(MF_bias, self).__init__()\n",
" self.user_emb = nn.Embedding(num_users, emb_size)\n",
" self.user_bias = nn.Embedding(num_users, 1)\n",
" self.item_emb = nn.Embedding(num_items, emb_size)\n",
" self.item_bias = nn.Embedding(num_items, 1)\n",
" self.user_emb.weight.data.uniform_(0,0.05)\n",
" self.item_emb.weight.data.uniform_(0,0.05)\n",
" self.user_bias.weight.data.uniform_(-0.01,0.01)\n",
" self.item_bias.weight.data.uniform_(-0.01,0.01)\n",
" \n",
" def forward(self, u, v):\n",
" U = self.user_emb(u)\n",
" V = self.item_emb(v)\n",
" b_u = self.user_bias(u).squeeze()\n",
" b_v = self.item_bias(v).squeeze()\n",
" return (U*V).sum(1) + b_u + b_v"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [],
"source": [
"model = MF_bias(num_users, num_items, emb_size=100) #.cuda()"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"13.233644485473633\n",
"9.459980964660645\n",
"4.618295669555664\n",
"1.2266862392425537\n",
"2.4537320137023926\n",
"3.888521432876587\n",
"2.6157896518707275\n",
"1.1573508977890015\n",
"0.8204843997955322\n",
"1.3100122213363647\n",
"test loss 2.126 \n"
]
}
],
"source": [
"train_epocs(model, epochs=10, lr=0.05, wd=1e-5)"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.9130752086639404\n",
"1.3447301387786865\n",
"0.9572998285293579\n",
"0.7714419364929199\n",
"0.752704381942749\n",
"0.8091325759887695\n",
"0.8543495535850525\n",
"0.8524782657623291\n",
"0.8114585876464844\n",
"0.7577651739120483\n",
"test loss 0.851 \n"
]
}
],
"source": [
"train_epocs(model, epochs=10, lr=0.01, wd=1e-5)"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.7163214087486267\n",
"0.7023102045059204\n",
"0.6904919147491455\n",
"0.6807348728179932\n",
"0.6728458404541016\n",
"0.6666097044944763\n",
"0.6618107557296753\n",
"0.6582220792770386\n",
"0.6556380391120911\n",
"0.6538312435150146\n",
"test loss 0.805 \n"
]
}
],
"source": [
"train_epocs(model, epochs=10, lr=0.001, wd=1e-5)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that these models are susceptible to weight initialization, optimization algorithm and regularization."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Neural Network Model"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {},
"outputs": [],
"source": [
"# Note here there is no matrix multiplication, we could potentially make the embeddings of different sizes.\n",
"# Here we could get better results by keep playing with regularization.\n",
" \n",
"class CollabFNet(nn.Module):\n",
" def __init__(self, num_users, num_items, emb_size=100, n_hidden=10):\n",
" super(CollabFNet, self).__init__()\n",
" self.user_emb = nn.Embedding(num_users, emb_size)\n",
" self.item_emb = nn.Embedding(num_items, emb_size)\n",
" self.lin1 = nn.Linear(emb_size*2, n_hidden)\n",
" self.lin2 = nn.Linear(n_hidden, 1)\n",
" self.drop1 = nn.Dropout(0.1)\n",
" \n",
" def forward(self, u, v):\n",
" U = self.user_emb(u)\n",
" V = self.item_emb(v)\n",
" x = F.relu(torch.cat([U, V], dim=1))\n",
" x = self.drop1(x)\n",
" x = F.relu(self.lin1(x))\n",
" x = self.lin2(x)\n",
" return x"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {},
"outputs": [],
"source": [
"model = CollabFNet(num_users, num_items, emb_size=100) #.cuda()"
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"13.101761817932129\n",
"1.957230806350708\n",
"1.2605514526367188\n",
"1.3381402492523193\n",
"1.061022162437439\n",
"1.1385098695755005\n",
"0.9165319800376892\n",
"0.9622549414634705\n",
"0.8723138570785522\n",
"0.8084518909454346\n",
"0.8500765562057495\n",
"0.7535637617111206\n",
"0.791947603225708\n",
"0.7653028964996338\n",
"0.7301635146141052\n",
"test loss 0.869 \n"
]
}
],
"source": [
"train_epocs(model, epochs=15, lr=0.05, wd=1e-6, unsqueeze=True) "
]
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.7691234350204468\n",
"0.9072751402854919\n",
"0.7757670879364014\n",
"0.7180655598640442\n",
"0.7918605208396912\n",
"0.7724899053573608\n",
"0.7119362950325012\n",
"0.7106000185012817\n",
"0.7403213977813721\n",
"0.7438958883285522\n",
"test loss 0.816 \n"
]
}
],
"source": [
"train_epocs(model, epochs=10, lr=0.01, wd=1e-6, unsqueeze=True)"
]
},
{
"cell_type": "code",
"execution_count": 80,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.7163267731666565\n",
"0.7032808065414429\n",
"0.695513904094696\n",
"0.6967512369155884\n",
"0.6998187303543091\n",
"0.700666606426239\n",
"0.7004959583282471\n",
"0.6982167959213257\n",
"0.6955875158309937\n",
"0.694402813911438\n",
"test loss 0.796 \n"
]
}
],
"source": [
"train_epocs(model, epochs=10, lr=0.001, wd=1e-6, unsqueeze=True)"
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.6919353008270264\n",
"0.6934647560119629\n",
"0.6922585368156433\n",
"0.6942275762557983\n",
"0.6926798224449158\n",
"0.6916202902793884\n",
"0.6911264061927795\n",
"0.6923496127128601\n",
"0.6922929286956787\n",
"0.6904215812683105\n",
"test loss 0.795 \n"
]
}
],
"source": [
"train_epocs(model, epochs=10, lr=0.001, wd=1e-6, unsqueeze=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# References\n",
"* This notebook is based on [lesson 5 of Jeremy Howard's Deep Learning Course](https://github.com/fastai/fastai/blob/master/courses/dl1/lesson5-movielens.ipynb)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.5"
},
"toc": {
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"toc_cell": false,
"toc_position": {},
"toc_section_display": "block",
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}
================================================
FILE: environment.yml
================================================
name: pytorch
channels:
- conda-forge
- pytorch
dependencies:
- python==3.6
- ipython
- jupyter
- pytorch
- torchvision
- numpy
- matplotlib
- pandas
- opencv
- spacy
================================================
FILE: image-caption-tutorial.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Image Caption Tutorial"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from pathlib import Path\n",
"import pandas as pd\n",
"import cv2\n",
"import os\n",
"import numpy as np\n",
"import random\n",
"import matplotlib.pyplot as plt\n",
"import spacy\n",
"import string\n",
"import re\n",
"from spacy.symbols import ORTH\n",
"from collections import Counter\n",
"\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import torch\n",
"import torch.nn as nn\n",
"import torchvision.models as models\n",
"from torch.nn.utils.rnn import pack_padded_sequence"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Image Cpation is the task to automatically describe the content of an image. This tutorial explains the Neural Image Caption model from [Vinyals et all 2015](https://www.cv-foundation.org/openaccess/content_cvpr_2015/papers/Vinyals_Show_and_Tell_2015_CVPR_paper.pdf). In this model a pre-trained CNN is used as an image encoder. A linear layer is used to connect the CNN output to the input to an RNN that\n",
"generates the output sentence. (See figure below)\n",
"\n",
"This tutorial is based on the code from [here](https://github.com/yunjey/pytorch-tutorial/tree/master/tutorials/03-advanced/image_captioning). "
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
gitextract_84qhok83/ ├── README.md ├── cbow.ipynb ├── collaborative-filtering-nn.ipynb ├── environment.yml ├── image-caption-tutorial.ipynb ├── images/ │ ├── tiny_training2.csv │ └── tiny_val2.csv └── intro-to-pytoch.ipynb
Condensed preview — 8 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,036K chars).
[
{
"path": "README.md",
"chars": 80,
"preview": "# pytorch-tutorials\n\nHere are a few basic deep learning tutorial using Pytorch.\n"
},
{
"path": "cbow.ipynb",
"chars": 36940,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"toc\": true\n },\n \"source\": [\n \"<h1>Table of Co"
},
{
"path": "collaborative-filtering-nn.ipynb",
"chars": 31055,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# Collaborative Filtering with Neur"
},
{
"path": "environment.yml",
"chars": 190,
"preview": "name: pytorch\nchannels:\n - conda-forge\n - pytorch\ndependencies:\n - python==3.6\n - ipython\n - jupyter\n - pytorch\n "
},
{
"path": "image-caption-tutorial.ipynb",
"chars": 2827304,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# Image Caption Tutorial\"\n ]\n },"
},
{
"path": "images/tiny_training2.csv",
"chars": 111,
"preview": "userId,movieId,rating\n11,1,4\n11,23,5\n2,23,5\n2,4,3\n31,1,4\n31,23,4\n4,1,5\n4,3,2\n52,1,1\n52,3,4\n61,3,5\n7,23,1\n7,3,3\n"
},
{
"path": "images/tiny_val2.csv",
"chars": 41,
"preview": "userId,movieId,rating\n2,1,5\n4,23,5\n4,2,3\n"
},
{
"path": "intro-to-pytoch.ipynb",
"chars": 120988,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"toc\": true\n },\n \"source\": [\n \"<h1>Table of Co"
}
]
About this extraction
This page contains the full source code of the yanneta/pytorch-tutorials GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 8 files (2.9 MB), approximately 754.6k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.