-
Notifications
You must be signed in to change notification settings - Fork 1
/
XLM-T - Fine-tuning on custom datasets
1 lines (1 loc) · 90 KB
/
XLM-T - Fine-tuning on custom datasets
1
{"cells":[{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":28869,"status":"ok","timestamp":1703846633426,"user":{"displayName":"YONG YEOW BOON","userId":"16457383957868257374"},"user_tz":-480},"id":"nKftOu9fyC8R","outputId":"85c2993f-04b1-4b36-825f-9ca2e895c18d"},"outputs":[{"output_type":"stream","name":"stdout","text":["\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\u001b[33m\n","\u001b[0m\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\u001b[33m\n","\u001b[0m\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\u001b[33m\n","\u001b[0m\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\u001b[33m\n","\u001b[0m\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\u001b[33m\n","\u001b[0m"]}],"source":["#Install Neccessary Packages to Utilize Hugging Face's \"transformers\" library\n","!pip install --upgrade pip -q\n","!pip install sentencepiece -q\n","!pip install datasets -q\n","!pip install transformers -q\n","!pip install transformers[torch] -q"]},{"cell_type":"markdown","metadata":{"id":"_ykXokStcwGz"},"source":["# Fine-tuning XLM-T\n","\n","This notebook describes a simple case of finetuning. You can finetune either the `XLM-T` language model, or XLM-T sentiment, which has already been fine-tuned on sentiment analysis data, in 8 languages (this could be useful to do sentiment transfer learning on new languages).,\n","\n","This notebook was modified from https://huggingface.co/transformers/custom_datasets.html"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"Y5f1fFbETSbM"},"outputs":[],"source":["\n","#Import Necessary Packages\n","from transformers import AutoTokenizer\n","from transformers import AutoModelForSequenceClassification, Trainer, TrainingArguments\n","import torch\n","import numpy as np\n","from sklearn.metrics import classification_report\n","import pandas as pd"]},{"cell_type":"markdown","metadata":{"id":"dtj1poj8yC8b"},"source":["## Parameters"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"r3OxewRLFaK1"},"outputs":[],"source":["#Set Hyperparameters and Model Selection\n","LR = 2e-5 #Low LR\n","EPOCHS = 1 #Low Number of Epochs\n","BATCH_SIZE = 16 #Number of Training Examples to use for each iteration.\n","MODEL = \"cardiffnlp/twitter-xlm-roberta-base-sentiment\" # Sentiment Classifier\n","MAX_TRAINING_EXAMPLES = -1 # set this to -1 if you want to use the whole training set"]},{"cell_type":"markdown","metadata":{"id":"XWqZ7LGMFeHV"},"source":["## Data"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":2682,"status":"ok","timestamp":1703848032019,"user":{"displayName":"YONG YEOW BOON","userId":"16457383957868257374"},"user_tz":-480},"id":"YbPlblAj3lnq","outputId":"1ac56d2e-9f49-4711-dc59-ec68bfddac93"},"outputs":[{"output_type":"stream","name":"stdout","text":["Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n"]}],"source":["#Mount Google Drive\n","from google.colab import drive\n","drive.mount('/content/drive')"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"IZiys5HC2qH5"},"outputs":[],"source":["#Access Datasets in Drive\n","\n","train_df = pd.read_csv(\"/content/drive/MyDrive/NLP/BahasaRojakSA-RDSG1 (BYY)/Ready for XLMR Data spilts/V1/combined_train_data.csv\")\n","val_df = pd.read_csv(\"/content/drive/MyDrive/NLP/BahasaRojakSA-RDSG1 (BYY)/Ready for XLMR Data spilts/V1/combined_val_data.csv\")\n","test_df = pd.read_csv(\"/content/drive/MyDrive/NLP/BahasaRojakSA-RDSG1 (BYY)/Ready for XLMR Data spilts/V1/combined_test_data.csv\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"lNxeDPoc3LSF"},"outputs":[],"source":["#Prepare Datasets into Dictionary formats, single reference point.\n","dataset_dict = {\n"," 'train': {\n"," 'text': train_df['text'].tolist(),\n"," 'labels': train_df['label'].tolist()\n"," },\n"," 'val': {\n"," 'text': val_df['text'].tolist(),\n"," 'labels': val_df['label'].tolist()\n"," },\n"," 'test': {\n"," 'text': test_df['text'].tolist(),\n"," 'labels': test_df['label'].tolist()\n"," }\n","}"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"1IjMOsNSyC8d"},"outputs":[],"source":["#Initialize Tokenizer (Convert text into format model can understand)\n","tokenizer = AutoTokenizer.from_pretrained(MODEL, use_fast=True)"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":554,"status":"ok","timestamp":1703848046250,"user":{"displayName":"YONG YEOW BOON","userId":"16457383957868257374"},"user_tz":-480},"id":"Rp0llWQVyC8e","outputId":"ba57934a-375b-4bf6-a853-c791c697dcca"},"outputs":[{"output_type":"stream","name":"stderr","text":["Asking to truncate to max_length but no maximum length is provided and the model has no predefined maximum length. Default to no truncation.\n"]}],"source":["train_encodings = tokenizer(dataset_dict['train']['text'], truncation=True, padding=True)\n","val_encodings = tokenizer(dataset_dict['val']['text'], truncation=True, padding=True)\n","test_encodings = tokenizer(dataset_dict['test']['text'], truncation=True, padding=True)"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"1MzkHFG5yC8f"},"outputs":[],"source":["#Define PyTorch Datasets\n","class MyDataset(torch.utils.data.Dataset):\n"," def __init__(self, encodings, labels):\n"," self.encodings = encodings\n"," self.labels = labels\n","\n"," def __getitem__(self, idx):\n"," item = {key: torch.tensor(val[idx]) for key, val in self.encodings.items()}\n"," item['labels'] = torch.tensor(self.labels[idx])\n"," return item\n","\n"," def __len__(self):\n"," return len(self.labels)\n","\n","train_dataset = MyDataset(train_encodings, dataset_dict['train']['labels'])\n","val_dataset = MyDataset(val_encodings, dataset_dict['val']['labels'])\n","test_dataset = MyDataset(test_encodings, dataset_dict['test']['labels'])"]},{"cell_type":"markdown","metadata":{"id":"z_BTQBaJyC8g"},"source":["## Fine-tuning"]},{"cell_type":"markdown","metadata":{"id":"zmp35MgkyC8g"},"source":["The steps above prepared the datasets in the way that the trainer is expected. Now all we need to do is create a model\n","to fine-tune, define the `TrainingArguments`/`TFTrainingArguments` and\n","instantiate a `Trainer`/`TFTrainer`."]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":8722,"status":"ok","timestamp":1703849441673,"user":{"displayName":"YONG YEOW BOON","userId":"16457383957868257374"},"user_tz":-480},"id":"PGuho0dMyC8g","outputId":"2cb0aeb2-1794-4225-8666-97f57dcd572c"},"outputs":[{"output_type":"stream","name":"stderr","text":["Some weights of XLMRobertaForSequenceClassification were not initialized from the model checkpoint at cardiffnlp/twitter-xlm-roberta-base-sentiment and are newly initialized because the shapes did not match:\n","- classifier.out_proj.weight: found shape torch.Size([3, 768]) in the checkpoint and torch.Size([2, 768]) in the model instantiated\n","- classifier.out_proj.bias: found shape torch.Size([3]) in the checkpoint and torch.Size([2]) in the model instantiated\n","You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n"]}],"source":["#Configure Training, define how training should proceed\n","training_args = TrainingArguments(\n"," output_dir='./results', # output directory\n"," num_train_epochs=EPOCHS, # total number of training epochs\n"," per_device_train_batch_size=BATCH_SIZE, # batch size per device during training\n"," per_device_eval_batch_size=BATCH_SIZE, # batch size for evaluation\n"," warmup_steps=100, # number of warmup steps for learning rate scheduler\n"," weight_decay=0.01, # strength of weight decay\n"," logging_dir='./logs', # directory for storing logs\n"," logging_steps=10, # when to print log\n"," load_best_model_at_end=True, # load or not best model at the end\n"," save_strategy=\"steps\", # save strategy (can be 'steps' or 'epoch')\n"," evaluation_strategy=\"steps\", # evaluation strategy (can be 'steps' or 'epoch')\n"," save_steps=10, # if save_strategy is 'steps', how often to save\n"," eval_steps=10, # if evaluation_strategy is 'steps', how often to evaluate\n",")\n","\n","#Load pretrained model, adjust it to number of labels present in dataset (2)\n","num_labels = len(set(dataset_dict[\"train\"][\"labels\"]))\n","model = AutoModelForSequenceClassification.from_pretrained(MODEL, num_labels=num_labels, ignore_mismatched_sizes=True)"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":406},"id":"J7bArzixEAH-","executionInfo":{"status":"ok","timestamp":1703850008283,"user_tz":-480,"elapsed":566619,"user":{"displayName":"YONG YEOW BOON","userId":"16457383957868257374"}},"outputId":"84169ad3-331a-4fe1-e250-d836162aa5c5"},"outputs":[{"output_type":"display_data","data":{"text/plain":["<IPython.core.display.HTML object>"],"text/html":["\n"," <div>\n"," \n"," <progress value='100' max='100' style='width:300px; height:20px; vertical-align: middle;'></progress>\n"," [100/100 09:24, Epoch 1/1]\n"," </div>\n"," <table border=\"1\" class=\"dataframe\">\n"," <thead>\n"," <tr style=\"text-align: left;\">\n"," <th>Step</th>\n"," <th>Training Loss</th>\n"," <th>Validation Loss</th>\n"," </tr>\n"," </thead>\n"," <tbody>\n"," <tr>\n"," <td>10</td>\n"," <td>0.702200</td>\n"," <td>0.664360</td>\n"," </tr>\n"," <tr>\n"," <td>20</td>\n"," <td>0.644100</td>\n"," <td>0.591327</td>\n"," </tr>\n"," <tr>\n"," <td>30</td>\n"," <td>0.581600</td>\n"," <td>0.481385</td>\n"," </tr>\n"," <tr>\n"," <td>40</td>\n"," <td>0.518400</td>\n"," <td>0.472808</td>\n"," </tr>\n"," <tr>\n"," <td>50</td>\n"," <td>0.551200</td>\n"," <td>0.476954</td>\n"," </tr>\n"," <tr>\n"," <td>60</td>\n"," <td>0.586600</td>\n"," <td>0.457388</td>\n"," </tr>\n"," <tr>\n"," <td>70</td>\n"," <td>0.500900</td>\n"," <td>0.434607</td>\n"," </tr>\n"," <tr>\n"," <td>80</td>\n"," <td>0.440500</td>\n"," <td>0.430954</td>\n"," </tr>\n"," <tr>\n"," <td>90</td>\n"," <td>0.523300</td>\n"," <td>0.415662</td>\n"," </tr>\n"," <tr>\n"," <td>100</td>\n"," <td>0.436200</td>\n"," <td>0.447611</td>\n"," </tr>\n"," </tbody>\n","</table><p>"]},"metadata":{}},{"output_type":"execute_result","data":{"text/plain":["TrainOutput(global_step=100, training_loss=0.5485080623626709, metrics={'train_runtime': 565.5032, 'train_samples_per_second': 2.828, 'train_steps_per_second': 0.177, 'total_flos': 206248747964220.0, 'train_loss': 0.5485080623626709, 'epoch': 1.0})"]},"metadata":{},"execution_count":46}],"source":["trainer = Trainer(\n"," model=model, # the instantiated 🤗 Transformers model to be trained\n"," args=training_args, # training arguments, defined above\n"," train_dataset=train_dataset, # training dataset\n"," eval_dataset=val_dataset # evaluation dataset\n",")\n","\n","trainer.train()"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"Db-zlWQLXEVf","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1703850024649,"user_tz":-480,"elapsed":16384,"user":{"displayName":"YONG YEOW BOON","userId":"16457383957868257374"}},"outputId":"c1a4ea66-51e2-45cf-aff9-0c8bd4885ca2"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["('/content/drive/MyDrive/NLP/Sentiment Dataset/(1)v1Fine-Tuned XLMT/tokenizer_config.json',\n"," '/content/drive/MyDrive/NLP/Sentiment Dataset/(1)v1Fine-Tuned XLMT/special_tokens_map.json',\n"," '/content/drive/MyDrive/NLP/Sentiment Dataset/(1)v1Fine-Tuned XLMT/sentencepiece.bpe.model',\n"," '/content/drive/MyDrive/NLP/Sentiment Dataset/(1)v1Fine-Tuned XLMT/added_tokens.json',\n"," '/content/drive/MyDrive/NLP/Sentiment Dataset/(1)v1Fine-Tuned XLMT/tokenizer.json')"]},"metadata":{},"execution_count":47}],"source":["trainer.save_model(\"/content/drive/MyDrive/NLP/BahasaRojakSA-RDSG1 (BYY)/Fine-Tuned XLMT\") # save best model\n","tokenizer.save_pretrained(\"/content/drive/MyDrive/NLP/BahasaRojakSA-RDSG1 (BYY)/Fine-Tuned XLMT\")"]},{"cell_type":"markdown","metadata":{"id":"Kr3--ZKNbn1t"},"source":["## Evaluate Fine Tuned Model Against Original Model"]},{"cell_type":"code","source":["!pip install sentencepiece"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"hALADLDy9sA2","executionInfo":{"status":"ok","timestamp":1703845495868,"user_tz":-480,"elapsed":20976,"user":{"displayName":"YONG YEOW BOON","userId":"16457383957868257374"}},"outputId":"2605036d-8d0b-41b6-c0ae-5a4b604eb21c"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Requirement already satisfied: sentencepiece in /usr/local/lib/python3.10/dist-packages (0.1.99)\n","\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\u001b[33m\n","\u001b[0m"]}]},{"cell_type":"code","source":["from google.colab import drive\n","drive.mount('/content/drive')"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"wAPOAezyDLl8","executionInfo":{"status":"ok","timestamp":1703845498231,"user_tz":-480,"elapsed":2367,"user":{"displayName":"YONG YEOW BOON","userId":"16457383957868257374"}},"outputId":"4d9f857a-f0cd-4e4b-fa8f-93417910397c"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n"]}]},{"cell_type":"code","source":["#Import necessary libraries\n","from transformers import AutoModelForSequenceClassification, AutoTokenizer\n","import torch\n","import numpy as np\n","import pandas as pd\n","from sklearn.metrics import classification_report\n","\n","# Specify the path to your model directory\n","model_path = '/content/drive/MyDrive/NLP/Sentiment Dataset/Fine-Tuned XLMT'\n","\n","# Load the tokenizer and model\n","tuned_tokenizer = AutoTokenizer.from_pretrained(model_path)\n","tuned_model = AutoModelForSequenceClassification.from_pretrained(model_path)\n","\n","test_df = pd.read_csv(\"/content/drive/MyDrive/NLP/BahasaRojakSA-RDSG1 (BYY)/Ready for XLMR Data spilts/V1/combined_test_data.csv\")\n","test_texts = test_df['text'].tolist()\n","test_labels = test_df['label'].tolist()\n","\n","# Encode your test dataset\n","test_encodings = tuned_tokenizer(test_texts, truncation=True, padding=True, return_tensors='pt')\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"8a_QtAY2QozM","executionInfo":{"status":"ok","timestamp":1703850028867,"user_tz":-480,"elapsed":4229,"user":{"displayName":"YONG YEOW BOON","userId":"16457383957868257374"}},"outputId":"cf4c167d-e507-4b78-892d-ffd57f85111e"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stderr","text":["Asking to truncate to max_length but no maximum length is provided and the model has no predefined maximum length. Default to no truncation.\n"]}]},{"cell_type":"code","source":["# Make predictions\n","with torch.no_grad():\n"," outputs = tuned_model(**test_encodings)\n"," logits = outputs.logits\n","\n","# Convert logits to predicted class labels\n","test_preds = np.argmax(logits, axis=1)\n","\n","# Print classification report\n","print(classification_report(test_labels, test_preds, digits=3))"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"dQ_u3yW38uXn","executionInfo":{"status":"ok","timestamp":1703850617898,"user_tz":-480,"elapsed":339601,"user":{"displayName":"YONG YEOW BOON","userId":"16457383957868257374"}},"outputId":"e298fa44-e892-468c-deb2-5c96ee6b7388"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":[" precision recall f1-score support\n","\n"," 0 0.740 0.809 0.773 162\n"," 1 0.813 0.746 0.778 181\n","\n"," accuracy 0.776 343\n"," macro avg 0.777 0.777 0.775 343\n","weighted avg 0.779 0.776 0.776 343\n","\n"]}]},{"cell_type":"code","source":["#Confusion Matrix\n","from sklearn.metrics import confusion_matrix\n","# Calculate confusion matrix\n","conf_matrix = confusion_matrix(test_labels, test_preds)\n","import matplotlib.pyplot as plt\n","import seaborn as sns\n","# Visualize the confusion matrix as a heatmap\n","sns.heatmap(conf_matrix, annot=True, fmt='g', cmap='Blues')\n","plt.xlabel('Predicted labels')\n","plt.ylabel('True labels')\n","plt.title('Confusion Matrix')\n","plt.show()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":472},"id":"fnyilATMO2eJ","executionInfo":{"status":"ok","timestamp":1703846127180,"user_tz":-480,"elapsed":687,"user":{"displayName":"YONG YEOW BOON","userId":"16457383957868257374"}},"outputId":"07ae5146-4508-47dc-89a7-a3b23687683a"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 640x480 with 2 Axes>"],"image/png":"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wEmBwkZubq7pOgAAKLa8vLFxZV/EdvbsWfn7+7urFgAAiiVvXyDq8nM2cnJyNGbMGFWsWFGlS5fWvn37JEmJiYl6/fXX3V4gAAAo2lwOG+PGjdO8efM0YcIE+fn5Ocavu+46vfbaa24tDgCA4sDmpldR5XLYWLBggWbPnq2ePXvK19fXMd6wYUP99NNPbi0OAIDiwGazueVVVLkcNg4fPpzvk0Jzc3OVnZ3tlqIAAEDx4XLYqFevnr755ps84++//74aN27slqIAAChOvP0r5l2+G2XEiBGKj4/X4cOHlZubqw8//FC7du3SggULtHz5chM1AgBQpBXlKRB3cLmz0blzZy1btkxffPGFAgMDNWLECO3cuVPLli3TTTfdZKJGAABQhF3WczZatmyplStXursWAACKJS9vbFz+Q702btyonTt3SrqwjqNp06ZuKwoAgOLE26dRXA4bv/76q+655x7973//U2hoqCQpLS1NzZs319tvv61rrrnG3TUCAFCkFeXFne7g8pqNhx56SNnZ2dq5c6dOnjypkydPaufOncrNzdVDDz1kokYAAFCEudzZ+Prrr7V27VrVrl3bMVa7dm1NmzZNLVu2dGtxAAAUB0yjuKhSpUr5PrwrJydHUVFRbikKAIDixLujxmVMo7z44ot64okntHHjRsfYxo0b9dRTT+mll15ya3EAAKDoK1BnIywszKkFlJmZqZiYGJUoceHj58+fV4kSJfTggw+qS5cuRgoFAKCo8vavmC9Q2JgyZYrhMgAAKL68PGsULGzEx8ebrgMAABRTl/1QL0k6e/aszp075zQWHBx8RQUBAFDcePvdKC4vEM3MzFT//v1VoUIFBQYGKiwszOkFAACc2WzueRVVLoeNoUOHavXq1Zo5c6bsdrtee+01jRo1SlFRUVqwYIGJGgEAQBHm8jTKsmXLtGDBArVp00a9e/dWy5YtVaNGDUVHR2vRokXq2bOniToBACiyvP1uFJc7GydPnlS1atUkXVifcfLkSUnSjTfeqDVr1ri3OgAAigGmUVxUrVo17d+/X5JUp04dvfvuu5IudDwufjEbAAD4fzabzS2vosrlsNG7d29t27ZNkvT000/rlVdekb+/vwYOHKghQ4a4vUAAAOC6nJwcJSYmqmrVqgoICFD16tU1ZswYWZbl2MeyLI0YMUKRkZEKCAhQXFycdu/e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S5dWdna2cnNzde+992rkyJGO7fXr13dap7Ft2zbt2bNHQUFBTsc5e/as9u7dq1OnTuno0aOKiYlxbCtRooSaNWuWZyrloq1bt8rX11etW7cucN179uzR6dOnddNNNzmNnzt3To0bN5Yk7dy506kOSYqNjS3wOS565513NHXqVO3du1cZGRk6f/68goODnfapXLmyKlas6HSe3Nxc7dq1S0FBQdq7d6/69Omjvn37OvY5f/68QkJC8j3no48+qm7dumnz5s1q3769unTpoubNm7tcO4DCRdgA8tG2bVvNnDlTfn5+ioqKUokSzn9UAgMDnd5nZGSoadOmjumBPytfvvxl1XBxWsQVGRkZkqSPP/7Y6S956cI6FHdJTk5Wz549NWrUKHXo0EEhISF6++23NXHiRJdrnTNnTp7w4+vrm+9nOnXqpAMHDuiTTz7RypUr1a5dOz3++ON66aWXLv9iABhH2ADyERgYqBo1ahR4/yZNmuidd95RhQoV8vx2f1FkZKTWrVunVq1aSbrwG/ymTZvUpEmTfPevX7++cnNz9fXXXysuLi7P9oudlZycHMdYvXr1ZLfbdfDgwUt2ROrWretY7HrRd999988X+Sdr165VdHS0nnnmGcfYgQMH8ux38OBBHTlyRFFRUY7z+Pj4qHbt2goPD1dUVJT27dunnj17Fvjc5cuXV3x8vOLj49WyZUsNGTKEsAFc5bgbBXCDnj17qly5curcubO++eYb7d+/X1999ZWefPJJ/frrr5Kkp556Ss8//7yWLl2qn376SY899tjfPiOjSpUqio+P14MPPqilS5c6jvnuu+9KkqKjo2Wz2bR8+XL99ttvysjIUFBQkAYPHqyBAwdq/vz52rt3rzZv3qxp06Zp/vz5kqRHHnlEu3fv1pAhQ7Rr1y4tXrxY8+bNc+l6a9asqYMHD+rtt9/W3r17NXXqVC1ZsiTPfv7+/oqPj9e2bdv0zTff6Mknn1T37t0VEREhSRo1apSSkpI0depU/fzzz9q+fbvmzp2rSZMm5XveESNG6L///a/27NmjHTt2aPny5apbt65LtQMofIQNwA1KlSqlNWvWqHLlyuratavq1q2rPn366OzZs45Ox6BBg3T//fcrPj5esbGxCgoK0h133PG3x505c6buvPNOPfbYY6pTp4769u2rzMxMSVLFihU1atQoPf300woPD1f//v0lSWPGjFFiYqKSkpJUt25ddezYUR9//LGqVq0q6cI6ig8++EBLly5Vw4YNNWvWLI0fP96l67399ts1cOBA9e/fX40aNdLatWuVmJiYZ78aNWqoa9euuvnmm9W+fXs1aNDA6dbWhx56SK+99prmzp2r+vXrq3Xr1po3b56j1r/y8/PT8OHD1aBBA7Vq1Uq+vr56++23XaodQOGzWZdanQYAAOAGdDYAAIBRhA0AAGAUYQMAABhF2AAAAEYRNgAAgFGEDQAAYBRhAwAAGEXYAAAARhE2AACAUYQNAABgFGEDAAAYRdgAAABG/R95qdCcUSV8KAAAAABJRU5ErkJggg==\n"},"metadata":{}}]},{"cell_type":"markdown","source":["#Compare Against Original Model (XLMT)"],"metadata":{"id":"eChrYJ67CIKw"}},{"cell_type":"code","source":["# Import necessary libraries\n","from transformers import pipeline\n","import pandas as pd\n","from sklearn.metrics import classification_report\n","\n","# Specify the path to the original model\n","original_model_path = \"cardiffnlp/twitter-xlm-roberta-base-sentiment\"\n","\n","# Create a pipeline for sentiment analysis using the original model\n","original_model = pipeline(\"sentiment-analysis\", model=original_model_path, tokenizer=original_model_path)\n","\n","# Load your test data into a DataFrame\n","test_df = pd.read_csv(\"/content/drive/MyDrive/NLP/BahasaRojakSA-RDSG1 (BYY)/Ready for XLMR Data spilts/combined_test_data.csv\")\n","\n","# Extract the text data from your test DataFrame\n","test_texts = test_df['text'].tolist()\n","true_labels = test_df['label'].tolist()\n","\n","# Make predictions on the test data\n","sentiment_predictions = original_model(test_texts)\n","\n","# Extract sentiment labels from predictions\n","predicted_labels = [prediction['label'] for prediction in sentiment_predictions]\n","\n","# Define the mapping from string labels to numerical labels\n","label_mapping = {'negative': 0, 'neutral': 1, 'positive': 1}\n","\n","# Convert predicted string labels to numerical labels\n","numerical_predicted_labels = [label_mapping[label] for label in predicted_labels]\n","\n","# Now, you can use numerical_predicted_labels in your classification report\n","print(classification_report(true_labels, numerical_predicted_labels, digits=3))"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":301,"referenced_widgets":["6132c1734528438daf7de7c052d95e2e","541f026942504723b7def86ec02bb3b5","08cae71092c74d3f89ba0d28102ce72c","4b769a69871b4262ab1fa2d016424a06","05ca86cf6d2043c4b654ceafd87f0df5","a04218b8c44c4fe98d03e43ed4e36bb4","5a0c6f70eaee43708d4b1f9d635b3647","0ef929cbb5a84718bd57f6781e759edc","8f89d090e44e454f97ed78440540bd2a","0c75379530634304a31ba0e26ad01ec7","e8756808174345eea97d6cdeed066999","51cb7959c7d74f40815c7f5f6d4176b5","8a3daf5487ac4bddb55bca40dc056f47","3e799501e5b94bab86c51fca5cbbed5e","eccc9dbe3c1145748ffb6b0b17472024","673355cda3674987a14302a72224aef7","cdcdfa65f9e746c48d86f64405a9f63b","1a3e1f9a28b9426d92df060df2f73eb9","3207a4856a454812a19c9a081c482586","bd66965dc01546b1971506754a9a3447","9aa8db16739045de8b2739119b4bc621","4f6ba7768b79451a902dad403e21a951","eb354e81c8eb47e88787bd28bad60f97","274c115a653f4213a455c9e6cbd4348e","ab4485dbaae74739b4a4495efc51db35","619fb816396a48cb9476b3b2b929ce13","755007d99b8d4437a00c3eff0abeafe5","bdae49af4a724621b4a0dafa25fbab72","68e6259c88324073a93aea82d4ca6112","6a6558c94b754315bdf55ee497f4e85f","94c39a380df5470db4e393080481a63c","1fe3c06027d64b4aa841ba8d9bbb4548","9d8ca416a1bd4d69a31a6093d341d09c","a2260f19afb4454d959907fab1fc3a0f","23823e36bd3045a4846e0d9affa7704c","6f31f604eef5483e97e2fb27bc71fb12","cc61bc54d19546f9aac8adb2b9be32ac","8893b770ebca4ed0afb55dccd6124b06","410c9d33e19b477b8645a18f0b5ece87","9892ee596862455e8d378f2b32a48a37","4ef8f10bd65b467e89f0eeb1d2b49848","07ba006e8f354d2cbccacfa714dc4165","f8deca5f73624f78a75112474f11b6eb","2589a174af534b579138d7c006e829b1"]},"id":"xl-uOrPbSrVH","executionInfo":{"status":"ok","timestamp":1703313572991,"user_tz":-480,"elapsed":80248,"user":{"displayName":"bernard byy","userId":"17104593250509139756"}},"outputId":"697a1b75-a98a-4525-c45b-a101c5b4548b"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":["config.json: 0%| | 0.00/841 [00:00<?, ?B/s]"],"application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"6132c1734528438daf7de7c052d95e2e"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["pytorch_model.bin: 0%| | 0.00/1.11G [00:00<?, ?B/s]"],"application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"51cb7959c7d74f40815c7f5f6d4176b5"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["sentencepiece.bpe.model: 0%| | 0.00/5.07M [00:00<?, ?B/s]"],"application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"eb354e81c8eb47e88787bd28bad60f97"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["special_tokens_map.json: 0%| | 0.00/150 [00:00<?, ?B/s]"],"application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"a2260f19afb4454d959907fab1fc3a0f"}},"metadata":{}},{"output_type":"stream","name":"stdout","text":[" precision recall f1-score support\n","\n"," 0 0.857 0.704 0.773 162\n"," 1 0.771 0.895 0.829 181\n","\n"," accuracy 0.805 343\n"," macro avg 0.814 0.799 0.801 343\n","weighted avg 0.812 0.805 0.802 343\n","\n"]}]},{"cell_type":"code","source":["# Extract sentiment labels from predictions and filter out 'neutral'\n","predicted_labels = [prediction['label'] for prediction in sentiment_predictions if prediction['label'] != 'neutral']\n","\n","# Filter out corresponding true labels for non-neutral predictions\n","non_neutral_indices = [i for i, prediction in enumerate(sentiment_predictions) if prediction['label'] != 'neutral']\n","true_labels_filtered = [true_labels[i] for i in non_neutral_indices]\n","\n","# Convert predicted string labels to numerical labels\n","label_mapping = {'negative': 0, 'positive': 1}\n","numerical_predicted_labels = [label_mapping[label] for label in predicted_labels]\n","\n","# Print classification report for non-neutral predictions\n","print(classification_report(true_labels_filtered, numerical_predicted_labels, digits=3))"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"_ZB_v33E0zHw","executionInfo":{"status":"ok","timestamp":1703313572992,"user_tz":-480,"elapsed":15,"user":{"displayName":"bernard byy","userId":"17104593250509139756"}},"outputId":"28fa3f3d-f1ff-4cea-f11f-f3d10f876f63"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":[" precision recall f1-score support\n","\n"," 0 0.857 0.912 0.884 125\n"," 1 0.918 0.866 0.891 142\n","\n"," accuracy 0.888 267\n"," macro avg 0.888 0.889 0.888 267\n","weighted avg 0.889 0.888 0.888 267\n","\n"]}]},{"cell_type":"code","source":["#User Input\n","# Prompt the user for input\n","user_input = input(\"Enter a sentence to analyze sentiment: \")\n","\n","# Process input with the original model\n","original_result = original_model(user_input)[0]\n","print(f\"Original model sentiment: {original_result['label']}, Score: {original_result['score']}\")\n","\n","# Process input with the tuned model\n","tuned_inputs = tuned_tokenizer(user_input, return_tensors=\"pt\", padding=True, truncation=True, max_length=256)\n","with torch.no_grad():\n"," tuned_outputs = tuned_model(**tuned_inputs)\n"," tuned_probs = torch.nn.functional.softmax(tuned_outputs.logits, dim=1)\n"," tuned_prediction = torch.argmax(tuned_probs, dim=1).item()\n","\n","# Assuming 0 is negative and 1 is positive for the tuned model\n","tuned_sentiment = 'positive' if tuned_prediction == 1 else 'negative'\n","print(f\"Tuned model sentiment: {tuned_sentiment}\")\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"_a79xlDJ2ilU","executionInfo":{"status":"ok","timestamp":1703313940955,"user_tz":-480,"elapsed":335767,"user":{"displayName":"bernard byy","userId":"17104593250509139756"}},"outputId":"508c48a6-878c-415f-ebdc-8c35bfb75986"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Enter a sentence to analyze sentiment: Tak sdp, mmg babi ni\n","Original model sentiment: negative, Score: 0.9283382892608643\n","Tuned model sentiment: negative\n"]}]},{"cell_type":"markdown","source":["#Finding Best Ensemble Combination"],"metadata":{"id":"ObiI5mS7o7xm"}},{"cell_type":"code","source":["from google.colab import drive\n","drive.mount('/content/drive')"],"metadata":{"id":"MAyPA2rOpBk0","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1703946155211,"user_tz":-480,"elapsed":2752,"user":{"displayName":"YONG YEOW BOON","userId":"16457383957868257374"}},"outputId":"6eae631e-8662-4b65-e669-45ecf0054139"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n"]}]},{"cell_type":"code","source":["from transformers import AutoTokenizer\n","from transformers import AutoModelForSequenceClassification, Trainer, TrainingArguments\n","!pip install sentencepiece"],"metadata":{"id":"CbSp0-vgpBv9","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1703956877876,"user_tz":-480,"elapsed":12456,"user":{"displayName":"YONG YEOW BOON","userId":"16457383957868257374"}},"outputId":"edfc5f02-94e6-4af6-e442-3715e12bcb4a"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Requirement already satisfied: sentencepiece in /usr/local/lib/python3.10/dist-packages (0.1.99)\n"]}]},{"cell_type":"code","source":["# V4 Model\n","model_path_v4 = '/content/drive/MyDrive/NLP/BahasaRojakSA-RDSG1 (BYY)/v4Fine-Tuned XLMT'\n","tokenizer_v4 = AutoTokenizer.from_pretrained(model_path_v4)\n","model_v4 = AutoModelForSequenceClassification.from_pretrained(model_path_v4)"],"metadata":{"id":"X80ASlN-pBtK"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# Import Twitter XLMR\n","from transformers import pipeline\n","import pandas as pd\n","import numpy as np\n","import torch\n","from sklearn.metrics import classification_report\n","\n","# Specify the path to the original model\n","original_model_path = \"cardiffnlp/twitter-xlm-roberta-base-sentiment\"\n","\n","# Create a pipeline for sentiment analysis using the original model\n","original_model = pipeline(\"sentiment-analysis\", model=original_model_path, tokenizer=original_model_path)"],"metadata":{"id":"ivf-yxvUpBqV"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# V1 Model\n","model_path_v1 = '/content/drive/MyDrive/NLP/BahasaRojakSA-RDSG1 (BYY)/Fine-Tuned XLMT'\n","tokenizer_v1 = AutoTokenizer.from_pretrained(model_path_v1)\n","model_v1 = AutoModelForSequenceClassification.from_pretrained(model_path_v1)\n","\n","# # V2 Model\n","# model_path_v2 = '/content/drive/MyDrive/NLP/Sentiment Dataset/v2Fine-Tuned XLMT'\n","# tokenizer_v2 = AutoTokenizer.from_pretrained(model_path_v2)\n","# model_v2 = AutoModelForSequenceClassification.from_pretrained(model_path_v2)\n","\n","# # V3 Model\n","# model_path_v3 = '/content/drive/MyDrive/NLP/Sentiment Dataset/v3Fine-Tuned XLMT'\n","# tokenizer_v3 = AutoTokenizer.from_pretrained(model_path_v3)\n","# model_v3 = AutoModelForSequenceClassification.from_pretrained(model_path_v3)"],"metadata":{"id":"-g4Ct7lOpBnh"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# Load your test data into a DataFrame\n","v1_test_df = pd.read_csv(\"/content/drive/MyDrive/NLP/BahasaRojakSA-RDSG1 (BYY)/Ready for XLMR Data spilts/V1/combined_test_data.csv\")\n","v2_test_df = pd.read_csv(\"/content/drive/MyDrive/NLP/BahasaRojakSA-RDSG1 (BYY)/Ready for XLMR Data spilts/V2/combined_test_data.csv\")\n","v3_test_df = pd.read_csv(\"/content/drive/MyDrive/NLP/BahasaRojakSA-RDSG1 (BYY)/Ready for XLMR Data spilts/V3/combined_test_data.csv\")\n","v4_test_df = pd.read_csv(\"/content/drive/MyDrive/NLP/BahasaRojakSA-RDSG1 (BYY)/Ready for XLMR Data spilts/V4/combined_test_data.csv\")\n","\n","# Function to split the data into half\n","def split_data(df):\n"," half_len = len(df) // 2 # Integer division to get half the length (Due to google Colab Memory Limitations)\n"," texts_half = df['text'].iloc[:half_len].tolist()\n"," labels_half = df['label'].iloc[:half_len].tolist()\n"," return texts_half, labels_half\n","\n","# Apply the function to each of your datasets\n","v1_test_texts, v1_true_labels = split_data(v1_test_df)\n","v2_test_texts, v2_true_labels = split_data(v2_test_df)\n","v3_test_texts, v3_true_labels = split_data(v3_test_df)\n","v4_test_texts, v4_true_labels = split_data(v4_test_df)"],"metadata":{"id":"QrEH4FkcpIPi"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["print(len(v3_test_texts))"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"0m2hSyylEXw9","executionInfo":{"status":"ok","timestamp":1703945551879,"user_tz":-480,"elapsed":348,"user":{"displayName":"YONG YEOW BOON","userId":"16457383957868257374"}},"outputId":"93e43c08-9bf2-45ed-c3f8-a0caedcd1992"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["343\n"]}]},{"cell_type":"code","source":["# For V1\n","v1_encodings = tokenizer_v1(v1_test_texts, truncation=True, padding=True, return_tensors='pt')\n","with torch.no_grad():\n"," v1_outputs = model_v1(**v1_encodings)\n","v1_logits = v1_outputs.logits\n","v1_preds = np.argmax(v1_logits.numpy(), axis=1)\n","\n","# # For V2\n","# v2_encodings = tokenizer_v2(v2_test_texts, truncation=True, padding=True, return_tensors='pt')\n","# with torch.no_grad():\n","# v2_outputs = model_v2(**v2_encodings)\n","# v2_logits = v2_outputs.logits\n","# v2_preds = np.argmax(v2_logits.numpy(), axis=1)\n","\n","# # For V3\n","# v3_encodings = tokenizer_v3(v3_test_texts, truncation=True, padding=True, return_tensors='pt')\n","# with torch.no_grad():\n","# v3_outputs = model_v3(**v3_encodings)\n","# v3_logits = v3_outputs.logits\n","# v3_preds = np.argmax(v3_logits.numpy(), axis=1)\n","\n","# For V4\n","v4_encodings = tokenizer_v4(v4_test_texts, truncation=True, padding=True, return_tensors='pt')\n","with torch.no_grad():\n"," v4_outputs = model_v4(**v4_encodings)\n","v4_logits = v4_outputs.logits\n","v4_preds = np.argmax(v4_logits.numpy(), axis=1)"],"metadata":{"id":"nbA51i9DpJeD","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1703946664988,"user_tz":-480,"elapsed":481167,"user":{"displayName":"YONG YEOW BOON","userId":"16457383957868257374"}},"outputId":"eabea0d9-1c81-412a-ed78-a3dd91c8ee37"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stderr","text":["Asking to truncate to max_length but no maximum length is provided and the model has no predefined maximum length. Default to no truncation.\n","Asking to truncate to max_length but no maximum length is provided and the model has no predefined maximum length. Default to no truncation.\n"]}]},{"cell_type":"code","source":["# Define a function to perform ensemble voting between two models (V3 and V4)\n","def ensemble_voting(v3_preds, v4_preds):\n"," ensemble_preds = []\n"," omitted_indices = []\n","\n"," for i, (v3_pred, v4_pred) in enumerate(zip(v3_preds, v4_preds)):\n"," # If both models agree on the prediction\n"," if v3_pred == v4_pred:\n"," ensemble_preds.append(v3_pred)\n"," else:\n"," # If models contradict each other, omit the result and record the index\n"," omitted_indices.append(i)\n","\n"," return ensemble_preds, omitted_indices\n","\n","# Apply the ensemble voting to V3 and V4 predictions\n","ensemble_preds, omitted_indices = ensemble_voting(v1_preds, v4_preds)\n","# ensemble_preds, omitted_indices = ensemble_voting(v2_preds, v4_preds)\n","# ensemble_preds, omitted_indices = ensemble_voting(v3_preds, v4_preds)\n","\n","# Omitted instances are the indices where V(n) and V4 predictions contradicted each other\n","print(f\"Indices of omitted instances: {omitted_indices}\")\n","\n","# Update your true labels to only include the instances that were not omitted\n","updated_true_labels = [label for i, label in enumerate(v1_true_labels) if i not in omitted_indices]\n","# updated_true_labels = [label for i, label in enumerate(v2_true_labels) if i not in omitted_indices]\n","# updated_true_labels = [label for i, label in enumerate(v3_true_labels) if i not in omitted_indices]\n","\n","# Calculate and print the classification report for the ensemble predictions\n","from sklearn.metrics import classification_report\n","print(classification_report(updated_true_labels, ensemble_preds, digits=3))\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"uf84Wk3Y-WwI","executionInfo":{"status":"ok","timestamp":1703946664988,"user_tz":-480,"elapsed":15,"user":{"displayName":"YONG YEOW BOON","userId":"16457383957868257374"}},"outputId":"a0e91090-2635-48f4-84a7-971c1819ef5e"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Indices of omitted instances: [7, 12, 14, 16, 27, 34, 39, 40, 52, 54, 55, 61, 65, 69, 82, 89, 91, 92, 96, 112, 113, 117, 123, 124, 128, 129, 140, 141, 148, 152, 156, 160, 163]\n"," precision recall f1-score support\n","\n"," 0 0.848 0.889 0.868 63\n"," 1 0.903 0.867 0.884 75\n","\n"," accuracy 0.877 138\n"," macro avg 0.876 0.878 0.876 138\n","weighted avg 0.878 0.877 0.877 138\n","\n"]}]},{"cell_type":"markdown","source":["#Include Original XLM-T Model into Ensemble."],"metadata":{"id":"j_Tk_uRr_vaO"}},{"cell_type":"code","source":["# For V5 (Original - XLMR Twitter)\n","v5_preds_raw = original_model(v4_test_texts)\n","\n","# Extracting predicted labels and polarity scores from the raw predictions\n","v5_labels = [pred['label'] for pred in v5_preds_raw]\n","v5_scores = [pred['score'] for pred in v5_preds_raw]"],"metadata":{"id":"7Z5dJoGZpLvy"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["def ensemble_decision(pred, v4_pred, v5_label, v5_score):\n"," # Define your label mapping for V5\n"," label_map = {\"negative\": 0, \"positive\": 1, \"neutral\": \"neutral\"}\n","\n"," # Map the V5 label to your standard format (0/1/neutral)\n"," v5_mapped_label = label_map.get(v5_label, \"neutral\")\n","\n"," if v5_mapped_label == \"neutral\":\n"," # If V5 is neutral, decide based on V1 and V4\n"," if pred == v4_pred:\n"," return pred # Both agree\n"," else:\n"," # If V1 and V4 disagree, check the polarity score of V5 for the final decision\n"," return 0 if v5_score < 0.5 else 1\n"," else:\n"," # If V5 is not neutral, proceed with normal majority voting\n"," predictions = [pred, v4_pred, v5_mapped_label]\n"," return max(set(predictions), key=predictions.count)\n","\n","# Apply the decision function to each set of predictions\n","#ensemble_preds = [ensemble_decision(v1_pred, v4_pred, v5_label, v5_score) for v1_pred, v4_pred, v5_label, v5_score in zip(v1_preds, v4_preds, v5_labels, v5_scores)]\n","#ensemble_preds = [ensemble_decision(v2_pred, v4_pred, v5_label, v5_score) for v2_pred, v4_pred, v5_label, v5_score in zip(v2_preds, v4_preds, v5_labels, v5_scores)]\n","ensemble_preds = [ensemble_decision(v3_pred, v4_pred, v5_label, v5_score) for v3_pred, v4_pred, v5_label, v5_score in zip(v3_preds, v4_preds, v5_labels, v5_scores)]\n"],"metadata":{"id":"RMFoXkPBpNbZ"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# V(n) + V4 + V5\n","from sklearn.metrics import confusion_matrix, classification_report\n","import seaborn as sns\n","import matplotlib.pyplot as plt\n","\n","# Assuming you have the true labels for your test set in a list called 'true_labels'\n","# conf_matrix = confusion_matrix(v1_true_labels, ensemble_preds)\n","conf_matrix = confusion_matrix(v3_true_labels, ensemble_preds)\n","# conf_matrix = confusion_matrix(v1_true_labels, ensemble_preds)\n","# Visualize the confusion matrix as a heatmap\n","plt.figure(figsize=(6, 4))\n","sns.heatmap(conf_matrix, annot=True, fmt='g', cmap='Blues')\n","plt.xlabel('Predicted labels')\n","plt.ylabel('True labels')\n","plt.title('Confusion Matrix')\n","plt.show()\n","\n","# Print the classification report\n","report = classification_report(v3_true_labels, ensemble_preds, digits=3)\n","print(report)"],"metadata":{"id":"CvGoUPBvpOvS"},"execution_count":null,"outputs":[]}],"metadata":{"accelerator":"GPU","colab":{"provenance":[{"file_id":"1IAA1h8u53O1hi9807u7oOFuT3728N0-n","timestamp":1703169131198},{"file_id":"12JuNVT-j_vQzIF9qEpRXFNqzKXCYgTrB","timestamp":1619639735281},{"file_id":"https://github.com/huggingface/notebooks/blob/master/transformers_doc/pytorch/custom_datasets.ipynb","timestamp":1619569772905}],"gpuType":"T4"},"kernelspec":{"display_name":"Python 3","name":"python3"},"language_info":{"name":"python"},"widgets":{"application/vnd.jupyter.widget-state+json":{"6132c1734528438daf7de7c052d95e2e":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","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_541f026942504723b7def86ec02bb3b5","IPY_MODEL_08cae71092c74d3f89ba0d28102ce72c","IPY_MODEL_4b769a69871b4262ab1fa2d016424a06"],"layout":"IPY_MODEL_05ca86cf6d2043c4b654ceafd87f0df5"}},"541f026942504723b7def86ec02bb3b5":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","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_a04218b8c44c4fe98d03e43ed4e36bb4","placeholder":"","style":"IPY_MODEL_5a0c6f70eaee43708d4b1f9d635b3647","value":"config.json: 100%"}},"08cae71092c74d3f89ba0d28102ce72c":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","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_0ef929cbb5a84718bd57f6781e759edc","max":841,"min":0,"orientation":"horizontal","style":"IPY_MODEL_8f89d090e44e454f97ed78440540bd2a","value":841}},"4b769a69871b4262ab1fa2d016424a06":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","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_0c75379530634304a31ba0e26ad01ec7","placeholder":"","style":"IPY_MODEL_e8756808174345eea97d6cdeed066999","value":" 841/841 [00:00<00:00, 43.2kB/s]"}},"05ca86cf6d2043c4b654ceafd87f0df5":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","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}},"a04218b8c44c4fe98d03e43ed4e36bb4":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","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}},"5a0c6f70eaee43708d4b1f9d635b3647":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","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":""}},"0ef929cbb5a84718bd57f6781e759edc":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","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}},"8f89d090e44e454f97ed78440540bd2a":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","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":""}},"0c75379530634304a31ba0e26ad01ec7":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","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}},"e8756808174345eea97d6cdeed066999":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","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":""}},"51cb7959c7d74f40815c7f5f6d4176b5":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","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_8a3daf5487ac4bddb55bca40dc056f47","IPY_MODEL_3e799501e5b94bab86c51fca5cbbed5e","IPY_MODEL_eccc9dbe3c1145748ffb6b0b17472024"],"layout":"IPY_MODEL_673355cda3674987a14302a72224aef7"}},"8a3daf5487ac4bddb55bca40dc056f47":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","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_cdcdfa65f9e746c48d86f64405a9f63b","placeholder":"","style":"IPY_MODEL_1a3e1f9a28b9426d92df060df2f73eb9","value":"pytorch_model.bin: 100%"}},"3e799501e5b94bab86c51fca5cbbed5e":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","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_3207a4856a454812a19c9a081c482586","max":1112271561,"min":0,"orientation":"horizontal","style":"IPY_MODEL_bd66965dc01546b1971506754a9a3447","value":1112271561}},"eccc9dbe3c1145748ffb6b0b17472024":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","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_9aa8db16739045de8b2739119b4bc621","placeholder":"","style":"IPY_MODEL_4f6ba7768b79451a902dad403e21a951","value":" 1.11G/1.11G [00:15<00:00, 52.6MB/s]"}},"673355cda3674987a14302a72224aef7":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","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}},"cdcdfa65f9e746c48d86f64405a9f63b":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","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}},"1a3e1f9a28b9426d92df060df2f73eb9":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","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":""}},"3207a4856a454812a19c9a081c482586":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","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}},"bd66965dc01546b1971506754a9a3447":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","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":""}},"9aa8db16739045de8b2739119b4bc621":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","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}},"4f6ba7768b79451a902dad403e21a951":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","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":""}},"eb354e81c8eb47e88787bd28bad60f97":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","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_274c115a653f4213a455c9e6cbd4348e","IPY_MODEL_ab4485dbaae74739b4a4495efc51db35","IPY_MODEL_619fb816396a48cb9476b3b2b929ce13"],"layout":"IPY_MODEL_755007d99b8d4437a00c3eff0abeafe5"}},"274c115a653f4213a455c9e6cbd4348e":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","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_bdae49af4a724621b4a0dafa25fbab72","placeholder":"","style":"IPY_MODEL_68e6259c88324073a93aea82d4ca6112","value":"sentencepiece.bpe.model: 100%"}},"ab4485dbaae74739b4a4495efc51db35":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","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_6a6558c94b754315bdf55ee497f4e85f","max":5069051,"min":0,"orientation":"horizontal","style":"IPY_MODEL_94c39a380df5470db4e393080481a63c","value":5069051}},"619fb816396a48cb9476b3b2b929ce13":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","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_1fe3c06027d64b4aa841ba8d9bbb4548","placeholder":"","style":"IPY_MODEL_9d8ca416a1bd4d69a31a6093d341d09c","value":" 5.07M/5.07M [00:00<00:00, 36.6MB/s]"}},"755007d99b8d4437a00c3eff0abeafe5":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","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}},"bdae49af4a724621b4a0dafa25fbab72":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","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}},"68e6259c88324073a93aea82d4ca6112":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","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":""}},"6a6558c94b754315bdf55ee497f4e85f":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","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}},"94c39a380df5470db4e393080481a63c":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","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":""}},"1fe3c06027d64b4aa841ba8d9bbb4548":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","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}},"9d8ca416a1bd4d69a31a6093d341d09c":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","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":""}},"a2260f19afb4454d959907fab1fc3a0f":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","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_23823e36bd3045a4846e0d9affa7704c","IPY_MODEL_6f31f604eef5483e97e2fb27bc71fb12","IPY_MODEL_cc61bc54d19546f9aac8adb2b9be32ac"],"layout":"IPY_MODEL_8893b770ebca4ed0afb55dccd6124b06"}},"23823e36bd3045a4846e0d9affa7704c":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","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_410c9d33e19b477b8645a18f0b5ece87","placeholder":"","style":"IPY_MODEL_9892ee596862455e8d378f2b32a48a37","value":"special_tokens_map.json: 100%"}},"6f31f604eef5483e97e2fb27bc71fb12":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","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_4ef8f10bd65b467e89f0eeb1d2b49848","max":150,"min":0,"orientation":"horizontal","style":"IPY_MODEL_07ba006e8f354d2cbccacfa714dc4165","value":150}},"cc61bc54d19546f9aac8adb2b9be32ac":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","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_f8deca5f73624f78a75112474f11b6eb","placeholder":"","style":"IPY_MODEL_2589a174af534b579138d7c006e829b1","value":" 150/150 [00:00<00:00, 8.19kB/s]"}},"8893b770ebca4ed0afb55dccd6124b06":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","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}},"410c9d33e19b477b8645a18f0b5ece87":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","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}},"9892ee596862455e8d378f2b32a48a37":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","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":""}},"4ef8f10bd65b467e89f0eeb1d2b49848":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","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}},"07ba006e8f354d2cbccacfa714dc4165":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","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":""}},"f8deca5f73624f78a75112474f11b6eb":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","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}},"2589a174af534b579138d7c006e829b1":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","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":""}}}}},"nbformat":4,"nbformat_minor":0}