{ "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 }