{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.12.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"sourceType":"datasetVersion","sourceId":2903151,"datasetId":786319,"databundleVersionId":2950345}],"dockerImageVersionId":31328,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"! pip install transformers\n! pip install datasets\n! pip install sentence-transformers\n! pip install faiss-cpu","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-06-18T05:51:08.250388Z","iopub.execute_input":"2026-06-18T05:51:08.251323Z","iopub.status.idle":"2026-06-18T05:51:24.679734Z","shell.execute_reply.started":"2026-06-18T05:51:08.251284Z","shell.execute_reply":"2026-06-18T05:51:24.678378Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import torch\nfrom datasets import load_dataset\nfrom transformers import (\n    AutoTokenizer,\n    AutoModelForSequenceClassification,\n    TrainingArguments,\n    Trainer,\n    pipeline\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-06-18T05:51:24.682161Z","iopub.execute_input":"2026-06-18T05:51:24.682663Z","iopub.status.idle":"2026-06-18T05:51:24.688563Z","shell.execute_reply.started":"2026-06-18T05:51:24.682623Z","shell.execute_reply":"2026-06-18T05:51:24.687268Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"dataset = load_dataset(\"imdb\")\nprint(dataset)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-06-18T05:51:24.690603Z","iopub.execute_input":"2026-06-18T05:51:24.691012Z","iopub.status.idle":"2026-06-18T05:51:25.634255Z","shell.execute_reply.started":"2026-06-18T05:51:24.690980Z","shell.execute_reply":"2026-06-18T05:51:25.633304Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(dataset[\"train\"][0])\n\nprint(\"Review:\")\nprint(dataset[\"train\"][1][\"text\"])\n\nprint(\"Label:\")\nprint(dataset[\"train\"][1][\"label\"])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-06-18T05:51:25.635402Z","iopub.execute_input":"2026-06-18T05:51:25.636046Z","iopub.status.idle":"2026-06-18T05:51:25.643374Z","shell.execute_reply.started":"2026-06-18T05:51:25.636014Z","shell.execute_reply":"2026-06-18T05:51:25.642282Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from transformers import AutoTokenizer\n\n# Load BERT tokenizer\ntokenizer = AutoTokenizer.from_pretrained(\"bert-base-uncased\")\n\n# Hàm tokenize\ndef tokenize(example):\n    return tokenizer(\n        example[\"text\"],\n        truncation=True,\n        padding=\"max_length\"\n    )\n\n# Tokenize toàn bộ dataset\ntokenized_dataset = dataset.map(tokenize)\n\nprint(tokenized_dataset)\nprint(tokenized_dataset[\"train\"][0])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-06-18T05:51:25.645761Z","iopub.execute_input":"2026-06-18T05:51:25.646568Z","iopub.status.idle":"2026-06-18T05:51:26.592126Z","shell.execute_reply.started":"2026-06-18T05:51:25.646513Z","shell.execute_reply":"2026-06-18T05:51:26.591154Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!pip install accelerate\n!pip install transformers[torch]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-06-18T05:51:26.593222Z","iopub.execute_input":"2026-06-18T05:51:26.593598Z","iopub.status.idle":"2026-06-18T05:51:34.997063Z","shell.execute_reply.started":"2026-06-18T05:51:26.593557Z","shell.execute_reply":"2026-06-18T05:51:34.996156Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from transformers import AutoModelForSequenceClassification\nfrom transformers import TrainingArguments\nfrom transformers import Trainer\n\n# Load model\nmodel = AutoModelForSequenceClassification.from_pretrained(\n    \"bert-base-uncased\",\n    num_labels=2\n)\n\n# Training arguments\ntraining_args = TrainingArguments(\n    output_dir=\"./results\",\n    learning_rate=2e-5,\n    per_device_train_batch_size=8,\n    per_device_eval_batch_size=8,\n    num_train_epochs=1,          # theo đề\n    eval_strategy=\"epoch\",\n    save_strategy=\"epoch\",\n    logging_steps=100\n)\n\n# Shuffle trước khi lấy mẫu để tránh toàn bộ cùng 1 nhãn\ntrain_dataset = (\n    tokenized_dataset[\"train\"]\n    .shuffle(seed=42)\n    .select(range(2000))\n)\n\neval_dataset = (\n    tokenized_dataset[\"test\"]\n    .shuffle(seed=42)\n    .select(range(1000))\n)\n\n# Trainer\ntrainer = Trainer(\n    model=model,\n    args=training_args,\n    train_dataset=train_dataset,\n    eval_dataset=eval_dataset\n)\n\n# Train\ntrainer.train()\n\n# Evaluate\nresults = trainer.evaluate()\nprint(results)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-06-18T05:56:42.318678Z","iopub.execute_input":"2026-06-18T05:56:42.319485Z","iopub.status.idle":"2026-06-18T05:59:14.891911Z","shell.execute_reply.started":"2026-06-18T05:56:42.319450Z","shell.execute_reply":"2026-06-18T05:59:14.890853Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import numpy as np\nfrom sklearn.metrics import accuracy_score, classification_report\n\npredictions = trainer.predict(eval_dataset)\n\npreds = np.argmax(predictions.predictions, axis=1)\nlabels = predictions.label_ids\n\naccuracy = accuracy_score(labels, preds)\n\nprint(f\"Accuracy: {accuracy*100:.2f}%\")\nprint(classification_report(labels, preds))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-06-18T05:59:33.281031Z","iopub.execute_input":"2026-06-18T05:59:33.281382Z","iopub.status.idle":"2026-06-18T05:59:51.697776Z","shell.execute_reply.started":"2026-06-18T05:59:33.281353Z","shell.execute_reply":"2026-06-18T05:59:51.696904Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from transformers import AutoModelForSequenceClassification\nfrom transformers import TrainingArguments\nfrom transformers import Trainer\n\n# Load model\nmodel = AutoModelForSequenceClassification.from_pretrained(\n    \"bert-base-uncased\",\n    num_labels=2\n)\n\n# Training arguments\ntraining_args = TrainingArguments(\n    output_dir=\"./results\",\n    learning_rate=5e-5,\n    per_device_train_batch_size=8,\n    per_device_eval_batch_size=8,\n    num_train_epochs=1,          # theo đề\n    eval_strategy=\"epoch\",\n    save_strategy=\"epoch\",\n    logging_steps=100\n)\n\n# Shuffle trước khi lấy mẫu để tránh toàn bộ cùng 1 nhãn\ntrain_dataset = (\n    tokenized_dataset[\"train\"]\n    .shuffle(seed=42)\n    .select(range(2000))\n)\n\neval_dataset = (\n    tokenized_dataset[\"test\"]\n    .shuffle(seed=42)\n    .select(range(1000))\n)\n\n# Trainer\ntrainer = Trainer(\n    model=model,\n    args=training_args,\n    train_dataset=train_dataset,\n    eval_dataset=eval_dataset\n)\n\n# Train\ntrainer.train()\n\n# Evaluate\nresults = trainer.evaluate()\nprint(results)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-06-18T06:02:38.311586Z","iopub.execute_input":"2026-06-18T06:02:38.312260Z","iopub.status.idle":"2026-06-18T06:05:10.686731Z","shell.execute_reply.started":"2026-06-18T06:02:38.312225Z","shell.execute_reply":"2026-06-18T06:05:10.685939Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import numpy as np\nfrom sklearn.metrics import accuracy_score, classification_report\n\npredictions = trainer.predict(eval_dataset)\n\npreds = np.argmax(predictions.predictions, axis=1)\nlabels = predictions.label_ids\n\naccuracy = accuracy_score(labels, preds)\n\nprint(f\"Accuracy: {accuracy*100:.2f}%\")\nprint(classification_report(labels, preds))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-06-18T06:05:10.688092Z","iopub.execute_input":"2026-06-18T06:05:10.688388Z","iopub.status.idle":"2026-06-18T06:05:29.205654Z","shell.execute_reply.started":"2026-06-18T06:05:10.688360Z","shell.execute_reply":"2026-06-18T06:05:29.204562Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from transformers import AutoModelForSequenceClassification\nfrom transformers import TrainingArguments\nfrom transformers import Trainer\n\n# Load model\nmodel = AutoModelForSequenceClassification.from_pretrained(\n    \"bert-base-uncased\",\n    num_labels=2\n)\n\n# Training arguments\ntraining_args = TrainingArguments(\n    output_dir=\"./results\",\n    learning_rate=1e-5,\n    per_device_train_batch_size=8,\n    per_device_eval_batch_size=8,\n    num_train_epochs=1,          # theo đề\n    eval_strategy=\"epoch\",\n    save_strategy=\"epoch\",\n    logging_steps=100\n)\n\n# Shuffle trước khi lấy mẫu để tránh toàn bộ cùng 1 nhãn\ntrain_dataset = (\n    tokenized_dataset[\"train\"]\n    .shuffle(seed=42)\n    .select(range(2000))\n)\n\neval_dataset = (\n    tokenized_dataset[\"test\"]\n    .shuffle(seed=42)\n    .select(range(1000))\n)\n\n# Trainer\ntrainer = Trainer(\n    model=model,\n    args=training_args,\n    train_dataset=train_dataset,\n    eval_dataset=eval_dataset\n)\n\n# Train\ntrainer.train()\n\n# Evaluate\nresults = trainer.evaluate()\nprint(results)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-06-18T06:05:29.207296Z","iopub.execute_input":"2026-06-18T06:05:29.207645Z","iopub.status.idle":"2026-06-18T06:08:00.715316Z","shell.execute_reply.started":"2026-06-18T06:05:29.207614Z","shell.execute_reply":"2026-06-18T06:08:00.714469Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import numpy as np\nfrom sklearn.metrics import accuracy_score, classification_report\n\npredictions = trainer.predict(eval_dataset)\n\npreds = np.argmax(predictions.predictions, axis=1)\nlabels = predictions.label_ids\n\naccuracy = accuracy_score(labels, preds)\n\nprint(f\"Accuracy: {accuracy*100:.2f}%\")\nprint(classification_report(labels, preds))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-06-18T06:08:00.716557Z","iopub.execute_input":"2026-06-18T06:08:00.716931Z","iopub.status.idle":"2026-06-18T06:08:19.078344Z","shell.execute_reply.started":"2026-06-18T06:08:00.716901Z","shell.execute_reply":"2026-06-18T06:08:19.077621Z"}},"outputs":[],"execution_count":null}]}