{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[],"dockerImageVersionId":30919,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import os\nos.environ[\"WANDB_DISABLED\"] = \"true\"","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-03-20T08:58:14.883972Z","iopub.execute_input":"2025-03-20T08:58:14.884234Z","iopub.status.idle":"2025-03-20T08:58:14.887885Z","shell.execute_reply.started":"2025-03-20T08:58:14.884215Z","shell.execute_reply":"2025-03-20T08:58:14.887105Z"}},"outputs":[],"execution_count":2},{"cell_type":"code","source":"import torch\nfrom datasets import load_dataset, concatenate_datasets, Dataset\nfrom transformers import RobertaTokenizer, RobertaForSequenceClassification, Trainer, TrainingArguments\nfrom sklearn.metrics import accuracy_score, precision_recall_fscore_support\nfrom sklearn.model_selection import train_test_split","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-20T08:58:16.074124Z","iopub.execute_input":"2025-03-20T08:58:16.074415Z","iopub.status.idle":"2025-03-20T08:58:38.044563Z","shell.execute_reply.started":"2025-03-20T08:58:16.074363Z","shell.execute_reply":"2025-03-20T08:58:38.043904Z"}},"outputs":[],"execution_count":3},{"cell_type":"code","source":"dataset1 = load_dataset(\"ucirvine/sms_spam\", split=\"train\")\ndataset2 = load_dataset(\"AbdulHadi806/mail_spam_ham_dataset\", split=\"train\")\ndataset3 = load_dataset(\"Goodmotion/spam-mail\", split=\"train\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-20T08:59:30.465028Z","iopub.execute_input":"2025-03-20T08:59:30.465740Z","iopub.status.idle":"2025-03-20T08:59:35.033817Z","shell.execute_reply.started":"2025-03-20T08:59:30.465706Z","shell.execute_reply":"2025-03-20T08:59:35.033180Z"}},"outputs":[{"output_type":"display_data","data":{"text/plain":"README.md: 0%| | 0.00/4.98k [00:00:1: FutureWarning: `tokenizer` is deprecated and will be removed in version 5.0.0 for `Trainer.__init__`. Use `processing_class` instead.\n trainer = Trainer(\n","output_type":"stream"}],"execution_count":25},{"cell_type":"code","source":"trainer.train()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-20T09:00:25.292102Z","iopub.execute_input":"2025-03-20T09:00:25.292411Z","iopub.status.idle":"2025-03-20T09:41:59.167297Z","shell.execute_reply.started":"2025-03-20T09:00:25.292366Z","shell.execute_reply":"2025-03-20T09:41:59.166421Z"}},"outputs":[{"name":"stderr","text":"/usr/local/lib/python3.10/dist-packages/torch/nn/parallel/_functions.py:71: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n warnings.warn(\n","output_type":"stream"},{"output_type":"display_data","data":{"text/plain":"","text/html":"\n
\n \n \n [2583/2583 41:30, Epoch 3/3]\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
EpochTraining LossValidation LossAccuracyPrecisionRecallF1
10.0883000.0468180.9912820.9716090.9967640.984026
20.0250000.0111460.9976750.9967570.9946060.995680
30.0028000.0163670.9982561.0000000.9935280.996753

"},"metadata":{}},{"name":"stderr","text":"/usr/local/lib/python3.10/dist-packages/torch/nn/parallel/_functions.py:71: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n warnings.warn(\n/usr/local/lib/python3.10/dist-packages/torch/nn/parallel/_functions.py:71: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n warnings.warn(\n/usr/local/lib/python3.10/dist-packages/torch/nn/parallel/_functions.py:71: UserWarning: Was asked to gather along dimension 0, but all input tensors were scalars; will instead unsqueeze and return a vector.\n warnings.warn(\n","output_type":"stream"},{"execution_count":26,"output_type":"execute_result","data":{"text/plain":"TrainOutput(global_step=2583, training_loss=0.02921043153227737, metrics={'train_runtime': 2493.5423, 'train_samples_per_second': 16.56, 'train_steps_per_second': 1.036, 'total_flos': 1.086438169792512e+16, 'train_loss': 0.02921043153227737, 'epoch': 3.0})"},"metadata":{}}],"execution_count":26},{"cell_type":"code","source":"model.save_pretrained('fine-tuned-model')\ntokenizer.save_pretrained('fine-tuned-model')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-20T09:41:59.168522Z","iopub.execute_input":"2025-03-20T09:41:59.168860Z","iopub.status.idle":"2025-03-20T09:42:00.474231Z","shell.execute_reply.started":"2025-03-20T09:41:59.168827Z","shell.execute_reply":"2025-03-20T09:42:00.473495Z"}},"outputs":[{"execution_count":27,"output_type":"execute_result","data":{"text/plain":"('fine-tuned-model/tokenizer_config.json',\n 'fine-tuned-model/special_tokens_map.json',\n 'fine-tuned-model/vocab.json',\n 'fine-tuned-model/merges.txt',\n 'fine-tuned-model/added_tokens.json')"},"metadata":{}}],"execution_count":27},{"cell_type":"code","source":"model_name = '/kaggle/working/quantized-model'\nmodel = RobertaForSequenceClassification.from_pretrained(model_name).to(device)\ntokenizer = RobertaTokenizer.from_pretrained(model_name)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-20T09:59:23.893297Z","iopub.execute_input":"2025-03-20T09:59:23.893675Z","iopub.status.idle":"2025-03-20T09:59:24.440293Z","shell.execute_reply.started":"2025-03-20T09:59:23.893649Z","shell.execute_reply":"2025-03-20T09:59:24.439621Z"}},"outputs":[],"execution_count":39},{"cell_type":"code","source":"def predict(text):\n inputs = tokenizer(text, return_tensors=\"pt\", truncation=True, padding=True)\n \n # Move input tensors to the same device as the model\n inputs = {key: value.to(device) for key, value in inputs.items()}\n \n with torch.no_grad():\n outputs = model(**inputs)\n logits = outputs.logits\n predicted_class = torch.argmax(logits).item()\n \n return \"Spam\" if predicted_class == 1 else \"Ham\"","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-20T09:59:25.724582Z","iopub.execute_input":"2025-03-20T09:59:25.724852Z","iopub.status.idle":"2025-03-20T09:59:25.729439Z","shell.execute_reply.started":"2025-03-20T09:59:25.724832Z","shell.execute_reply":"2025-03-20T09:59:25.728585Z"}},"outputs":[],"execution_count":40},{"cell_type":"code","source":"input_text = \"Congratulations! You have won a free iPhone. Click here to claim your prize.\"\nprint(f\"Prediction: {predict(input_text)}\") # Expected output: Spam","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-20T09:59:28.380082Z","iopub.execute_input":"2025-03-20T09:59:28.380427Z","iopub.status.idle":"2025-03-20T09:59:28.396963Z","shell.execute_reply.started":"2025-03-20T09:59:28.380377Z","shell.execute_reply":"2025-03-20T09:59:28.396294Z"}},"outputs":[{"name":"stdout","text":"Prediction: Spam\n","output_type":"stream"}],"execution_count":41},{"cell_type":"code","source":"quantized_model = model.to(dtype=torch.float16, device=device)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-20T09:55:32.050426Z","iopub.execute_input":"2025-03-20T09:55:32.050729Z","iopub.status.idle":"2025-03-20T09:55:32.061012Z","shell.execute_reply.started":"2025-03-20T09:55:32.050707Z","shell.execute_reply":"2025-03-20T09:55:32.060234Z"}},"outputs":[],"execution_count":37},{"cell_type":"code","source":"quantized_model.save_pretrained('quantized-model')\ntokenizer.save_pretrained('quantized-model')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-20T09:57:11.696434Z","iopub.execute_input":"2025-03-20T09:57:11.696752Z","iopub.status.idle":"2025-03-20T09:57:12.384140Z","shell.execute_reply.started":"2025-03-20T09:57:11.696732Z","shell.execute_reply":"2025-03-20T09:57:12.383427Z"}},"outputs":[{"execution_count":38,"output_type":"execute_result","data":{"text/plain":"('quantized-model/tokenizer_config.json',\n 'quantized-model/special_tokens_map.json',\n 'quantized-model/vocab.json',\n 'quantized-model/merges.txt',\n 'quantized-model/added_tokens.json')"},"metadata":{}}],"execution_count":38},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}