{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Fake News Detection: Baseline vs. BERT\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# (1) Install dependencies (run once at the top of the notebook)\n", "!pip install -q transformers datasets scikit-learn torch matplotlib seaborn\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Using device: cpu\n" ] } ], "source": [ "# (2) Imports and Device Setup\n", "import os\n", "import pandas as pd\n", "import torch\n", "from datasets import load_dataset\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.feature_extraction.text import TfidfVectorizer\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn.pipeline import Pipeline\n", "from sklearn.metrics import (\n", " accuracy_score, \n", " f1_score, \n", " classification_report, \n", " confusion_matrix, \n", " roc_curve, \n", " auc\n", ")\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "from torch.utils.data import DataLoader\n", "from transformers import AutoTokenizer, AutoModelForSequenceClassification\n", "\n", "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", "print(\"Using device:\", device)\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "4d58cf7fc6014fffa761569ffe0a9923", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Downloading data: 0%| | 0.00/1.01M [00:00" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# (4) Baseline: TF‑IDF + Logistic Regression\n", "\n", "baseline_pipe = Pipeline([\n", " (\"tfidf\", TfidfVectorizer(\n", " stop_words=\"english\",\n", " max_features=5000,\n", " ngram_range=(1, 2)\n", " )),\n", " (\"clf\", LogisticRegression(\n", " max_iter=1000,\n", " class_weight=\"balanced\"\n", " ))\n", "])\n", "\n", "baseline_pipe.fit(X_train, y_train)\n", "y_pred_baseline = baseline_pipe.predict(X_test)\n", "\n", "acc_baseline = accuracy_score(y_test, y_pred_baseline)\n", "f1_baseline = f1_score(y_test, y_pred_baseline)\n", "probs_baseline = baseline_pipe.predict_proba(X_test)[:, 1]\n", "\n", "print(\"=== Baseline (TF‑IDF + LR) ===\")\n", "print(f\"Accuracy: {acc_baseline:.4f}\")\n", "print(f\"F1 Score: {f1_baseline:.4f}\\n\")\n", "print(\"Classification Report:\")\n", "print(classification_report(y_test, y_pred_baseline))\n", "\n", "# Baseline confusion matrix\n", "cm_base = confusion_matrix(y_test, y_pred_baseline)\n", "plt.figure(figsize=(5,4))\n", "sns.heatmap(\n", " cm_base,\n", " annot=True,\n", " fmt=\"d\",\n", " cmap=\"Blues\",\n", " xticklabels=[\"Real\", \"Fake\"],\n", " yticklabels=[\"Real\", \"Fake\"]\n", ")\n", "plt.title(\"Confusion Matrix: Baseline\")\n", "plt.xlabel(\"Predicted\")\n", "plt.ylabel(\"Actual\")\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "3b741441dfd742dab67288cb96bb39cf", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Map: 0%| | 0/8215 [00:00" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# (5) Load & Evaluate Fine‑Tuned BERT\n", "\n", "# 5.1 Load tokenizer + model from your local folder\n", "model_dir = \"../models/bert-fake-news\"\n", "tokenizer = AutoTokenizer.from_pretrained(model_dir)\n", "model = AutoModelForSequenceClassification.from_pretrained(model_dir)\n", "model = model.to(device)\n", "model.eval()\n", "\n", "# 5.2 Tokenize test set\n", "def tokenize_fn(batch):\n", " return tokenizer(\n", " batch[\"statement\"],\n", " padding=\"max_length\",\n", " truncation=True,\n", " max_length=128\n", " )\n", "\n", "# Recreate the dataset splits for BERT evaluation\n", "splits = raw[\"train\"].train_test_split(test_size=0.20, seed=42)\n", "splits[\"train\"] = splits[\"train\"].map(lambda x: {\"label\": int(x[\"label\"] <= 2)})\n", "splits[\"test\"] = splits[\"test\"].map(lambda x: {\"label\": int(x[\"label\"] <= 2)})\n", "\n", "# Apply tokenization\n", "tokenized = splits.map(tokenize_fn, batched=True)\n", "tokenized.set_format(\"torch\", columns=[\"input_ids\", \"attention_mask\", \"label\"])\n", "\n", "# 5.3 Run inference on test set\n", "test_loader = DataLoader(tokenized[\"test\"], batch_size=8)\n", "all_preds, all_probs, all_labels = [], [], []\n", "\n", "with torch.no_grad():\n", " for batch in test_loader:\n", " ids = batch[\"input_ids\"].to(device)\n", " mask = batch[\"attention_mask\"].to(device)\n", " labels = batch[\"label\"].to(device)\n", "\n", " outputs = model(ids, attention_mask=mask)\n", " logits = outputs.logits\n", " probs = torch.softmax(logits, dim=-1)\n", " preds = torch.argmax(probs, dim=-1)\n", "\n", " all_preds.extend(preds.cpu().tolist())\n", " # take probability of class “1” (fake)\n", " all_probs.extend(probs[:, 1].cpu().tolist())\n", " all_labels.extend(labels.cpu().tolist())\n", "\n", "acc_bert = accuracy_score(all_labels, all_preds)\n", "f1_bert = f1_score(all_labels, all_preds)\n", "\n", "print(\"=== BERT (fine‑tuned) ===\")\n", "print(f\"Accuracy: {acc_bert:.4f}\")\n", "print(f\"F1 Score: {f1_bert:.4f}\\n\")\n", "print(\"Classification Report:\")\n", "print(classification_report(all_labels, all_preds))\n", "\n", "# BERT confusion matrix\n", "cm_bert = confusion_matrix(all_labels, all_preds)\n", "plt.figure(figsize=(5,4))\n", "sns.heatmap(\n", " cm_bert,\n", " annot=True,\n", " fmt=\"d\",\n", " cmap=\"Greens\",\n", " xticklabels=[\"Real\", \"Fake\"],\n", " yticklabels=[\"Real\", \"Fake\"]\n", ")\n", "plt.title(\"Confusion Matrix: BERT\")\n", "plt.xlabel(\"Predicted\")\n", "plt.ylabel(\"Actual\")\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# (6) ROC Curves & AUC\n", "\n", "fpr_base, tpr_base, _ = roc_curve(y_test, probs_baseline)\n", "auc_base = auc(fpr_base, tpr_base)\n", "\n", "fpr_bert, tpr_bert, _ = roc_curve(all_labels, all_probs)\n", "auc_bert = auc(fpr_bert, tpr_bert)\n", "\n", "plt.figure(figsize=(6,5))\n", "plt.plot(fpr_base, tpr_base, label=f\"Baseline (AUC = {auc_base:.2f})\", linestyle=\"--\")\n", "plt.plot(fpr_bert, tpr_bert, label=f\"BERT (AUC = {auc_bert:.2f})\")\n", "plt.plot([0,1], [0,1], color=\"gray\", linestyle=\":\")\n", "plt.xlabel(\"False Positive Rate\")\n", "plt.ylabel(\"True Positive Rate\")\n", "plt.title(\"ROC Curve: Baseline vs. BERT\")\n", "plt.legend(loc=\"lower right\")\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\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", "
ModelAccuracyF1AUC
0TF‑IDF + LR0.5311590.5928120.544498
1BERT (fine‑tuned)0.5778970.6741830.566729
\n", "
" ], "text/plain": [ " Model Accuracy F1 AUC\n", "0 TF‑IDF + LR 0.531159 0.592812 0.544498\n", "1 BERT (fine‑tuned) 0.577897 0.674183 0.566729" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# (7) Side‑by‑Side Comparison Table\n", "\n", "comparison = pd.DataFrame([\n", " {\"Model\": \"TF‑IDF + LR\", \"Accuracy\": acc_baseline, \"F1\": f1_baseline, \"AUC\": auc_base},\n", " {\"Model\": \"BERT (fine‑tuned)\", \"Accuracy\": acc_bert, \"F1\": f1_bert, \"AUC\": auc_bert}\n", "])\n", "\n", "comparison\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/markdown": [ "\n", "## 📋 Final Summary\n", "\n", "**Baseline (TF‑IDF + Logistic Regression)** \n", "- Accuracy: 0.531 \n", "- F1 Score: 0.593 \n", "- AUC: 0.544 \n", "\n", "**BERT (fine‑tuned)** \n", "- Accuracy: 0.578 \n", "- F1 Score: 0.674 \n", "- AUC: 0.567 \n", "\n", "**Key Observation:** \n", "> BERT’s contextual embeddings led to an ~0.081 absolute improvement in F1 over the TF‑IDF baseline, at the cost of roughly 10–15× slower inference on CPU. For production, consider DistilBERT or quantized BERT to balance speed vs. accuracy.\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from IPython.display import Markdown, display\n", "\n", "display(Markdown(f\"\"\"\n", "## Final Summary\n", "\n", "**Baseline (TF‑IDF + Logistic Regression)** \n", "- Accuracy: {acc_baseline:.3f} \n", "- F1 Score: {f1_baseline:.3f} \n", "- AUC: {auc_base:.3f} \n", "\n", "**BERT (fine‑tuned)** \n", "- Accuracy: {acc_bert:.3f} \n", "- F1 Score: {f1_bert:.3f} \n", "- AUC: {auc_bert:.3f} \n", "\n", "**Key Observation:** \n", "> BERT’s contextual embeddings led to an ~{f1_bert - f1_baseline:.3f} absolute improvement in F1 over the TF‑IDF baseline, at the cost of roughly 10–15× slower inference on CPU. For production, consider DistilBERT or quantized BERT to balance speed vs. accuracy.\n", "\"\"\"))\n" ] } ], "metadata": { "kernelspec": { "display_name": "venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.2" } }, "nbformat": 4, "nbformat_minor": 2 }