diff --git "a/Product_Recommendation.ipynb" "b/Product_Recommendation.ipynb" new file mode 100644--- /dev/null +++ "b/Product_Recommendation.ipynb" @@ -0,0 +1,2935 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "gWOhyw_oexZs" + }, + "source": [ + "#Import libraries" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "NZ5Re0nV7dRw", + "outputId": "8792840e-3748-4235-c22c-f32c5f30b178" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: pandas in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (2.1.4)\n", + "Requirement already satisfied: torch in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (2.2.1+cu121)\n", + "Requirement already satisfied: transformers in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (4.46.3)\n", + "Requirement already satisfied: datasets in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (3.1.0)\n", + "Requirement already satisfied: scikit-learn in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (1.3.2)\n", + "Requirement already satisfied: numpy<2,>=1.22.4 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from pandas) (1.26.4)\n", + "Requirement already satisfied: python-dateutil>=2.8.2 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from pandas) (2.9.0.post0)\n", + "Requirement already satisfied: pytz>=2020.1 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from pandas) (2024.2)\n", + "Requirement already satisfied: tzdata>=2022.1 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from pandas) (2024.2)\n", + "Requirement already satisfied: filelock in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (3.16.1)\n", + "Requirement already satisfied: typing-extensions>=4.8.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (4.12.2)\n", + "Requirement already satisfied: sympy in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (1.13.3)\n", + "Requirement already satisfied: networkx in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (3.4.2)\n", + "Requirement already satisfied: jinja2 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (3.1.4)\n", + "Requirement already satisfied: fsspec in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (2024.9.0)\n", + "Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.1.105 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (12.1.105)\n", + "Requirement already satisfied: nvidia-cuda-runtime-cu12==12.1.105 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (12.1.105)\n", + "Requirement already satisfied: nvidia-cuda-cupti-cu12==12.1.105 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (12.1.105)\n", + "Requirement already satisfied: nvidia-cudnn-cu12==8.9.2.26 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (8.9.2.26)\n", + "Requirement already satisfied: nvidia-cublas-cu12==12.1.3.1 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (12.1.3.1)\n", + "Requirement already satisfied: nvidia-cufft-cu12==11.0.2.54 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (11.0.2.54)\n", + "Requirement already satisfied: nvidia-curand-cu12==10.3.2.106 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (10.3.2.106)\n", + "Requirement already satisfied: nvidia-cusolver-cu12==11.4.5.107 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (11.4.5.107)\n", + "Requirement already satisfied: nvidia-cusparse-cu12==12.1.0.106 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (12.1.0.106)\n", + "Requirement already satisfied: nvidia-nccl-cu12==2.19.3 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (2.19.3)\n", + "Requirement already satisfied: nvidia-nvtx-cu12==12.1.105 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (12.1.105)\n", + "Requirement already satisfied: triton==2.2.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (2.2.0)\n", + "Requirement already satisfied: nvidia-nvjitlink-cu12 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from nvidia-cusolver-cu12==11.4.5.107->torch) (12.6.77)\n", + "Requirement already satisfied: huggingface-hub<1.0,>=0.23.2 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from transformers) (0.26.2)\n", + "Requirement already satisfied: packaging>=20.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from transformers) (24.1)\n", + "Requirement already satisfied: pyyaml>=5.1 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from transformers) (6.0.2)\n", + "Requirement already satisfied: regex!=2019.12.17 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from transformers) (2024.11.6)\n", + "Requirement already satisfied: requests in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from transformers) (2.32.3)\n", + "Requirement already satisfied: tokenizers<0.21,>=0.20 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from transformers) (0.20.3)\n", + "Requirement already satisfied: safetensors>=0.4.1 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from transformers) (0.4.5)\n", + "Requirement already satisfied: tqdm>=4.27 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from transformers) (4.66.6)\n", + "Requirement already satisfied: pyarrow>=15.0.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from datasets) (18.0.0)\n", + "Requirement already satisfied: dill<0.3.9,>=0.3.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from datasets) (0.3.8)\n", + "Requirement already satisfied: xxhash in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from datasets) (3.5.0)\n", + "Requirement already satisfied: multiprocess<0.70.17 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from datasets) (0.70.16)\n", + "Requirement already satisfied: aiohttp in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from datasets) (3.10.10)\n", + "Requirement already satisfied: scipy>=1.5.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from scikit-learn) (1.11.4)\n", + "Requirement already satisfied: joblib>=1.1.1 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from scikit-learn) (1.4.2)\n", + "Requirement already satisfied: threadpoolctl>=2.0.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from scikit-learn) (3.5.0)\n", + "Requirement already satisfied: aiohappyeyeballs>=2.3.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from aiohttp->datasets) (2.4.3)\n", + "Requirement already satisfied: aiosignal>=1.1.2 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from aiohttp->datasets) (1.3.1)\n", + "Requirement already satisfied: attrs>=17.3.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from aiohttp->datasets) (24.2.0)\n", + "Requirement already satisfied: frozenlist>=1.1.1 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from aiohttp->datasets) (1.5.0)\n", + "Requirement already satisfied: multidict<7.0,>=4.5 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from aiohttp->datasets) (6.1.0)\n", + "Requirement already satisfied: yarl<2.0,>=1.12.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from aiohttp->datasets) (1.17.1)\n", + "Requirement already satisfied: async-timeout<5.0,>=4.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from aiohttp->datasets) (4.0.3)\n", + "Requirement already satisfied: six>=1.5 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from python-dateutil>=2.8.2->pandas) (1.16.0)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from requests->transformers) (3.4.0)\n", + "Requirement already satisfied: idna<4,>=2.5 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from requests->transformers) (3.10)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from requests->transformers) (2.2.3)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from requests->transformers) (2024.8.30)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from jinja2->torch) (2.1.5)\n", + "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from sympy->torch) (1.3.0)\n", + "Requirement already satisfied: propcache>=0.2.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from yarl<2.0,>=1.12.0->aiohttp->datasets) (0.2.0)\n" + ] + } + ], + "source": [ + "!pip install pandas torch transformers datasets scikit-learn" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "id": "G4RV9ww_Pemi" + }, + "outputs": [], + "source": [ + "import torch" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WAyUe54re24k" + }, + "source": [ + "#Set device" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "id": "petY13o9774L" + }, + "outputs": [], + "source": [ + "if torch.cuda.is_available():\n", + " device = torch.device('cuda') # CUDA GPU\n", + "elif torch.backends.mps.is_available():\n", + " device = torch.device('mps') #Apple GPU\n", + "else:\n", + " device = torch.device(\"cpu\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Jd2SZa5e7_rG", + "outputId": "d04fd403-cd25-4469-d302-4daa6658b81a" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Using device: cuda\n", + "Device name: Tesla T4\n", + "Device properties: _CudaDeviceProperties(name='Tesla T4', major=7, minor=5, total_memory=15102MB, multi_processor_count=40)\n", + "Memory Usage:\n", + "Allocated: 0.0 GB\n", + "Cached: 0.0 GB\n" + ] + } + ], + "source": [ + "print('Using device:', device)\n", + "#Additional Info when using cuda\n", + "if device.type == 'cuda':\n", + " print(\"Device name: \", torch.cuda.get_device_name(0))\n", + " print(\"Device properties:\", torch.cuda.get_device_properties(0))\n", + " print('Memory Usage:')\n", + " print('Allocated:', round(torch.cuda.memory_allocated(0)/1024**3,1), 'GB')\n", + " print('Cached: ', round(torch.cuda.memory_reserved(0)/1024**3,1), 'GB')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "HaSYSq9HPemk" + }, + "source": [ + "#Load dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "id": "AGDAGOhSPeml" + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from datasets import load_dataset\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 339, + "referenced_widgets": [ + "13c370f93d77445ea5794b0f354cd04e", + "10c291e7ee1044009497428ad8eb232e", + "c526c5490d464f4eb4bd1a0412fffe14", + "047530e6306747f1a6818ced5e806c5b", + "e66c6cabe5804cf6acaac5f88a0c2225", + "4c0d4c4706554029899b149d570e24db", + "25a0a7e6faf540aaaaf97ba94d61f9cd", + "e86856daf1154999b27849d0b6119d5c", + "12ccb53cb4554e99ae9561575fa1e652", + "759171f02a85413aa47d761a114553cc", + "91c4174ad5f64c0a8f3737932845e507", + "a35fd033452b424da691b192cda12ab5", + "cf53e1c535f5485ea90f1f287361fcf3", + "ce4054c277c045188f33f79ff7ce020b", + "e265a132d69a4d71b0ab9144cf50cdca", + "f8c224b0675b4986b77d4423aba3ebd2", + "7044641201cb4aa8ab7408c89493335b", + "382ff2c8d6b5423799f55b3dff24fdbd", + "cd428d816efe4b5e8264f5020556a19b", + "6babda9ba42d48f88dd7b33ae5e29677", + "8a539054378b461e8f7735b8a43224c1", + "48cb37472f7545719eae5d7715ae6dc1", + "b2fdc756f1444775be72429de20afe10", + "938ae969eaf14648ace9d216f2dccaea", + "a925ea13f67348349b9ffeaecba11a68", + "90c463f6b5b644fb8a9744b1b1c8eba1", + "d37e208a2b7741f5a1ccdb6430cf919b", + "023a407aefea4093bed77d0ac0f62366", + "4d083ac1a54d407f8cc790e81da3c79f", + "50492b130ae1498abcd405ccf2eaa7e9", + "2e74bc1187d4482eb9148b6f0ea13878", + "c9e8b9bddae64ce6b1632a29b4b55a49", + "0055483d81184e1c80fa30908cdbc389", + "bf99fbc731394d988d3dd3a41ab6e5ed", + "b4fdd54786cd40fe9e00d0c61c8efdad", + "01078b24cfbc495e800cfdf6521bc71d", + "2b24e6912556456a926d3b25eda36706", + "cc867ad6c1ac4617bc957700f5f35d43", + "20b8009e00bf440fbffdbf051a756bfa", + "4dccb2039e654600a531a464073a12dc", + "d19ea1ff96fd4935aae58bb68197a012", + "d92178ee50314de7bc3fcd5adaf582a0", + "fa28ffeb32c6494a96686ba1ef3fdd63", + "34fa034a64fa438bb9541b0a72af32cc" + ] + }, + "id": "HF5kXWAQPeml", + "outputId": "0a1f1936-1cbd-45ef-ed0d-9eb9d37ca0a5" + }, + "outputs": [], + "source": [ + "review_dataset = load_dataset(\"McAuley-Lab/Amazon-Reviews-2023\",\"raw_review_All_Beauty\")\n", + "\n", + "# User Reviews dataframe (reviews are in the 'train' split)\n", + "reviews_df = pd.DataFrame(review_dataset['full'])" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "id": "NmO_rS_vPemm" + }, + "outputs": [], + "source": [ + "# Map user_id and parent_asin to indices\n", + "user_map = {user: idx for idx, user in enumerate(reviews_df[\"user_id\"].unique())}\n", + "item_map = {asin: idx for idx, asin in enumerate(reviews_df[\"parent_asin\"].unique())}\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 81, + "referenced_widgets": [ + "a30ddd1cb5d942739d1ca129549f2ca3", + "2b604f80e83d4eb4b8082920a35595d5", + "3659bc504c224d0796ee773d0169f0ff", + "7d4b84bb2bcf4b42a90c49f02621c24a", + "ac5019af69dd4e7f9ac6ad92b05b1fab", + "8c90550ff9a94562a0a462c2358da503", + "c28d0b7ffd2145d0b40188e7f3a4c808", + "abd110f79c3e4ceea98abe959a09200f", + "2305c04c50fa490a80dac631cf851915", + "418ec4813c0748849432779be32a59b3", + "adfbcc418766470abe1a32ef454a6d0c", + "9eaa94500a394f7ba809db271c08f764", + "ed57dfc4174d4e279abe100b005bfd03", + "bc2bc311ddce4778967edc023bf31d7a", + "d586027c8193403085a843ea3f336543", + "151e2b29aa69486d81517cde8066b8fe", + "539a058ffe0845e3855c4aab7a309875", + "1c0bc7c01ce84982821cdd6ee995e210", + "3546ec97fa464bceb2dde30931360301", + "9af1562235be4824b97bef461536ee08", + "381342c1445e4a9a88c5d37ac2883be3", + "c67882a144294b4f96cc15ee27f791b3" + ] + }, + "id": "QnLTNgP9XF9R", + "outputId": "40dcff1e-a85a-4997-ec92-add0a6b9b41f" + }, + "outputs": [], + "source": [ + "meta_dataset = load_dataset(\"McAuley-Lab/Amazon-Reviews-2023\",\"raw_meta_All_Beauty\")\n", + "\n", + "# User Reviews dataframe (reviews are in the 'train' split)\n", + "meta_df = pd.DataFrame(meta_dataset['full'])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "vWXbVHqtXdZA" + }, + "source": [ + "#Split data" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "id": "KOBJ8Uw0QaKq" + }, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "id": "gCF_UzZePemm" + }, + "outputs": [], + "source": [ + "reviews_df[\"user_idx\"] = reviews_df[\"user_id\"].map(user_map)\n", + "reviews_df[\"item_idx\"] = reviews_df[\"parent_asin\"].map(item_map)\n", + "\n", + "# Train-test split\n", + "train, test = train_test_split(reviews_df, test_size=0.2, random_state=42)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1-X4qcl8Pemm" + }, + "source": [ + "#NCF model" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "id": "Br9TeXBCPemn" + }, + "outputs": [], + "source": [ + "import torch\n", + "import torch.nn as nn\n", + "import torch.nn.functional as F\n", + "\n", + "class NCF(nn.Module):\n", + " def __init__(self, num_users, num_items, embedding_dim=32, hidden_dims=[64, 32], dropout_rate=0.5):\n", + " super(NCF, self).__init__()\n", + " # Embedding layers\n", + " self.user_embedding = nn.Embedding(num_users, embedding_dim)\n", + " self.item_embedding = nn.Embedding(num_items, embedding_dim)\n", + "\n", + " # Neural layers\n", + " input_dim = embedding_dim * 2\n", + " layers = []\n", + " for hidden_dim in hidden_dims:\n", + " layers.append(nn.Linear(input_dim, hidden_dim))\n", + " layers.append(nn.ReLU())\n", + " input_dim = hidden_dim\n", + " self.mlp = nn.Sequential(*layers)\n", + "\n", + " # Final prediction layer\n", + " self.output = nn.Linear(hidden_dims[-1], 1)\n", + " self.dropout = nn.Dropout(p=dropout_rate)\n", + "\n", + " def forward(self, user_idx, item_idx):\n", + " # Embeddings\n", + " user_emb = self.user_embedding(user_idx)\n", + " item_emb = self.item_embedding(item_idx)\n", + "\n", + " # Concatenate and pass through MLP\n", + " x = torch.cat([user_emb, item_emb], dim=-1)\n", + " x = self.mlp(x)\n", + "\n", + " x = self.dropout(x)\n", + "\n", + " # Prediction\n", + " return torch.sigmoid(self.output(x))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Eoe6mwbUPemn" + }, + "source": [ + "#prepare dataloader" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "id": "jWA7nROFPemn" + }, + "outputs": [], + "source": [ + "from torch.utils.data import Dataset, DataLoader\n", + "\n", + "class ReviewsDataset(Dataset):\n", + " def __init__(self, data):\n", + " self.user_idx = data[\"user_idx\"].values\n", + " self.item_idx = data[\"item_idx\"].values\n", + " self.rating = data[\"rating\"].values\n", + "\n", + " def __len__(self):\n", + " return len(self.rating)\n", + "\n", + " def __getitem__(self, idx):\n", + " return {\n", + " \"user_idx\": torch.tensor(self.user_idx[idx], dtype=torch.long),\n", + " \"item_idx\": torch.tensor(self.item_idx[idx], dtype=torch.long),\n", + " \"rating\": torch.tensor(self.rating[idx], dtype=torch.float),\n", + " }\n", + "\n", + "# Create DataLoaders\n", + "train_dataset = ReviewsDataset(train)\n", + "test_dataset = ReviewsDataset(test)\n", + "\n", + "train_loader = DataLoader(train_dataset, batch_size=256, shuffle=True)\n", + "test_loader = DataLoader(test_dataset, batch_size=256, shuffle=False)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "KxChqWqxPemo" + }, + "source": [ + "#train" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "results = {\"train_loss\": [],\n", + " \"train_acc\": [],\n", + " \"test_loss\": [],\n", + " \"test_acc\": []\n", + " }" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "id": "jPYTsM_BPemo" + }, + "outputs": [], + "source": [ + "def train_model(model, train_loader, test_loader, epochs=10, lr=0.001, lr_decay_step=5, lr_decay_gamma=0.1):\n", + " model.to(\"cuda\") # Move model to GPU\n", + " criterion = nn.MSELoss()\n", + " optimizer = torch.optim.Adam(model.parameters(), lr=lr, weight_decay=0.01)\n", + "\n", + " scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=lr_decay_step, gamma=lr_decay_gamma)\n", + "\n", + " for epoch in range(epochs):\n", + " model.train()\n", + " train_loss = 0\n", + " train_mae = 0\n", + " for batch in train_loader:\n", + " user_idx = batch[\"user_idx\"].to(\"cuda\")\n", + " item_idx = batch[\"item_idx\"].to(\"cuda\")\n", + " ratings = batch[\"rating\"].to(\"cuda\")\n", + "\n", + " optimizer.zero_grad()\n", + " predictions = model(user_idx, item_idx).squeeze()\n", + " loss = criterion(predictions, ratings / 5.0) # Normalize ratings\n", + " loss.backward()\n", + " optimizer.step()\n", + "\n", + " train_loss += loss.item()\n", + " train_mae += torch.abs(predictions - (ratings / 5.0)).sum().item()\n", + "\n", + " avg_train_loss = train_loss / len(train_loader)\n", + " avg_train_mae = train_mae / len(train_loader.dataset)\n", + "\n", + " print(f\"Epoch {epoch+1}, Train Loss: {train_loss / len(train_loader):.4f}, Train MAE: {avg_train_mae:.4f}\")\n", + " results[\"train_loss\"].append(train_loss / len(train_loader))\n", + " results[\"train_acc\"].append(avg_train_mae)\n", + "\n", + " scheduler.step()\n", + "\n", + " evaluate_model(model, test_loader)\n", + "\n", + "def evaluate_model(model, test_loader):\n", + " model.eval()\n", + " test_loss = 0\n", + " test_mae = 0\n", + " with torch.no_grad():\n", + " for batch in test_loader:\n", + " user_idx = batch[\"user_idx\"].to(\"cuda\")\n", + " item_idx = batch[\"item_idx\"].to(\"cuda\")\n", + " ratings = batch[\"rating\"].to(\"cuda\")\n", + "\n", + " predictions = model(user_idx, item_idx).squeeze()\n", + " loss = nn.MSELoss()(predictions, ratings / 5.0)\n", + "\n", + " test_loss += loss.item()\n", + " test_mae += torch.abs(predictions - (ratings / 5.0)).sum().item()\n", + "\n", + " avg_test_loss = test_loss / len(test_loader)\n", + " avg_test_mae = test_mae / len(test_loader.dataset)\n", + "\n", + " print(f\"Test Loss: {test_loss / len(test_loader):.4f}, Test MAE: {avg_test_mae:.4f}\")\n", + " results[\"test_loss\"].append(test_loss / len(test_loader))\n", + " results[\"test_acc\"].append(avg_test_mae)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "fM3_yEuAPemo", + "outputId": "67dfc1e0-b5d3-4488-acae-9b6e0537757c" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1, Train Loss: 0.1007, Train MAE: 0.2854\n", + "Test Loss: 0.0904, Test MAE: 0.2650\n", + "Epoch 2, Train Loss: 0.0918, Train MAE: 0.2655\n", + "Test Loss: 0.0903, Test MAE: 0.2646\n", + "Epoch 3, Train Loss: 0.0913, Train MAE: 0.2648\n", + "Test Loss: 0.0902, Test MAE: 0.2640\n", + "Epoch 4, Train Loss: 0.0909, Train MAE: 0.2642\n", + "Test Loss: 0.0902, Test MAE: 0.2636\n", + "Epoch 5, Train Loss: 0.0906, Train MAE: 0.2636\n", + "Test Loss: 0.0902, Test MAE: 0.2635\n", + "Epoch 6, Train Loss: 0.0905, Train MAE: 0.2635\n", + "Test Loss: 0.0902, Test MAE: 0.2636\n", + "Epoch 7, Train Loss: 0.0905, Train MAE: 0.2636\n", + "Test Loss: 0.0902, Test MAE: 0.2637\n", + "Epoch 8, Train Loss: 0.0905, Train MAE: 0.2636\n", + "Test Loss: 0.0902, Test MAE: 0.2636\n", + "Epoch 9, Train Loss: 0.0904, Train MAE: 0.2636\n", + "Test Loss: 0.0902, Test MAE: 0.2635\n", + "Epoch 10, Train Loss: 0.0904, Train MAE: 0.2634\n", + "Test Loss: 0.0902, Test MAE: 0.2636\n" + ] + } + ], + "source": [ + "num_users = len(user_map)\n", + "num_items = len(item_map)\n", + "\n", + "# Initialize model\n", + "ncf_model = NCF(num_users=num_users, num_items=num_items, embedding_dim=32, hidden_dims=[64, 32])\n", + "\n", + "# Train the model\n", + "train_model(ncf_model, train_loader, test_loader, epochs=10, lr=1e-4)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#Plot" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "# Plot loss curves of a model\n", + "def plot_loss_curves(results):\n", + "\n", + " loss = results[\"train_loss\"]\n", + " test_loss = results[\"test_loss\"]\n", + "\n", + " accuracy = results[\"train_acc\"]\n", + " test_accuracy = results[\"test_acc\"]\n", + "\n", + " epochs = range(len(results[\"train_loss\"]))\n", + "\n", + " plt.figure(figsize=(15, 7))\n", + "\n", + " # Plot loss\n", + " plt.subplot(1, 2, 1)\n", + " plt.plot(epochs, loss, label=\"train_loss\")\n", + " plt.plot(epochs, test_loss, label=\"test_loss\")\n", + " plt.title(\"Loss\")\n", + " plt.xlabel(\"Epochs\")\n", + " plt.legend()\n", + "\n", + " # Plot accuracy\n", + " plt.subplot(1, 2, 2)\n", + " plt.plot(epochs, accuracy, label=\"train_accuracy\")\n", + " plt.plot(epochs, test_accuracy, label=\"test_accuracy\")\n", + " plt.title(\"Accuracy\")\n", + " plt.xlabel(\"Epochs\")\n", + " plt.legend()" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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L75QRkaGFi9erA4dOjgft9xyiyTVedfNU+1Ac+xw+yNfX1+ZzeaTxl5xxRX6+OOP9dhjj+n999/XqlWrnM0GbDZbrec1cuRIffnll0pLS9O+ffv07bffsusM8FA0DABgeGFhYfL399fu3btPem3Xrl0ym82KiYlxPhcaGqrRo0dr9OjRKigo0MCBAzVp0iTdddddzjHt2rXT3//+d/3973/X3r171bNnT82YMUNvvfVWg3wnAAAAd7Vw4UK1aNFCc+bMOem1ZcuWafny5Zo3b57atWun7du3n/Za7dq108aNG1VWViZvb+8ax4SEhEiq7Nz5e7/++utZz/nHH3/Unj179MYbb2jkyJHO53/fcV2SswTImeYtSbfddpuSkpL09ttvq6ioSN7e3rr11lvPek4A3Ac7zwAYnsVi0dChQ/XBBx/owIEDzuezsrK0aNEiXXLJJQoMDJQk/fbbb9Xe27RpU7Vv314lJSWSpOPHj6u4uLjamHbt2ikgIMA5BgAAoLEqKirSsmXLdM011+imm2466TFu3DgdO3ZMK1as0I033qjvv/9ey5cvP+k6drtdUmWX8yNHjujll18+5ZjWrVvLYrHoq6++qvb6K6+8ctbztlgs1a7p+POLL75YbVxYWJgGDhyo+fPn6+DBgzXOx6F58+a68sor9dZbb2nhwoUaNmyYmjdvftZzAuA+2HkGwFDmz5+vlStXnvT8pEmTtGrVKl1yySW677775OXlpf/3//6fSkpKNG3aNOe4Ll26aPDgwerVq5dCQ0O1efNmvfvuuxo3bpwkac+ePRoyZIhuueUWdenSRV5eXlq+fLmysrJ02223Ndj3BAAAcEcrVqzQsWPH9Kc//anG1y+66CKFhYVp4cKFWrRokd59913dfPPNuvPOO9WrVy8dPXpUK1as0Lx58xQfH6+RI0fqzTffVFJSkjZt2qRLL71UhYWFWr16te677z5dd911CgoK0s0336zZs2fLZDKpXbt2+uijj3T48OGznndcXJzatWunRx55RIcOHVJgYKDee++9GhtEvfTSS7rkkkt04YUX6u6771abNm104MABffzxx0pJSak2duTIkbrpppskSZMnTz77HyQAt0J4BsBQ5s6dW+Pzo0aN0tdff63x48drypQpstls6tevn9566y3169fPOe6BBx7QihUr9Pnnn6ukpEStW7fWv/71Lz366KOSpJiYGI0YMUJr1qzR//73P3l5eSkuLk7vvPOObrzxxgb5jgAAAO5q4cKFslqtuuKKK2p83Ww26+qrr9bChQtVUlKir7/+WhMnTtTy5cv1xhtvqEWLFhoyZIizoL/FYtEnn3yiZ599VosWLdJ7772nZs2a6ZJLLlH37t2d1509e7bKyso0b948+fr66pZbbtELL7xwxsL+Dt7e3vrwww/1wAMPOOvaXn/99Ro3bpzi4+OrjY2Pj9e3336rp556SnPnzlVxcbFat27trOn2e9dee61CQkJks9lOGSgCcH8m+x/3lgIAAAAAgPNWXl6uyMhIXXvttfrvf//r6ukAOEfUPAMAAAAAoB68//77ys7OrtaEAIDnYecZAAAAAAB1aOPGjfrhhx80efJkNW/eXFu3bnX1lACcB3aeAQAAAABQh+bOnau//vWvatGihd58801XTwfAeWLnGQAAAAAAAHAK7DwDAAAAAAAAToHwDAAAAAAAADgFL1dPoKHYbDalp6crICBAJpPJ1dMBAAAewm6369ixY4qMjJTZzH1Hd8Q6DwAAnIuzXec1mvAsPT1dMTExrp4GAADwUKmpqYqOjnb1NFAD1nkAAOB8nGmd12jCs4CAAEmVP5DAwEAXzwYAAHiK/Px8xcTEONcScD+s8wAAwLk423VeownPHFv4AwMDWVQBAIBa4zig+2KdBwAAzseZ1nkU7gAAAAAAAABOgfAMAAAAAAAAOAXCMwAAAAAAAOAUGk3NMwAA6kNFRYXKyspcPQ2cB4vFIi8vL2qaAQDgYqyrUNfqap1HeAYAwDkqKChQWlqa7Ha7q6eC8+Tv76+WLVvKx8fH1VMBAKBRYl2F+lIX6zzCMwAAzkFFRYXS0tLk7++vsLAwdi15KLvdrtLSUmVnZ2v//v3q0KGDzGaqWgAA0JBYV6E+1OU6j/AMAIBzUFZWJrvdrrCwMPn5+bl6OjgPfn5+8vb21q+//qrS0lJZrVZXTwkAgEaFdRXqS12t87i1CgDAeeDOqDGw2wwAANdjXYX6UBfrPFaKAAAAAAAAwCkQngEAAAAAAACnQHgGAADOWWxsrGbNmlUn11q3bp1MJpNyc3Pr5HoAAACeoi7XVKh7NAwAAKCRGTx4sHr27FknC7TvvvtOTZo0Of9JAQAAeBjWVI0H4RkAAKjGbreroqJCXl5nXiaEhYU1wIwAAAA8D2uqE0pLS+Xj4+PqaZwzjm0CAFAH7Ha7jpeWu+Rht9vPep6jRo3Sl19+qRdffFEmk0kmk0mvv/66TCaTPv30U/Xq1Uu+vr765ptvtG/fPl133XUKDw9X06ZN1adPH61evbra9f54xMBkMum1117T9ddfL39/f3Xo0EErVqw455/re++9p65du8rX11exsbGaMWNGtddfeeUVdejQQVarVeHh4brpppucr7377rvq3r27/Pz81KxZMyUkJKiwsPCc5wIAABqGJ6yr3HlNVVFRoTFjxqhNmzby8/NTp06d9OKLL540bv78+c51VsuWLTVu3Djna7m5ubrnnnsUHh4uq9Wqbt266aOPPpIkTZo0ST179qx2rVmzZik2Nrbaz2f48OF69tlnFRkZqU6dOkmS/ve//6l3794KCAhQRESE/vznP+vw4cPVrrVjxw5dc801CgwMVEBAgC699FLt27dPX331lby9vZWZmVlt/EMPPaRLL730rH4254qdZwAA1IGisgp1mfCZSz77p2cS5e9zdv9Jf/HFF7Vnzx5169ZNzzzzjKTKBYokPf7445o+fbratm2rkJAQpaam6qqrrtKzzz4rX19fvfnmm7r22mu1e/dutWrV6pSf8fTTT2vatGl64YUXNHv2bN1+++369ddfFRoaWqvvtWXLFt1yyy2aNGmSbr31Vm3YsEH33XefmjVrplGjRmnz5s164IEH9L///U8DBgzQ0aNH9fXXX0uSMjIyNGLECE2bNk3XX3+9jh07pq+//rpWQSMAAHANT1hXufOaymazKTo6WkuXLlWzZs20YcMG3X333WrZsqVuueUWSdLcuXOVlJSkqVOn6sorr1ReXp7Wr1/vfP+VV16pY8eO6a233lK7du30008/yWKxnNXP0GHNmjUKDAzUqlWrnM+VlZVp8uTJ6tSpkw4fPqykpCSNGjVKn3zyiSTp0KFDGjhwoAYPHqwvvvhCgYGBWr9+vcrLyzVw4EC1bdtW//vf//Too486r7dw4UJNmzatVnOrLcIzAAAakaCgIPn4+Mjf318RERGSpF27dkmSnnnmGV1xxRXOsaGhoYqPj3f+ffLkyVq+fLlWrFhR7c7kH40aNUojRoyQJD333HN66aWXtGnTJg0bNqxWc505c6aGDBmip556SpLUsWNH/fTTT3rhhRc0atQoHTx4UE2aNNE111yjgIAAtW7dWhdccIGkyvCsvLxcN9xwg1q3bi1J6t69e60+HwAA4FTceU3l7e2tp59+2vn3Nm3aKDk5We+8844zPPvXv/6lv//973rwwQed4/r06SNJWr16tTZt2qSdO3eqY8eOkqS2bdue+YfyB02aNNFrr71W7bjmnXfe6fxz27Zt9dJLL6lPnz4qKChQ06ZNNWfOHAUFBWnx4sXy9vaWJOccJGnMmDFasGCBMzz78MMPVVxc7Pxe9YXwDACAOuDnbdFPzyS67LPrQu/evav9vaCgQJMmTdLHH3/sDKOKiop08ODB016nR48ezj83adJEgYGBJ23HPxs7d+7UddddV+25iy++WLNmzVJFRYWuuOIKtW7dWm3bttWwYcM0bNgw59GG+Ph4DRkyRN27d1diYqKGDh2qm266SSEhIbWeBwAAaFievq5yhzXVnDlzNH/+fB08eFBFRUUqLS11HrU8fPiw0tPTNWTIkBrfm5KSoujo6Gqh1bno3r37SXXOtmzZokmTJun7779XTk6ObDabJOngwYPq0qWLUlJSdOmllzqDsz8aNWqUnnzySX377be66KKL9Prrr+uWW26p92YLhGcAANQBk8l01kcn3dUfFx2PPPKIVq1apenTp6t9+/by8/PTTTfdpNLS0tNe54+LHZPJ5FwY1aWAgABt3bpV69at0+eff64JEyZo0qRJ+u677xQcHKxVq1Zpw4YN+vzzzzV79mz985//1MaNG9WmTZs6nwsAAKg7nr6ucvWaavHixXrkkUc0Y8YM9e/fXwEBAXrhhRe0ceNGSZKfn99p33+m181m80mlMMrKyk4a98efQ2FhoRITE5WYmKiFCxcqLCxMBw8eVGJiovNncabPbtGiha699lotWLBAbdq00aeffqp169ad9j11gYYBAAA0Mj4+PqqoqDjjuPXr12vUqFG6/vrr1b17d0VEROjAgQP1P8EqnTt3dtbe+P2cOnbs6Ky54eXlpYSEBE2bNk0//PCDDhw4oC+++EJS5QLz4osv1tNPP61t27bJx8dHy5cvb7D5AwAAY3PXNdX69es1YMAA3XfffbrgggvUvn177du3z/l6QECAYmNjtWbNmhrf36NHD6WlpWnPnj01vh4WFqbMzMxqAVpKSsoZ57Vr1y799ttvmjp1qi699FLFxcWdtJOuR48e+vrrr2sM4xzuuusuLVmyRP/5z3/Url07XXzxxWf87PNFeAYAQCMTGxurjRs36sCBAzpy5Mgp72B26NBBy5YtU0pKir7//nv9+c9/rpcdZKfy97//XWvWrNHkyZO1Z88evfHGG3r55Zf1yCOPSJI++ugjvfTSS0pJSdGvv/6qN998UzabTZ06ddLGjRv13HPPafPmzTp48KCWLVum7Oxsde7cucHmDwAAjM1d11QdOnTQ5s2b9dlnn2nPnj166qmn9N1331UbM2nSJM2YMUMvvfSS9u7dq61bt2r27NmSpEGDBmngwIG68cYbtWrVKu3fv1+ffvqpVq5cKUkaPHiwsrOzNW3aNO3bt09z5szRp59+esZ5tWrVSj4+Ppo9e7Z++eUXrVixQpMnT642Zty4ccrPz9dtt92mzZs3a+/evfrf//6n3bt3O8ckJiYqMDBQ//rXvzR69Ojz/XGdFcKzOvLMhz/psunrtOqnLFdPBQCA03rkkUdksVjUpUsX53b5msycOVMhISEaMGCArr32WiUmJurCCy9ssHleeOGFeuedd7R48WJ169ZNEyZM0DPPPKNRo0ZJkoKDg7Vs2TJdfvnl6ty5s+bNm6e3335bXbt2VWBgoL766itdddVV6tixo5588knNmDFDV155ZYPNH8bx0pq9Spj5pRZvOn1tGgBA4+Kua6p77rlHN9xwg2699Vb169dPv/32m+67775qY+644w7NmjVLr7zyirp27aprrrlGe/fudb7+3nvvqU+fPhoxYoS6dOmif/zjH85ddp07d9Yrr7yiOXPmKD4+Xps2bXLe3DydsLAwvf7661q6dKm6dOmiqVOnavr06dXGNGvWTF988YUKCgo0aNAg9erVS6+++mq1I6xms1mjRo1SRUWFRo4ceT4/qrNmsjeSnu35+fkKCgpSXl6eAgMD6/z697+9TR9+n64nrorT3QPb1fn1AQDupbi4WPv371ebNm1ktVpdPR2cp9P9Put7DYHzV9+/o6c/3KEF6w/onoFtNf4qdi8CQF1jXYXaGjNmjLKzs7VixYozjq2LdZ7nVuBzMzEhlUXtUo8WuXgmAAAAqEtRwZXrvLRc1nkAALhSXl6efvzxRy1atOisgrO6wrHNOhIT6i9JSs057uKZAADgnu699141bdq0xse9997r6ukBp+QIz9IJzwAAbqAxr6muu+46DR06VPfee6+uuOKKBvtcdp7VkZiQqvDsKOEZAAA1eeaZZ05ZD4PjkHBnUVUnDA7lEJ4BAFyvMa+p1q1b55LPZedZHYkJrdrOn1OkRlJGDgCAWmnRooXat29f46NFixaunh6qzJkzR7GxsbJarerXr582bdp0yrGvvvqqLr30UoWEhCgkJEQJCQknjS8oKNC4ceMUHR0tPz8/denSRfPmzas2ZvDgwTKZTNUe7nTn3LHz7PCxEpWUV7h4NgCAxo41VcMjPKsjkcF+MpukknKbsgtKXD0dAACAWluyZImSkpI0ceJEbd26VfHx8UpMTNThw4drHL9u3TqNGDFCa9euVXJysmJiYjR06FAdOnTIOSYpKUkrV67UW2+9pZ07d+qhhx7SuHHjTqpTMnbsWGVkZDgf06ZNq9fvWhuhTXxk9a5cNmfkFrt4NgAAoKERntURb4tZLYNoGgAAADzXzJkzNXbsWI0ePdq5Q8zf31/z58+vcfzChQt13333qWfPnoqLi9Nrr70mm82mNWvWOMds2LBBd9xxhwYPHqzY2Fjdfffdzrb2v+fv76+IiAjnw52OnZhMJkVS9wwAgEaL8KwORYc4jm5S9wwAAHiW0tJSbdmyRQkJCc7nzGazEhISlJycfFbXOH78uMrKyhQaGup8bsCAAVqxYoUOHToku92utWvXas+ePRo6dGi19y5cuFDNmzdXt27dNH78eB0/fur1VElJifLz86s96hsdNwEAaLxoGFCHYkL9tXH/UZoGAAAAj3PkyBFVVFQoPDy82vPh4eHatWvXWV3jscceU2RkZLUAbvbs2br77rsVHR0tLy8vmc1mvfrqqxo4cKBzzJ///Ge1bt1akZGR+uGHH/TYY49p9+7dWrZsWY2fM2XKFD399NPn8C3PnSM8o2kAAACND+FZHTrRcZNFFQAAaFymTp2qxYsXa926dbJarc7nZ8+erW+//VYrVqxQ69at9dVXX+lvf/tbtZDt7rvvdo7v3r27WrZsqSFDhmjfvn1q167dSZ81fvx4JSUlOf+en5+vmJiYevx2vwvP2HkGAECjQ3hWhxwdN1M5tgkAwCkdOHBAbdq00bZt29SzZ09XTwdVmjdvLovFoqysrGrPZ2VlKSIi4rTvnT59uqZOnarVq1erR48ezueLior0xBNPaPny5br66qslST169FBKSoqmT59ebYfa7/Xr10+S9PPPP9cYnvn6+srX17dW3+98RYVQ8wwAgMaKmmd1KCa0aucZ4RkAwI0NHjxYDz30UJ1db9SoURo+fHidXQ+u4ePjo169elUr9u8o/t+/f/9Tvm/atGmaPHmyVq5cqd69e1d7raysTGVlZTKbqy85LRaLbDbbKa+ZkpIiSWrZsuU5fJP6wc4zAMAfsaZqPNh5VoccxzbTc4tVXmGTl4VsEgAAeI6kpCTdcccd6t27t/r27atZs2apsLBQo0ePliSNHDlSUVFRmjJliiTp+eef14QJE7Ro0SLFxsYqMzNTktS0aVM1bdpUgYGBGjRokB599FH5+fmpdevW+vLLL/Xmm29q5syZkqR9+/Zp0aJFuuqqq9SsWTP98MMPevjhhzVw4MBqu9hczdFtMyO3WDabXWazycUzAgDA/ZSWlsrHx8fV06hzpDt1qEWAr3wsZlXY7MrIK3b1dAAADclul0oLXfOw2896mqNGjdKXX36pF198USaTSSaTSQcOHND27dt15ZVXqmnTpgoPD9f//d//6ciRI873vfvuu+revbv8/PzUrFkzJSQkqLCwUJMmTdIbb7yhDz74wHm9devW1frH9+WXX6pv377y9fVVy5Yt9fjjj6u8vPyMny9J69atU9++fdWkSRMFBwfr4osv1q+//lrrOUC69dZbNX36dE2YMEE9e/ZUSkqKVq5c6WwicPDgQWVkZDjHz507V6WlpbrpppvUsmVL52P69OnOMYsXL1afPn10++23q0uXLpo6daqeffZZ3XvvvZIqd7ytXr1aQ4cOVVxcnP7+97/rxhtv1IcfftiwX/4MIoKsMpuk0gqbjhSUuHo6AGBsHrCucpc11WOPPaaOHTvK399fbdu21VNPPaWysrJqYz788EP16dNHVqtVzZs31/XXX+98raSkRI899phiYmLk6+ur9u3b67///a8k6fXXX1dwcHC1a73//vsymU7cQJo0aZJ69uyp1157TW3atHHWPV25cqUuueQSBQcHq1mzZrrmmmu0b9++atdKS0vTiBEjFBoaqiZNmqh3797auHGjDhw4ILPZrM2bN1cbP2vWLLVu3fq0u9frCzvP6pDZbFJUiJ/2HylUas5x5zFOAEAjUHZcei7SNZ/9RLrk0+Sshr744ovas2ePunXrpmeeeUaS5O3trb59++quu+7Sv//9bxUVFemxxx7TLbfcoi+++EIZGRkaMWKEpk2bpuuvv17Hjh3T119/LbvdrkceeUQ7d+5Ufn6+FixYIEkKDQ2t1fQPHTqkq666SqNGjdKbb76pXbt2aezYsbJarZo0adJpP7+8vFzDhw/X2LFj9fbbb6u0tFSbNm2qtqhD7YwbN07jxo2r8bU/LuIPHDhwxutFREQ4/9moSUxMjL788svaTNElvC1mRQRalZ5XrLTcIrUItJ75TQCAc+MB6yp3WVMFBATo9ddfV2RkpH788UeNHTtWAQEB+sc//iFJ+vjjj3X99dfrn//8p958802Vlpbqk08+cb5/5MiRSk5O1ksvvaT4+Hjt37+/Wth3Nn7++We99957WrZsmSwWiySpsLBQSUlJ6tGjhwoKCjRhwgRdf/31SklJkdlsVkFBgQYNGqSoqCitWLFCERER2rp1q2w2m2JjY5WQkKAFCxZUKwmxYMECjRo16qRyEA2B8KyORVeFZ2lHi6ST69sCAOBSQUFB8vHxkb+/v7MI/L/+9S9dcMEFeu6555zj5s+fr5iYGO3Zs0cFBQUqLy/XDTfcoNatW0uq7Ijo4Ofnp5KSkjMWlT+VV155RTExMXr55ZdlMpkUFxen9PR0PfbYY5owYYIyMjJO+flHjx5VXl6errnmGmdh+c6dO5/TPIAziQrxU3pesQ7lFOnCViGung4AwIXcZU315JNPOv8cGxurRx55RIsXL3aGZ88++6xuu+02Pf30085x8fHxkqQ9e/bonXfe0apVq5xNfNq2bVvbH4VKS0v15ptvKiwszPncjTfeWG3M/PnzFRYWpp9++kndunXTokWLlJ2dre+++84ZErZv3945/q677tK9996rmTNnytfXV1u3btWPP/6oDz74oNbzqwuEZ3WMpgEA0Eh5+1feqXTVZ5+H77//XmvXrlXTpk1Pem3fvn0aOnSohgwZou7duysxMVFDhw7VTTfdpJCQugkPdu7cqf79+1fbLXbxxReroKBAaWlpio+PP+Xnh4aGatSoUUpMTNQVV1yhhIQE3XLLLW5VaB7GUVn3LIemAQBQ3zx0XeWKNdWSJUv00ksvad++fc5wLjAw0Pl6SkqKxo4dW+N7U1JSZLFYNGjQoHP+fElq3bp1teBMkvbu3asJEyZo48aNOnLkiPOo5cGDB9WtWzelpKToggsuOOXuuuHDh+tvf/ubli9frttuu02vv/66LrvsMsXGxp7XXM8VNc/qmKNpQOpRwjMAaFRMpsot/q54nOcRxYKCAl177bVKSUmp9ti7d68GDhwoi8WiVatW6dNPP1WXLl00e/ZsderUSfv376+jH97pnenzFyxYoOTkZA0YMEBLlixRx44d9e233zbI3NC4ODpuphOeAUD98tB1VUOvqZKTk3X77bfrqquu0kcffaRt27bpn//8p0pLS51j/Pz8Tvn+070mSWazWfY/1ID7Yz01SWrS5ORjrtdee62OHj2qV199VRs3btTGjRslyTm3M322j4+PRo4cqQULFqi0tFSLFi3SnXfeedr31CfCszoWE1r5D0BqDosqAIB78vHxUUVFhfPvF154oXbs2KHY2Fi1b9++2sOxGDKZTLr44ov19NNPa9u2bfLx8dHy5ctrvF5tde7cWcnJydUWZ+vXr1dAQICio6PP+PmSdMEFF2j8+PHasGGD8ygAUNeiQirXeYdY5wEA5Po11YYNG9S6dWv985//VO/evdWhQ4eTmib16NFDa9asqfH93bt3l81mO2Xt0bCwMB07dszZpEmq3K12Jr/99pt2796tJ598UkOGDFHnzp2Vk5Nz0rxSUlJ09OjRU17nrrvu0urVq/XKK684j7u6CuFZHWPnGQDA3cXGxjo7GR05ckR/+9vfdPToUY0YMULfffed9u3bp88++0yjR49WRUWFNm7cqOeee06bN2/WwYMHtWzZMmVnZztri8XGxuqHH37Q7t27deTIkRrvSJ7Offfdp9TUVN1///3atWuXPvjgA02cOFFJSUkym82n/fz9+/dr/PjxSk5O1q+//qrPP/9ce/fupe4Z6kVk1c4zjm0CACTXr6k6dOiggwcPavHixdq3b59eeumlajcXJWnixIl6++23NXHiRO3cuVM//vijnn/+eefn3XHHHbrzzjv1/vvva//+/Vq3bp3eeecdSVK/fv3k7++vJ554Qvv27dOiRYv0+uuvn/HnEhISombNmuk///mPfv75Z33xxRdKSkqqNmbEiBGKiIjQ8OHDtX79ev3yyy967733lJyc7BzTuXNnXXTRRXrsscc0YsSIM+5Wq0+EZ3XMUfPs8LESFZed+114AADqyyOPPCKLxaIuXbooLCxMpaWlWr9+vSoqKjR06FB1795dDz30kIKDg2U2mxUYGKivvvpKV111lTp27Kgnn3xS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7bdasWKFtmzZohkzZuhvf/ubVq9efc6fNX78eOXl5TkfqampdfEV6pzj2OaxknLlFZW5eDYAAOBcebl6ApCC/LwV4OulYyXlSss5rg7hAa6eEgAAaGSaN28ui8VyUpfLrKwsRUREnPa906dP19SpU7V69Wr16NHD+XxRUZGeeOIJLV++XFdffbUkqUePHkpJSdH06dOVkJCgiIgIlZaWKjc3t9rus9N9rq+vr3x9fc/xmzYcfx8vhfh7K+d4mQ7lFCnIz9vVUwIAAOfgnHae1aaFuSQtXbpUcXFxslqt6t69uz755JNqr2dlZWnUqFGKjIyUv7+/hg0bpr1791Ybk5mZqf/7v/9TRESEmjRpogsvvFDvvffeuUzf7ZhMJkVT9wwAALiQj4+PevXqVa3Yv6P4f//+/U/5vmnTpmny5MlauXKlevfuXe21srIylZWVyWyuvuS0WCyy2WySpF69esnb27va5+7evVsHDx487ed6CkfHTeqeAQDguWodntW2hfmGDRs0YsQIjRkzRtu2bdPw4cM1fPhwbd++XZJkt9s1fPhw/fLLL/rggw+0bds2tW7dWgkJCSosLHReZ+TIkdq9e7dWrFihH3/8UTfccINuueUWbdu27Ry/unuJqVpYUfcMAAC4SlJSkl599VW98cYb2rlzp/7617+qsLBQo0ePllS5Hhs/frxz/PPPP6+nnnpK8+fPV2xsrDIzM5WZmamCggJJUmBgoAYNGqRHH31U69at0/79+/X666/rzTff1PXXXy9JCgoK0pgxY5SUlKS1a9dqy5YtGj16tPr376+LLrqo4X8IdSyKjpsAAHi8WodntW1h/uKLL2rYsGF69NFH1blzZ02ePFkXXnihXn75ZUnS3r179e2332ru3Lnq06ePOnXqpLlz56qoqEhvv/228zobNmzQ/fffr759+6pt27Z68sknFRwcrC1btpzjV3cvzo6bR9l5BgAAXOPWW2/V9OnTNWHCBPXs2VMpKSlauXKls4nAwYMHlZGR4Rw/d+5clZaW6qabblLLli2dj+nTpzvHLF68WH369NHtt9+uLl26aOrUqXr22Wd17733Osf8+9//1jXXXKMbb7xRAwcOVEREhJYtW9ZwX7weRRKeAQDg8WpV88zRwvz3dxzP1MI8OTlZSUlJ1Z5LTEzU+++/L6my1bikaoVlzWazfH199c03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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_loss_curves(results)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tqqDF_pBPemo" + }, + "source": [ + "#Recommendations" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "id": "d5AHa4aQX3ra" + }, + "outputs": [], + "source": [ + "# Example recommendation for a user\n", + "user_id = \"AHZM3GVSTF4MCGO67QFLXCNIXSIQ\"\n", + "user_index = user_map[user_id]" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "fNl3-xNMPemp", + "outputId": "a269a6bf-374c-4908-b709-b777083a6c59" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Recommended items: ['B08BBQ29N5', 'B099DRHW5V', 'B08BZ63GMJ', 'B00R8DXL44', 'B081TJ8YS3', 'B00YQ6X8EO', 'B097R46CSY', 'B09JS339BZ', 'B08P2DZB4X', 'B086QY6T7N']\n" + ] + } + ], + "source": [ + "def recommend(model, user_idx, item_indices, k=10):\n", + " model.eval()\n", + " user_tensor = torch.tensor([user_idx] * len(item_indices)).to(\"cuda\")\n", + " item_tensor = torch.tensor(item_indices).to(\"cuda\")\n", + "\n", + " with torch.no_grad():\n", + " predictions = model(user_tensor, item_tensor).squeeze()\n", + " top_k_items = torch.topk(predictions, k=k).indices.cpu().numpy()\n", + " return [list(item_map.keys())[i] for i in top_k_items]\n", + "\n", + "\n", + "item_indices = list(range(len(item_map)))\n", + "recommendations = recommend(ncf_model, user_index, item_indices)\n", + "print(\"Recommended items:\", recommendations)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 884 + }, + "id": "IYOlB0gkUw_S", + "outputId": "b1539e4b-3788-4205-f5e9-01fbd7dd3d28" + }, + "outputs": [], + "source": [ + "# import matplotlib.pyplot as plt\n", + "# from PIL import Image\n", + "# import requests\n", + "# from io import BytesIO\n", + "\n", + "# def fetch_item_images_from_df(asins, meta_df):\n", + " \n", + "# items_with_images = []\n", + "# for asin in asins:\n", + "# row = meta_df[meta_df[\"parent_asin\"] == asin]\n", + "# if not row.empty:\n", + "# images = row[\"images\"].iloc[0]\n", + "# if images: # Check if images are available\n", + "# #print(images[\"large\"][0])\n", + "# items_with_images.append((asin, images[\"large\"][0], row[\"title\"]))\n", + "# return items_with_images\n", + "\n", + "# def display_items(title, items):\n", + "# print(items)\n", + " \n", + "# plt.figure(figsize=(15, 5))\n", + "# plt.suptitle(title, fontsize=16)\n", + "\n", + "# for idx, (asin, image_urls, title) in enumerate(items):\n", + "# if image_urls: # Only display if images are available\n", + "# try:\n", + "# response = requests.get(image_urls)\n", + "# img = Image.open(BytesIO(response.content))\n", + "\n", + "# plt.subplot(1, len(items), idx + 1)\n", + "# plt.imshow(img)\n", + "# plt.axis(\"off\")\n", + "# plt.title(title)\n", + "# except Exception as e:\n", + "# print(f\"Could not fetch image for ASIN {asin}: {e}\")\n", + "\n", + "# plt.tight_layout()\n", + "# plt.show()\n", + "\n", + "\n", + "# # Fetch ASINs for bought items\n", + "# #user_id = \"user_1\"\n", + "# bought_asins = reviews_df[reviews_df[\"user_id\"] == user_id][\"asin\"].tolist()\n", + "\n", + "# # Fetch images for recommended items\n", + "# recommended_asins = recommend(ncf_model, user_index, list(range(len(item_map))))\n", + "# bought_items = fetch_item_images_from_df(bought_asins, meta_df)\n", + "# recommended_items = fetch_item_images_from_df(recommended_asins, meta_df)\n", + "\n", + "# # Display images\n", + "# display_items(\"User Bought Items\", bought_items)\n", + "# display_items(\"Recommended Items\", recommended_items)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "* Running on local URL: http://127.0.0.1:7861\n", + "* Running on public URL: https://91cd066240022a4c51.gradio.live\n", + "\n", + "This share link expires in 72 hours. For free permanent hosting and GPU upgrades, run `gradio deploy` from the terminal in the working directory to deploy to Hugging Face Spaces (https://huggingface.co/spaces)\n" + ] + }, + { + "data": { + "text/html": [ + "
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import gradio as gr\n", + "import torch\n", + "from PIL import Image\n", + "import requests\n", + "from io import BytesIO\n", + "\n", + "# Function to fetch item images from the DataFrame\n", + "def fetch_item_images_from_df(asins, meta_df):\n", + " items_with_images = []\n", + " for asin in asins:\n", + " row = meta_df[meta_df[\"parent_asin\"] == asin]\n", + " if not row.empty:\n", + " images = row[\"images\"].iloc[0]\n", + " if images: # Check if images are available\n", + " items_with_images.append([images[\"large\"][0], row[\"title\"].iloc[0]])\n", + " return items_with_images\n", + "\n", + "# Function to recommend and fetch images for bought and recommended items\n", + "def recommend_and_display(user_id):\n", + " user_index = user_map.get(user_id)\n", + " if user_index is None:\n", + " return [], [] # Return empty lists if user not found\n", + "\n", + " # Fetch ASINs for bought items\n", + " bought_asins = reviews_df[reviews_df[\"user_id\"] == user_id][\"parent_asin\"].tolist()\n", + "\n", + " # Fetch images for bought and recommended items\n", + " bought_items = fetch_item_images_from_df(bought_asins, meta_df)\n", + " recommended_asins = recommend(ncf_model, user_index, list(range(len(item_map))))\n", + " recommended_items = fetch_item_images_from_df(recommended_asins, meta_df)\n", + "\n", + " return bought_items, recommended_items\n", + "\n", + "# Gradio function to display the recommendations\n", + "def gradio_interface(user_id):\n", + " bought, recommended = recommend_and_display(user_id)\n", + " return bought, recommended\n", + "\n", + "# Gradio Interface\n", + "interface = gr.Interface(\n", + " fn=gradio_interface,\n", + " inputs=gr.Textbox(label=\"Enter User ID\"),\n", + " outputs=[\n", + " gr.Gallery(label=\"Bought Items\"),\n", + " gr.Gallery(label=\"Recommended Items\")\n", + " ],\n", + " title=\"Amazon Recommender\",\n", + " description=\"Enter a User ID to see images of bought and recommended items.\",\n", + " live=True\n", + ")\n", + "\n", + "# Launch Gradio Interface\n", + "interface.launch(share=True)\n" + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "gpuType": "T4", + "provenance": [], + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "0055483d81184e1c80fa30908cdbc389": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "01078b24cfbc495e800cfdf6521bc71d": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_d19ea1ff96fd4935aae58bb68197a012", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_d92178ee50314de7bc3fcd5adaf582a0", + "value": 1 + } + }, + "023a407aefea4093bed77d0ac0f62366": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "047530e6306747f1a6818ced5e806c5b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_759171f02a85413aa47d761a114553cc", + "placeholder": "​", + "style": "IPY_MODEL_91c4174ad5f64c0a8f3737932845e507", + "value": " 19.7k/19.7k [00:00<00:00, 524kB/s]" + } + }, + "10c291e7ee1044009497428ad8eb232e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_4c0d4c4706554029899b149d570e24db", + "placeholder": "​", + "style": "IPY_MODEL_25a0a7e6faf540aaaaf97ba94d61f9cd", + "value": "README.md: 100%" + } + }, + "12ccb53cb4554e99ae9561575fa1e652": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "13c370f93d77445ea5794b0f354cd04e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_10c291e7ee1044009497428ad8eb232e", + "IPY_MODEL_c526c5490d464f4eb4bd1a0412fffe14", + "IPY_MODEL_047530e6306747f1a6818ced5e806c5b" + ], + "layout": "IPY_MODEL_e66c6cabe5804cf6acaac5f88a0c2225" + } + }, + "151e2b29aa69486d81517cde8066b8fe": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "1c0bc7c01ce84982821cdd6ee995e210": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "20b8009e00bf440fbffdbf051a756bfa": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "2305c04c50fa490a80dac631cf851915": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "25a0a7e6faf540aaaaf97ba94d61f9cd": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "2b24e6912556456a926d3b25eda36706": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_fa28ffeb32c6494a96686ba1ef3fdd63", + "placeholder": "​", + "style": "IPY_MODEL_34fa034a64fa438bb9541b0a72af32cc", + "value": " 701528/0 [00:20<00:00, 37962.11 examples/s]" + } + }, + "2b604f80e83d4eb4b8082920a35595d5": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_8c90550ff9a94562a0a462c2358da503", + "placeholder": "​", + "style": "IPY_MODEL_c28d0b7ffd2145d0b40188e7f3a4c808", + "value": "meta_All_Beauty.jsonl: 100%" + } + }, + "2e74bc1187d4482eb9148b6f0ea13878": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "34fa034a64fa438bb9541b0a72af32cc": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "3546ec97fa464bceb2dde30931360301": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "20px" + } + }, + "3659bc504c224d0796ee773d0169f0ff": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_abd110f79c3e4ceea98abe959a09200f", + "max": 212990142, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_2305c04c50fa490a80dac631cf851915", + "value": 212990142 + } + }, + "381342c1445e4a9a88c5d37ac2883be3": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "382ff2c8d6b5423799f55b3dff24fdbd": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "418ec4813c0748849432779be32a59b3": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "48cb37472f7545719eae5d7715ae6dc1": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "4c0d4c4706554029899b149d570e24db": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "4d083ac1a54d407f8cc790e81da3c79f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "4dccb2039e654600a531a464073a12dc": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "50492b130ae1498abcd405ccf2eaa7e9": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "539a058ffe0845e3855c4aab7a309875": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "6babda9ba42d48f88dd7b33ae5e29677": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "7044641201cb4aa8ab7408c89493335b": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "759171f02a85413aa47d761a114553cc": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "7d4b84bb2bcf4b42a90c49f02621c24a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_418ec4813c0748849432779be32a59b3", + "placeholder": "​", + "style": "IPY_MODEL_adfbcc418766470abe1a32ef454a6d0c", + "value": " 213M/213M [00:05<00:00, 42.7MB/s]" + } + }, + "8a539054378b461e8f7735b8a43224c1": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "8c90550ff9a94562a0a462c2358da503": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "90c463f6b5b644fb8a9744b1b1c8eba1": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_c9e8b9bddae64ce6b1632a29b4b55a49", + "placeholder": "​", + "style": "IPY_MODEL_0055483d81184e1c80fa30908cdbc389", + "value": " 327M/327M [00:07<00:00, 42.9MB/s]" + } + }, + "91c4174ad5f64c0a8f3737932845e507": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "938ae969eaf14648ace9d216f2dccaea": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_023a407aefea4093bed77d0ac0f62366", + "placeholder": "​", + "style": "IPY_MODEL_4d083ac1a54d407f8cc790e81da3c79f", + "value": "All_Beauty.jsonl: 100%" + } + }, + "9af1562235be4824b97bef461536ee08": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "9eaa94500a394f7ba809db271c08f764": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_ed57dfc4174d4e279abe100b005bfd03", + "IPY_MODEL_bc2bc311ddce4778967edc023bf31d7a", + "IPY_MODEL_d586027c8193403085a843ea3f336543" + ], + "layout": "IPY_MODEL_151e2b29aa69486d81517cde8066b8fe" + } + }, + "a30ddd1cb5d942739d1ca129549f2ca3": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_2b604f80e83d4eb4b8082920a35595d5", + "IPY_MODEL_3659bc504c224d0796ee773d0169f0ff", + "IPY_MODEL_7d4b84bb2bcf4b42a90c49f02621c24a" + ], + "layout": "IPY_MODEL_ac5019af69dd4e7f9ac6ad92b05b1fab" + } + }, + "a35fd033452b424da691b192cda12ab5": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_cf53e1c535f5485ea90f1f287361fcf3", + "IPY_MODEL_ce4054c277c045188f33f79ff7ce020b", + "IPY_MODEL_e265a132d69a4d71b0ab9144cf50cdca" + ], + "layout": "IPY_MODEL_f8c224b0675b4986b77d4423aba3ebd2" + } + }, + "a925ea13f67348349b9ffeaecba11a68": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_50492b130ae1498abcd405ccf2eaa7e9", + "max": 326611506, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_2e74bc1187d4482eb9148b6f0ea13878", + "value": 326611506 + } + }, + "abd110f79c3e4ceea98abe959a09200f": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "ac5019af69dd4e7f9ac6ad92b05b1fab": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "adfbcc418766470abe1a32ef454a6d0c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "b2fdc756f1444775be72429de20afe10": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_938ae969eaf14648ace9d216f2dccaea", + "IPY_MODEL_a925ea13f67348349b9ffeaecba11a68", + "IPY_MODEL_90c463f6b5b644fb8a9744b1b1c8eba1" + ], + "layout": "IPY_MODEL_d37e208a2b7741f5a1ccdb6430cf919b" + } + }, + "b4fdd54786cd40fe9e00d0c61c8efdad": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_20b8009e00bf440fbffdbf051a756bfa", + "placeholder": "​", + "style": "IPY_MODEL_4dccb2039e654600a531a464073a12dc", + "value": "Generating full split: " + } + }, + "bc2bc311ddce4778967edc023bf31d7a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_3546ec97fa464bceb2dde30931360301", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_9af1562235be4824b97bef461536ee08", + "value": 1 + } + }, + "bf99fbc731394d988d3dd3a41ab6e5ed": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_b4fdd54786cd40fe9e00d0c61c8efdad", + "IPY_MODEL_01078b24cfbc495e800cfdf6521bc71d", + "IPY_MODEL_2b24e6912556456a926d3b25eda36706" + ], + "layout": "IPY_MODEL_cc867ad6c1ac4617bc957700f5f35d43" + } + }, + "c28d0b7ffd2145d0b40188e7f3a4c808": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "c526c5490d464f4eb4bd1a0412fffe14": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_e86856daf1154999b27849d0b6119d5c", + "max": 19737, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_12ccb53cb4554e99ae9561575fa1e652", + "value": 19737 + } + }, + "c67882a144294b4f96cc15ee27f791b3": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "c9e8b9bddae64ce6b1632a29b4b55a49": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "cc867ad6c1ac4617bc957700f5f35d43": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "cd428d816efe4b5e8264f5020556a19b": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "ce4054c277c045188f33f79ff7ce020b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_cd428d816efe4b5e8264f5020556a19b", + "max": 39620, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_6babda9ba42d48f88dd7b33ae5e29677", + "value": 39620 + } + }, + "cf53e1c535f5485ea90f1f287361fcf3": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_7044641201cb4aa8ab7408c89493335b", + "placeholder": "​", + "style": "IPY_MODEL_382ff2c8d6b5423799f55b3dff24fdbd", + "value": "Amazon-Reviews-2023.py: 100%" + } + }, + "d19ea1ff96fd4935aae58bb68197a012": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "20px" + } + }, + "d37e208a2b7741f5a1ccdb6430cf919b": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "d586027c8193403085a843ea3f336543": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_381342c1445e4a9a88c5d37ac2883be3", + "placeholder": "​", + "style": "IPY_MODEL_c67882a144294b4f96cc15ee27f791b3", + "value": " 112590/0 [00:31<00:00, 4247.92 examples/s]" + } + }, + "d92178ee50314de7bc3fcd5adaf582a0": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "e265a132d69a4d71b0ab9144cf50cdca": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_8a539054378b461e8f7735b8a43224c1", + "placeholder": "​", + "style": "IPY_MODEL_48cb37472f7545719eae5d7715ae6dc1", + "value": " 39.6k/39.6k [00:00<00:00, 1.11MB/s]" + } + }, + "e66c6cabe5804cf6acaac5f88a0c2225": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "e86856daf1154999b27849d0b6119d5c": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "ed57dfc4174d4e279abe100b005bfd03": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_539a058ffe0845e3855c4aab7a309875", + "placeholder": "​", + "style": "IPY_MODEL_1c0bc7c01ce84982821cdd6ee995e210", + "value": "Generating full split: " + } + }, + "f8c224b0675b4986b77d4423aba3ebd2": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "fa28ffeb32c6494a96686ba1ef3fdd63": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + } + } + } + }, + "nbformat": 4, + "nbformat_minor": 0 +}