diff --git "a/FineTuneAndEvaluationscores.ipynb" "b/FineTuneAndEvaluationscores.ipynb" new file mode 100644--- /dev/null +++ "b/FineTuneAndEvaluationscores.ipynb" @@ -0,0 +1,5086 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "0gF2VQ_f96of", + "outputId": "fa2f63cc-d47d-45f2-9c07-f418c7c8f5f5" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", + "google-colab 1.0.0 requires pandas==2.2.2, but you have pandas 2.2.3 which is incompatible.\n", + "torchvision 0.21.0+cu124 requires torch==2.6.0, but you have torch 2.4.1 which is incompatible.\n", + "torchaudio 2.6.0+cu124 requires torch==2.6.0, but you have torch 2.4.1 which is incompatible.\n", + "gcsfs 2025.3.2 requires fsspec==2025.3.2, but you have fsspec 2024.6.1 which is incompatible.\u001b[0m\u001b[31m\n", + "\u001b[0m" + ] + } + ], + "source": [ + "!pip install torch==2.4.1 transformers==4.44.2 datasets==3.0.1 nltk==3.9.1 pandas==2.2.3 matplotlib==3.8.4 evaluate==0.4.5 rouge_score>=0.1.2 sentence-transformers==2.7.0 -q" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "WSRNnxX7_N3f", + "outputId": "f4cd0003-bb29-47d8-8a18-2c9fb88eb863" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m91.2/91.2 kB\u001b[0m \u001b[31m8.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m821.2/821.2 MB\u001b[0m \u001b[31m1.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m393.1/393.1 MB\u001b[0m \u001b[31m1.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m8.9/8.9 MB\u001b[0m \u001b[31m121.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m23.7/23.7 MB\u001b[0m \u001b[31m95.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m897.7/897.7 kB\u001b[0m \u001b[31m60.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m571.0/571.0 MB\u001b[0m \u001b[31m1.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m200.2/200.2 MB\u001b[0m \u001b[31m6.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.1/1.1 MB\u001b[0m \u001b[31m64.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m56.3/56.3 MB\u001b[0m \u001b[31m12.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m158.2/158.2 MB\u001b[0m \u001b[31m7.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m216.6/216.6 MB\u001b[0m \u001b[31m5.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m156.8/156.8 MB\u001b[0m \u001b[31m6.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m201.3/201.3 MB\u001b[0m \u001b[31m6.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m19.7/19.7 MB\u001b[0m \u001b[31m96.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m89.3/89.3 kB\u001b[0m \u001b[31m8.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m155.7/155.7 MB\u001b[0m \u001b[31m6.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m7.5/7.5 MB\u001b[0m \u001b[31m122.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.5/3.5 MB\u001b[0m \u001b[31m100.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m12.4/12.4 MB\u001b[0m \u001b[31m115.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m6.3/6.3 MB\u001b[0m \u001b[31m116.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25h\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", + "bigframes 2.8.0 requires gcsfs!=2025.5.0,>=2023.3.0, which is not installed.\n", + "google-colab 1.0.0 requires pandas==2.2.2, but you have pandas 2.3.1 which is incompatible.\n", + "fastai 2.7.19 requires torch<2.7,>=1.10, but you have torch 2.7.1 which is incompatible.\n", + "dask-cudf-cu12 25.2.2 requires pandas<2.2.4dev0,>=2.0, but you have pandas 2.3.1 which is incompatible.\n", + "cudf-cu12 25.2.1 requires pandas<2.2.4dev0,>=2.0, but you have pandas 2.3.1 which is incompatible.\u001b[0m\u001b[31m\n", + "\u001b[0m" + ] + } + ], + "source": [ + "# Uninstall conflicting packages\n", + "!pip uninstall -y torch torchvision torchaudio pandas fsspec gcsfs -q\n", + "# Install compatible versions\n", + "!pip install torch torchvision torchaudio pandas transformers datasets nltk matplotlib evaluate rouge_score sentence-transformers -q" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "xnr7STny-GO1", + "outputId": "66f22759-c2b7-43ac-a98e-b7682c21123f" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--2025-07-13 18:15:03-- https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json\n", + "Resolving rajpurkar.github.io (rajpurkar.github.io)... 185.199.108.153, 185.199.109.153, 185.199.110.153, ...\n", + "Connecting to rajpurkar.github.io (rajpurkar.github.io)|185.199.108.153|:443... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 30288272 (29M) [application/json]\n", + "Saving to: ‘train-v1.1.json’\n", + "\n", + "train-v1.1.json 100%[===================>] 28.88M --.-KB/s in 0.08s \n", + "\n", + "2025-07-13 18:15:06 (345 MB/s) - ‘train-v1.1.json’ saved [30288272/30288272]\n", + "\n" + ] + } + ], + "source": [ + "!wget https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json -O train-v1.1.json" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ZGvxD7Aq_7r3", + "outputId": "aa48116f-e19c-47c9-8f4a-5cc7b3c13e6b" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample data: {'context': 'Architecturally, the school has a Catholic character. Atop the Main Building\\'s gold dome is a golden statue of the Virgin Mary. Immediately in front of the Main Building and facing it, is a copper statue of Christ with arms upraised with the legend \"Venite Ad Me Omnes\". Next to the Main Building is the Basilica of the Sacred Heart. Immediately behind the basilica is the Grotto, a Marian place of prayer and reflection. It is a replica of the grotto at Lourdes, France where the Virgin Mary reputedly appeared to Saint Bernadette Soubirous in 1858. At the end of the main drive (and in a direct line that connects through 3 statues and the Gold Dome), is a simple, modern stone statue of Mary.', 'qas': [{'answers': [{'answer_start': 515, 'text': 'Saint Bernadette Soubirous'}], 'question': 'To whom did the Virgin Mary allegedly appear in 1858 in Lourdes France?', 'id': '5733be284776f41900661182'}, {'answers': [{'answer_start': 188, 'text': 'a copper statue of Christ'}], 'question': 'What is in front of the Notre Dame Main Building?', 'id': '5733be284776f4190066117f'}, {'answers': [{'answer_start': 279, 'text': 'the Main Building'}], 'question': 'The Basilica of the Sacred heart at Notre Dame is beside to which structure?', 'id': '5733be284776f41900661180'}, {'answers': [{'answer_start': 381, 'text': 'a Marian place of prayer and reflection'}], 'question': 'What is the Grotto at Notre Dame?', 'id': '5733be284776f41900661181'}, {'answers': [{'answer_start': 92, 'text': 'a golden statue of the Virgin Mary'}], 'question': 'What sits on top of the Main Building at Notre Dame?', 'id': '5733be284776f4190066117e'}]}\n" + ] + } + ], + "source": [ + "import json\n", + "\n", + "with open('train-v1.1.json', 'r', encoding='utf-8') as f:\n", + " squad_data = json.load(f)\n", + "\n", + "# Print the first paragraph to inspect\n", + "print(\"Sample data:\", squad_data['data'][0]['paragraphs'][0])" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "4jUus8rH_-zw", + "outputId": "d9c06937-6bc4-4ba1-f232-398c59585f1b" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train size: 80 | Eval size: 20\n", + "First train example: {'context': \"In 1919 Father James Burns became president of Notre Dame, and in three years he produced an academic revolution that brought the school up to national standards by adopting the elective system and moving away from the university's traditional scholastic and classical emphasis. By contrast, the Jesuit colleges, bastions of academic conservatism, were reluctant to move to a system of electives. Their graduates were shut out of Harvard Law School for that reason. Notre Dame continued to grow over the years, adding more colleges, programs, and sports teams. By 1921, with the addition of the College of Commerce, Notre Dame had grown from a small college to a university with five colleges and a professional law school. The university continued to expand and add new residence halls and buildings with each subsequent president.\", 'question': 'Which college did Notre Dame add in 1921?', 'answer': 'College of Commerce'}\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "from datasets import Dataset, Features, Value\n", + "\n", + "data = []\n", + "for article in squad_data['data']:\n", + " for paragraph in article['paragraphs']:\n", + " context = paragraph['context'].strip()\n", + " for qa in paragraph['qas']:\n", + " question = qa['question'].strip()\n", + " answer = qa['answers'][0]['text'].strip() if qa['answers'] else \"\"\n", + " if context and question and answer: # Basic cleaning\n", + " data.append({\"context\": context, \"question\": question, \"answer\": answer})\n", + "\n", + "# Limit to 100 samples for quick testing\n", + "data = data[:100]\n", + "\n", + "# Create DataFrame and Dataset\n", + "df = pd.DataFrame(data)\n", + "features = Features({\n", + " \"context\": Value(\"string\"),\n", + " \"question\": Value(\"string\"),\n", + " \"answer\": Value(\"string\")\n", + "})\n", + "dataset = Dataset.from_pandas(df, features=features)\n", + "train_test_split = dataset.train_test_split(test_size=0.2, seed=42)\n", + "train_dataset = train_test_split[\"train\"]\n", + "eval_dataset = train_test_split[\"test\"]\n", + "\n", + "print(f\"Train size: {len(train_dataset)} | Eval size: {len(eval_dataset)}\")\n", + "print(\"First train example:\", train_dataset[0])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Wv0WZbb5C9jE" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000, + "referenced_widgets": [ + "81a01ed73ad14c0bb242e92fcee3691d", + "6c78eed341cc4b24989af6ab2978d68d", + "5f6f845632a146d58278487c851d94ca", + "43643ae87f094acaacb88aa65e23b7da", + "4ee01fa61c584fb891b2cecd3c5b68f9", + "e79873a3ce284af0b1cebc1f386db911", + "33f6bfbdba6542ca9767180f762ca167", + "5eb911a19df549478f4738a2d59421cc", + "272d26b935df4a66bcd567935be2a8e0", + "960769ad013f469db9e875d72f685c06", + "cb84cd598dce48ea959fcf2589423154", + "453ccc0077d341a7b11cb485b2593da5", + "a8c772a788dd46f88516694b2e2d8c5e", + "8b957ad3c1414d2697fa053434c57c7a", + "3112299bc9f746e08ceea5b06bedcdd1", + "30404b359d6f4eae88c88dda321fdf3e", + "6c725916bffe47248bfb56ccab26fff2", + "a87e71276e7c41868048650764e7c89c", + "19cf035ddf7e4c6ea3feaee497397b78", + "bc064df8f4ad43a39b6643b6dc91a08c", + "ad1ea7e2aff7420d9db6915d900cbcfb", + "faf0cadc32d547e5a15d7ecbb157a0c7" + ] + }, + "id": "Duks_ZMrDBJu", + "outputId": "5b931687-284a-4765-d80e-287e4db9e916" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[33mWARNING: Skipping gcsfs as it is not installed.\u001b[0m\u001b[33m\n", + "\u001b[0m\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", + "bigframes 2.8.0 requires gcsfs!=2025.5.0,>=2023.3.0, which is not installed.\n", + "google-colab 1.0.0 requires pandas==2.2.2, but you have pandas 2.3.1 which is incompatible.\n", + "fastai 2.7.19 requires torch<2.7,>=1.10, but you have torch 2.7.1 which is incompatible.\n", + "dask-cudf-cu12 25.2.2 requires pandas<2.2.4dev0,>=2.0, but you have pandas 2.3.1 which is incompatible.\n", + "cudf-cu12 25.2.1 requires pandas<2.2.4dev0,>=2.0, but you have pandas 2.3.1 which is incompatible.\u001b[0m\u001b[31m\n", + "\u001b[0m" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[nltk_data] Downloading package punkt to /root/nltk_data...\n", + "[nltk_data] Package punkt is already up-to-date!\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Torch version: 2.7.1+cu126\n", + "GPU available: True\n", + "--2025-07-13 18:30:27-- https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json\n", + "Resolving rajpurkar.github.io (rajpurkar.github.io)... 185.199.108.153, 185.199.109.153, 185.199.110.153, ...\n", + "Connecting to rajpurkar.github.io (rajpurkar.github.io)|185.199.108.153|:443... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 30288272 (29M) [application/json]\n", + "Saving to: ‘train-v1.1.json’\n", + "\n", + "train-v1.1.json 100%[===================>] 28.88M --.-KB/s in 0.07s \n", + "\n", + "2025-07-13 18:30:27 (443 MB/s) - ‘train-v1.1.json’ saved [30288272/30288272]\n", + "\n", + "Sample data: {'context': 'Architecturally, the school has a Catholic character. Atop the Main Building\\'s gold dome is a golden statue of the Virgin Mary. Immediately in front of the Main Building and facing it, is a copper statue of Christ with arms upraised with the legend \"Venite Ad Me Omnes\". Next to the Main Building is the Basilica of the Sacred Heart. Immediately behind the basilica is the Grotto, a Marian place of prayer and reflection. It is a replica of the grotto at Lourdes, France where the Virgin Mary reputedly appeared to Saint Bernadette Soubirous in 1858. At the end of the main drive (and in a direct line that connects through 3 statues and the Gold Dome), is a simple, modern stone statue of Mary.', 'qas': [{'answers': [{'answer_start': 515, 'text': 'Saint Bernadette Soubirous'}], 'question': 'To whom did the Virgin Mary allegedly appear in 1858 in Lourdes France?', 'id': '5733be284776f41900661182'}, {'answers': [{'answer_start': 188, 'text': 'a copper statue of Christ'}], 'question': 'What is in front of the Notre Dame Main Building?', 'id': '5733be284776f4190066117f'}, {'answers': [{'answer_start': 279, 'text': 'the Main Building'}], 'question': 'The Basilica of the Sacred heart at Notre Dame is beside to which structure?', 'id': '5733be284776f41900661180'}, {'answers': [{'answer_start': 381, 'text': 'a Marian place of prayer and reflection'}], 'question': 'What is the Grotto at Notre Dame?', 'id': '5733be284776f41900661181'}, {'answers': [{'answer_start': 92, 'text': 'a golden statue of the Virgin Mary'}], 'question': 'What sits on top of the Main Building at Notre Dame?', 'id': '5733be284776f4190066117e'}]}\n", + "Train size: 80 | Eval size: 20\n", + "First train example: {'context': \"In 1919 Father James Burns became president of Notre Dame, and in three years he produced an academic revolution that brought the school up to national standards by adopting the elective system and moving away from the university's traditional scholastic and classical emphasis. By contrast, the Jesuit colleges, bastions of academic conservatism, were reluctant to move to a system of electives. Their graduates were shut out of Harvard Law School for that reason. Notre Dame continued to grow over the years, adding more colleges, programs, and sports teams. By 1921, with the addition of the College of Commerce, Notre Dame had grown from a small college to a university with five colleges and a professional law school. The university continued to expand and add new residence halls and buildings with each subsequent president.\", 'question': 'Which college did Notre Dame add in 1921?', 'answer': 'College of Commerce'}\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/transformers/tokenization_utils_base.py:1601: FutureWarning: `clean_up_tokenization_spaces` was not set. It will be set to `True` by default. This behavior will be depracted in transformers v4.45, and will be then set to `False` by default. For more details check this issue: https://github.com/huggingface/transformers/issues/31884\n", + " warnings.warn(\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "81a01ed73ad14c0bb242e92fcee3691d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Map: 0%| | 0/80 [00:00\n", + " \n", + " \n", + " [120/120 01:00, 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", + "
EpochTraining LossValidation LossRouge1Rougel
16.2775005.7507670.3286130.298354
23.7331003.0378110.3602490.324975
33.0880002.2233820.4088790.372439

" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "There were missing keys in the checkpoint model loaded: ['encoder.embed_tokens.weight', 'decoder.embed_tokens.weight', 'lm_head.weight'].\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Running final evaluation...\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "

\n", + " \n", + " \n", + " [10/10 00:00]\n", + "
\n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Final Evaluation Results:\n", + " eval_loss: 2.223381519317627\n", + " eval_rouge1: 0.4088792920468986\n", + " eval_rougeL: 0.3724393817985359\n", + " eval_runtime: 1.9014\n", + " eval_samples_per_second: 10.519\n", + " eval_steps_per_second: 5.259\n", + " epoch: 3.0\n", + "Context: The Lobund Institute grew out of pioneering research in germ-free-life which began in 1928. This are...\n", + "Answer: The Lobund Institute\n", + "Generated Question: Lobund was the first research organization to answer whether animal life was possible without bacteria?\n", + "Reference Question: Work on a germ-free-life ended up in the creation of which Notre Dame institute?\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1cAAAHWCAYAAACbsXOkAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAko9JREFUeJzs3Xd4VGX6//H3TDLpjXQIafQighA6SnRRbGtZC7quNOu6rLpYVty1/tjlq64urquCrhRlVexrYVUWpYUQmoAiJpSQ0NII6SSZZM7vjxMmDKGbYVI+r+vi0nnOMzP3PDOE3HM/5z4WwzAMRERERERE5GexejoAERERERGRtkDJlYiIiIiISDNQciUiIiIiItIMlFyJiIiIiIg0AyVXIiIiIiIizUDJlYiIiIiISDNQciUiIiIiItIMlFyJiIiIiIg0AyVXIiIiIiIizUDJlYhIC2axWHjyySc98txLly7FYrGwdOlSjzy/yM9lsViYMmWKp8MQkXZEyZWIyEnMmzcPi8Vy3D+rV6/2dIg/yyuvvMK8efM8HYYLh8PBm2++ydChQwkPDyc4OJgePXowfvz4Vr/eJ5Kbm8vdd99NUlISvr6+REdHc80115CWlubp0I7pRH8v7r77bk+HJyJy1nl7OgARkdbi6aefJjk5ucl4t27dPBBN83nllVeIjIxk4sSJLuMXXHABhw4dwsfH56zHdO+99/Lyyy9z9dVXc8stt+Dt7U1mZib//e9/6dKlC8OGDTvrMblbWloal19+OQC33347ffr0IS8vj3nz5nH++efz4osv8vvf/97DUTZ18cUXM378+CbjPXr08EA0IiKepeRKROQUXXbZZaSkpHg6jLPGarXi5+d31p83Pz+fV155hTvuuIPXXnvN5djMmTMpLCw8a7HU1dXhcDjcnmAePHiQ66+/Hn9/f9LS0ujatavz2NSpUxk7diz3338/gwYNYsSIEW6N5UjV1dX4+PhgtR5/o0uPHj34zW9+c9ZiEhFpybQtUESkGdjtdsLDw5k0aVKTY2VlZfj5+fHggw8CUFtby+OPP86gQYMIDQ0lMDCQ888/n2+//fakzzNx4kSSkpKajD/55JNYLBaXsblz53LRRRcRHR2Nr68vffr04dVXX3WZk5SUxJYtW1i2bJlzO1dqaipw/HOu3n//fQYNGoS/vz+RkZH85je/Ye/evU3iDAoKYu/evVxzzTUEBQURFRXFgw8+SH19/QlfY3Z2NoZhMHLkyCbHLBYL0dHRLmMlJSX84Q9/cG6l69y5M+PHj6eoqMg5p6CggNtuu42YmBj8/Pzo378/8+fPd3mcXbt2YbFY+Nvf/sbMmTPp2rUrvr6+/PjjjwD89NNPXH/99YSHh+Pn50dKSgqffvqpy2PY7Xaeeuopunfvjp+fHxEREYwaNYrFixef8DXPnj2bvLw8nnvuOZfECsDf35/58+djsVh4+umnAVi3bh0Wi6XJawD46quvsFgsfP75586xvXv3MnnyZGJiYvD19aVv377MmTPH5X6H3+93332XP//5z8TFxREQEEBZWdkJYz8VqampnHPOOaxfv54RI0bg7+9PcnIys2bNajL3VN4rMLeOvvjii/Tr1w8/Pz+ioqK49NJLWbduXZO5n3zyCeecc47ztX/55Zcux8vLy7n//vtdtmNefPHFbNiw4We/dhFpX1S5EhE5RaWlpS6/sIP5y35ERAQ2m41rr72Wjz76iNmzZ7tUOj755BNqamq46aabADPZ+te//sXNN9/MHXfcQXl5OW+88QZjx45lzZo1DBgwoFniffXVV+nbty9XXXUV3t7efPbZZ9xzzz04HA5+97vfAWYl6Pe//z1BQUH86U9/AiAmJua4jzlv3jwmTZrE4MGDmTFjBvn5+bz44oukpaXx3XffERYW5pxbX1/P2LFjGTp0KH/729/43//+x/PPP0/Xrl357W9/e9znSExMBMwk7oYbbiAgIOC4cysqKjj//PPZunUrkydPZuDAgRQVFfHpp5+yZ88eIiMjOXToEKmpqWzfvp0pU6aQnJzM+++/z8SJEykpKeG+++5zecy5c+dSXV3NnXfeia+vL+Hh4WzZsoWRI0cSFxfHI488QmBgIO+99x7XXHMNH374Iddeey1gJrkzZszg9ttvZ8iQIZSVlbFu3To2bNjAxRdffNzX8dlnn+Hn58eNN954zOPJycmMGjWKb775hkOHDpGSkkKXLl147733mDBhgsvchQsX0qFDB8aOHQuYlcBhw4Y5mztERUXx3//+l9tuu42ysjLuv/9+l/v/v//3//Dx8eHBBx+kpqbmpFW76urqJn8vAEJCQlzue/DgQS6//HJuvPFGbr75Zt577z1++9vf4uPjw+TJkwFO67267bbbmDdvHpdddhm33347dXV1rFixgtWrV7tUmFeuXMlHH33EPffcQ3BwMP/4xz+47rrryM3NJSIiAoC7776bDz74gClTptCnTx8OHDjAypUr2bp1KwMHDjzh6xcRcWGIiMgJzZ071wCO+cfX19c576uvvjIA47PPPnO5/+WXX2506dLFebuurs6oqalxmXPw4EEjJibGmDx5sss4YDzxxBPO2xMmTDASExObxPjEE08YR/9Ir6qqajJv7NixLrEYhmH07dvXGD16dJO53377rQEY3377rWEYhlFbW2tER0cb55xzjnHo0CHnvM8//9wAjMcff9wlTsB4+umnXR7zvPPOMwYNGtTkuY42fvx4AzA6dOhgXHvttcbf/vY3Y+vWrU3mPf744wZgfPTRR02OORwOwzAMY+bMmQZgLFiwwHmstrbWGD58uBEUFGSUlZUZhmEY2dnZBmCEhIQYBQUFLo/1i1/8wujXr59RXV3t8vgjRowwunfv7hzr37+/ccUVV5z09R0tLCzM6N+//wnn3HvvvQZgbN682TAMw5g2bZphs9mM4uJi55yamhojLCzM5XN02223GR07djSKiopcHu+mm24yQkNDnZ+Tw+93ly5djvnZOZbj/b0AjHfeecc5b/To0QZgPP/88y6xDhgwwIiOjjZqa2sNwzj19+qbb74xAOPee+9tEtPh9/1wfD4+Psb27dudY5s2bTIA46WXXnKOhYaGGr/73e9O6TWLiJyItgWKiJyil19+mcWLF7v8+e9//+s8ftFFFxEZGcnChQudYwcPHmTx4sWMGzfOOebl5eX8Rt/hcFBcXExdXR0pKSnNug3J39/f+f+Hq26jR49m586dlJaWnvbjrVu3joKCAu655x6Xc7GuuOIKevXqxRdffNHkPkd3jDv//PPZuXPnSZ9r7ty5/POf/yQ5OZmPP/6YBx98kN69e/OLX/zCZQvihx9+SP/+/Z2VoyMd3ia5aNEiYmNjufnmm53HbDYb9957LxUVFSxbtszlftdddx1RUVHO28XFxXzzzTfceOONlJeXU1RURFFREQcOHGDs2LFs27bNGVNYWBhbtmxh27ZtJ32NRyovLyc4OPiEcw4fP7xNb9y4cdjtdj766CPnnK+//pqSkhLn580wDD788EN++ctfYhiGM/aioiLGjh1LaWlpk8/chAkTXD47J3P11Vc3+XuxePFiLrzwQpd53t7e3HXXXc7bPj4+3HXXXRQUFLB+/Xrg1N+rDz/8EIvFwhNPPNEknqO3x44ZM8Zlq+W5555LSEiIy+cwLCyMjIwM9u3bd8qvW0TkWLQtUETkFA0ZMuSEDS28vb257rrrePvtt6mpqcHX15ePPvoIu93uklwBzJ8/n+eff56ffvoJu93uHD9WN8IzlZaWxhNPPEF6ejpVVVUux0pLSwkNDT2tx8vJyQGgZ8+eTY716tWLlStXuowdPg/mSB06dODgwYMnfS6r1crvfvc7fve733HgwAHS0tKYNWsW//3vf7nppptYsWIFADt27OC66647adzdu3dv0pShd+/eLq/rsKPfg+3bt2MYBo899hiPPfbYMZ+joKCAuLg4nn76aa6++mp69OjBOeecw6WXXsqtt97Kueeee8IYg4ODKS8vP+Gcw8cPJ1n9+/enV69eLFy4kNtuuw0wtwRGRkZy0UUXAVBYWEhJSQmvvfZak+YgR8Z+otd/Mp07d2bMmDEnndepUycCAwNdxg53FNy1axfDhg075fdqx44ddOrUifDw8JM+b0JCQpOxoz+Hzz77LBMmTCA+Pp5BgwZx+eWXM378eLp06XLSxxcROZIqVyIizeimm26ivLzcWdF677336NWrF/3793fOWbBgARMnTqRr16688cYbfPnllyxevJiLLroIh8Nxwsc/+lv5w45uErFjxw5+8YtfUFRUxAsvvMAXX3zB4sWL+cMf/gBw0udpDl5eXs3yOBEREVx11VUsWrSI0aNHs3LlyiYJUXM6umpzeK0efPDBY1ZoFi9e7GzHf8EFF7Bjxw7mzJnDOeecw7/+9S8GDhzIv/71rxM+Z+/evcnMzKSmpua4czZv3ozNZqN79+7OsXHjxvHtt99SVFRETU0Nn376Kddddx3e3t4usf/mN785buxHNw45napVa3C8z6FhGM7/v/HGG9m5cycvvfQSnTp14rnnnqNv374ulWkRkVOhypWISDO64IIL6NixIwsXLnQ2IDjcKOKwDz74gC5duvDRRx+5JEvH2uJ0tA4dOlBSUtJk/Ohk47PPPnP+sn3kN/fH6kh4vITtaIcbTWRmZjorI4dlZmY6j7tTSkoKy5YtY//+/SQmJtK1a1d++OGHE94nMTGRzZs343A4XCoiP/30k/P4iRyuXthstlOq0BzuGjlp0iQqKiq44IILePLJJ7n99tuPe58rr7yS9PR03n///WO2Nd+1axcrVqxgzJgxLsnPuHHjeOqpp/jwww+JiYmhrKzM2TgFICoqiuDgYOrr608pdnfat28flZWVLtWrrKwsAGcHzFN9r7p27cpXX31FcXHxKVWvTkXHjh255557uOeeeygoKGDgwIH85S9/4bLLLmuWxxeR9kGVKxGRZmS1Wrn++uv57LPPeOutt6irq2uyJfDwN+lHfnOekZFBenr6SR+/a9eulJaWsnnzZufY/v37+fjjj0/6HKWlpcydO7fJYwYGBh4zYTtaSkoK0dHRzJo1y6XC8t///petW7dyxRVXnPQxTkVeXp6z/fmRamtrWbJkCVar1Vkpuu6669i0aVOT1w+Nr/3yyy8nLy/P5Vy4uro6XnrpJYKCghg9evQJ44mOjiY1NZXZs2ezf//+JsePvO7WgQMHXI4FBQXRrVu3E1akAO666y6io6N56KGHmpyTVl1dzaRJkzAMg8cff9zlWO/evenXrx8LFy5k4cKFdOzYkQsuuMB53MvLi+uuu44PP/zwmEno2b5m2OzZs523a2trmT17NlFRUQwaNAg49ffquuuuwzAMnnrqqSbPc+Rn/lTU19c3OQcxOjqaTp06nfR9ExE5mipXIiKn6L///a/zG/QjjRgxwuXcjHHjxvHSSy/xxBNP0K9fP+f5IoddeeWVfPTRR1x77bVcccUVZGdnM2vWLPr06UNFRcUJY7jpppv44x//yLXXXsu9995LVVUVr776Kj169HBpTHDJJZfg4+PDL3/5S+666y4qKip4/fXXiY6ObpIgDBo0iFdffZXp06fTrVs3oqOjm1SmwKzcPPPMM0yaNInRo0dz8803O1uxJyUlObcc/lx79uxhyJAhXHTRRfziF78gNjaWgoIC3nnnHTZt2sT9999PZGQkAA899BAffPABN9xwA5MnT2bQoEEUFxfz6aefMmvWLPr378+dd97J7NmzmThxIuvXrycpKYkPPviAtLQ0Zs6cedJGEmA2Mxk1ahT9+vXjjjvuoEuXLuTn55Oens6ePXvYtGkTAH369CE1NZVBgwYRHh7OunXrnC2+TyQiIoIPPviAK664goEDB3L77bfTp08f8vLymDdvHtu3b+fFF1885gWEx40bx+OPP46fnx+33XZbk/OV/u///o9vv/2WoUOHcscdd9CnTx+Ki4vZsGED//vf/yguLj7Vt+aYsrKyWLBgQZPxmJgYl/bznTp14plnnmHXrl306NGDhQsXsnHjRl577TVsNhvAKb9XF154Ibfeeiv/+Mc/2LZtG5deeikOh4MVK1Zw4YUXnnS9j1ReXk7nzp25/vrr6d+/P0FBQfzvf/9j7dq1PP/88z9rbUSkHfJUm0IRkdbiRK3YAWPu3Lku8x0OhxEfH28AxvTp05s8nsPhMP76178aiYmJhq+vr3HeeecZn3/++THbrHNUK3bDMIyvv/7aOOeccwwfHx+jZ8+exoIFC47Ziv3TTz81zj33XMPPz89ISkoynnnmGWPOnDkGYGRnZzvn5eXlGVdccYURHBxsAM627Ee3Yj9s4cKFxnnnnWf4+voa4eHhxi233GLs2bPHZc6ECROMwMDAJq/9WHEerayszHjxxReNsWPHGp07dzZsNpsRHBxsDB8+3Hj99dddWm0bhmEcOHDAmDJlihEXF2f4+PgYnTt3NiZMmODSejw/P9+YNGmSERkZafj4+Bj9+vVr8r4dbsX+3HPPHTOuHTt2GOPHjzdiY2MNm81mxMXFGVdeeaXxwQcfOOdMnz7dGDJkiBEWFmb4+/sbvXr1Mv7yl784W42fTHZ2tnHHHXcYCQkJhs1mMyIjI42rrrrKWLFixXHvs23bNudnceXKlceck5+fb/zud78z4uPjDZvNZsTGxhq/+MUvjNdee8055/D7/f77759SrIZx4lbsR7b3Hz16tNG3b19j3bp1xvDhww0/Pz8jMTHR+Oc//3nMWE/2XhmGeUmD5557zujVq5fh4+NjREVFGZdddpmxfv16l/iO1WI9MTHRmDBhgmEYZkv4hx56yOjfv78RHBxsBAYGGv379zdeeeWVU14HEZHDLIZxmvVzERERkdOQmppKUVHRSc+PExFp7XTOlYiIiIiISDNQciUiIiIiItIMlFyJiIiIiIg0A51zJSIiIiIi0gxUuRIREREREWkGSq5ERERERESagS4ifAwOh4N9+/YRHByMxWLxdDgiIiIiIuIhhmFQXl5Op06dmlyo/WhKro5h3759xMfHezoMERERERFpIXbv3k3nzp1POEfJ1TEEBwcD5gKGhIR4NBa73c7XX3/NJZdcgs1m82gsbZHW1720vu6l9XU/rbF7aX3dS+vrXlpf92pJ61tWVkZ8fLwzRzgRJVfHcHgrYEhISItIrgICAggJCfH4B6st0vq6l9bXvbS+7qc1di+tr3tpfd1L6+teLXF9T+V0ITW0EBERERERaQZKrkRERERERJqBkisREREREZFmoHOuzpBhGNTV1VFfX+/W57Hb7Xh7e1NdXe3252ovvLy88Pb2Vpt9EREREWlWSq7OQG1tLfv376eqqsrtz2UYBrGxsezevVvJQDMKCAigY8eOWlMRERERaTZKrk6Tw+EgOzsbLy8vOnXqhI+Pj1t/QXc4HFRUVBAUFHTSi5bJyRmGQW1tLYWFhWRnZ5OUlOTpkERERESkjVBydZpqa2txOBzEx8cTEBDg9udzOBzU1tbi5+en5KqZ+Pv7Y7PZyMnJwW63ezocEREREWkj9Nv6GVKi07odfv8Mw/BwJCIiIiLSVihDEBERERERaQZKrkRERERERJqBkisREREREZFmoOSqHZk4cSIWiwWLxYLNZiM5OZmHH36Y6upql3mff/45o0ePJjg4mICAAAYPHsy8efNc5ixduhSLxUJJSUmT50lKSmLmzJkuY99++y1XXnklUVFR+Pn50bVrV8aNG8fy5cubPOax/uTl5R33dS1fvpxf/vKXdOrUCYvFwieffHK6SyMiIiIi8rMpuWpnLr30Uvbv38/OnTv5+9//zuzZs3niiSecx1966SWuvvpqRo4cSUZGBps3b+amm27i7rvv5sEHHzyj53zllVf4xS9+QUREBAsXLiQzM5OPP/6YESNG8Ic//KHJ/MzMTPbv3+/yJzo6+riPX1lZSf/+/Xn55ZfPKD4RERERaVkMw8Du8HQUp0+t2JuBYRgcste75bEdDgeHauvxrq1r0qHQ3+Z12tfY8vX1JTY2FoD4+HjGjBnD4sWLeeaZZ9i9ezcPPPAA999/P3/961+d93nggQfw8fHh3nvv5YYbbmDo0KGn/Hy5ubncf//93H///bzwwgsux84991zuvffeJveJjo4mLCzslJ/jsssu47LLLjvl+SIiIiLSMtnrHSz6fj9vrNyJf42Vqz0d0GlSctUMDtnr6fP4V2f9eX98eiwBPmf+Fv7www+sWrWKxMREAD744APsdvsxK1R33XUXjz76KO+8885pJVcffvghdrudhx9++JjH3XkBZhERERFpHYora3lnTS5vpu8iv6wGAD8vC1W1dYTabB6O7tQpuWpnPv/8c4KCgqirq6Ompgar1co///lPALKysggNDaVjx45N7ufj40OXLl3Iyso6refLysoiJCTEWS0DM+GaMGGC83Z6ejr9+vVz3u7cubPLYyQmJrJly5bTel4RERERafmy8suZm5bNRxv2UlNn7gOMCvbl14M7E1WW+bMKCZ7QuqJtofxtXvz49Fi3PLbD4aC8rJzgkOBjbgs8XRdeeCGvvvoqlZWV/P3vf8fb25vrrruuucI9pqOrU2PHjmXjxo3s3buX1NRU6utdt1SuWLGC4OBg521bw7cVK1ascNn+N3v2bG655RY3Ri4iIiIizc3hMFiWVcictGxWbCtyjp8TF8Jto5K5ol8nLEY9ixZlejDKM6PkqhlYLBa3ZdUOh4M6Hy8CfLybJFdnIjAwkG7dugEwZ84c+vfvzxtvvMFtt91Gjx49KC0tZd++fXTq1MnlfrW1tezYsYMLL7wQgJCQEABKS0ubnB9VUlJCaGgoAN27d6e0tJS8vDxn9SooKIhu3brh7X3sNUtOTj7mOVcpKSls3LjReTsmJua0X7+IiIiIeEZlTR0fbdjD3LRd7CyqBMBqgbF9Y5k8KpmUxA7OL+Xtbupn4G7qFtiOWa1WHn30Uf785z9z6NAhrrvuOmw2G88//3yTubNmzaKyspKbb74ZMJMmq9XK+vXrXebt3LmT0tJSevToAcD111+PzWbjmWee+dnx+vv7061bN+efI6tbIiIiItIy7S05xIxFWxk+YwmP/WcLO4sqCfbz5o7zk1n20IW8+ptBDE4KbxPn4qty1c7dcMMNPPTQQ7z88ss8+OCDPPvsszzwwAP4+flx6623YrPZ+M9//sOjjz7KAw884GxmERwczO23384DDzyAt7c3/fr1Y/fu3fzxj39k2LBhjBgxAoCEhASef/557rvvPoqLi5k4cSLJyckUFxezYMECALy8XLc3FhQUNLn2VkREhHN74NEqKirYvn2783Z2djYbN24kPDychISEZlsrERERETk1hmGwPucgc9Ky+WpLPvUOA4CkiAAmjUzmukGdCfJte6lI23tFclq8vb2ZMmUKzz77LL/97W+5//776dKlC3/729948cUXqa+vp2/fvrz66qtMmjTJ5b4vvvgi//d//8cf//hHcnJyiI2N5eKLL+Yvf/mLyzcPv//97+nduzcvvPAC119/PWVlZURERDB8+HC+/PJLl2YW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KxERERERkWag5EpERERERKQZKLkSERERERFpBkquREREREREmoGSKxERERERkWag5EpERERERKQZKLkSERERERFpBkquREREREREmoGSKxERERERkWag5EpERERERKQZKLkSERERERFpBkquREREREREmoG3pwNoiQzDAKCsrMzDkYDdbqeqqoqysjJsNpunw2lztL7upfV1L62v+2mN3Uvr615aX/fS+rpXS1rfwznB4RzhRJRcHUN5eTkA8fHxHo5ERERERERagvLyckJDQ084x2KcSgrWzjgcDvbt20dwcDAWi8WjsZSVlREfH8/u3bsJCQnxaCxtkdbXvbS+7qX1dT+tsXtpfd1L6+teWl/3aknraxgG5eXldOrUCav1xGdVqXJ1DFarlc6dO3s6DBchISEe/2C1ZVpf99L6upfW1/20xu6l9XUvra97aX3dq6Ws78kqVoepoYWIiIiIiEgzUHIlIiIiIiLSDJRctXC+vr488cQT+Pr6ejqUNknr615aX/fS+rqf1ti9tL7upfV1L62ve7XW9VVDCxERERERkWagypWIiIiIiPz/9u49KMryiwP4dxV2uQgCIbCooXhBJcG8QHgZL6CAjiONpTjIoGmmoaNTloyTIWMzYjky1hCWoVgaJCrqlOIFXZwItRAUDBk1Mk2RtFTAS8ae3x8MW68LCvtb7t/PzI7s8553fZ4zZx85vLwrmQGbKyIiIiIiIjNgc0VERERERGQGbK6IiIiIiIjMgM1VMzpx4gSmTp0Kd3d3qFQq7N2795nn6HQ6DB06FBqNBn379kVKSopRTGJiInr16gUrKyv4+/vj9OnT5p98G9HYHO/ZswcTJ05Et27dYG9vj4CAABw6dEgRs3r1aqhUKsVjwIABTbiK1qux+dXpdEa5U6lUKCsrU8Sxhms0Nr9z5sypM7/e3t6GGNZvjbVr12LEiBGws7ODi4sLwsLCUFJS8szz0tPTMWDAAFhZWWHw4ME4cOCA4riI4P3334dWq4W1tTWCgoJw8eLFplpGq2VKfjdv3owxY8bA0dERjo6OCAoKMnrv11XjISEhTbmUVsmU/KakpBjlzsrKShHD+q1hSn7HjRtX5/47ZcoUQwzr919JSUnw8fEx/IfAAQEBOHjw4FPPaav7L5urZlRVVQVfX18kJiY2KL60tBRTpkzB+PHjUVBQgGXLlmH+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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model and tokenizer saved!\n" + ] + } + ], + "source": [ + "# Install dependencies\n", + "!pip uninstall -y torch torchvision torchaudio pandas fsspec gcsfs -q\n", + "!pip install torch torchvision torchaudio pandas transformers datasets nltk matplotlib evaluate rouge_score sentence-transformers -q\n", + "# Restart runtime after installation\n", + "\n", + "import json\n", + "import pandas as pd\n", + "from datasets import Dataset, Features, Value\n", + "from transformers import T5Tokenizer, T5ForConditionalGeneration, TrainingArguments, Trainer\n", + "import evaluate\n", + "import matplotlib.pyplot as plt\n", + "import torch\n", + "import nltk\n", + "import numpy as np # Added missing import\n", + "nltk.download('punkt')\n", + "\n", + "# Verify setup\n", + "print(f\"Torch version: {torch.__version__}\")\n", + "print(f\"GPU available: {torch.cuda.is_available()}\")\n", + "\n", + "# Step 2: Download and load dataset\n", + "!wget https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json -O train-v1.1.json\n", + "with open('train-v1.1.json', 'r', encoding='utf-8') as f:\n", + " squad_data = json.load(f)\n", + "print(\"Sample data:\", squad_data['data'][0]['paragraphs'][0])\n", + "\n", + "# Step 3: Clean and prepare dataset\n", + "data = []\n", + "for article in squad_data['data']:\n", + " for paragraph in article['paragraphs']:\n", + " context = paragraph['context'].strip()\n", + " for qa in paragraph['qas']:\n", + " question = qa['question'].strip()\n", + " answer = qa['answers'][0]['text'].strip() if qa['answers'] else \"\"\n", + " if context and question and answer:\n", + " data.append({\"context\": context, \"question\": question, \"answer\": answer})\n", + "\n", + "data = data[:100]\n", + "df = pd.DataFrame(data)\n", + "features = Features({\n", + " \"context\": Value(\"string\"),\n", + " \"question\": Value(\"string\"),\n", + " \"answer\": Value(\"string\")\n", + "})\n", + "dataset = Dataset.from_pandas(df, features=features)\n", + "train_test_split = dataset.train_test_split(test_size=0.2, seed=42)\n", + "train_dataset = train_test_split[\"train\"]\n", + "eval_dataset = train_test_split[\"test\"]\n", + "print(f\"Train size: {len(train_dataset)} | Eval size: {len(eval_dataset)}\")\n", + "print(\"First train example:\", train_dataset[0])\n", + "\n", + "# Step 4: Fine-tune the model\n", + "model_name = \"valhalla/t5-small-qg-hl\"\n", + "tokenizer = T5Tokenizer.from_pretrained(model_name)\n", + "model = T5ForConditionalGeneration.from_pretrained(model_name)\n", + "\n", + "def preprocess(examples):\n", + " inputs = [f\"generate question: {ctx} {ans}\" for ctx, ans in zip(examples['context'], examples['answer'])]\n", + " targets = examples['question']\n", + " model_inputs = tokenizer(inputs, max_length=256, truncation=True, padding=\"max_length\", return_tensors=None)\n", + " labels = tokenizer(targets, max_length=32, truncation=True, padding=\"max_length\")[\"input_ids\"]\n", + " model_inputs[\"labels\"] = labels\n", + " return model_inputs\n", + "\n", + "tokenized_train_dataset = train_dataset.map(preprocess, remove_columns=train_dataset.column_names, batched=True)\n", + "tokenized_eval_dataset = eval_dataset.map(preprocess, remove_columns=eval_dataset.column_names, batched=True)\n", + "\n", + "tokenized_train_dataset = tokenized_train_dataset.with_format(\"torch\")\n", + "tokenized_eval_dataset = tokenized_eval_dataset.with_format(\"torch\")\n", + "\n", + "training_args = TrainingArguments(\n", + " output_dir=\"./qg-finetuned\",\n", + " per_device_train_batch_size=2,\n", + " per_device_eval_batch_size=2,\n", + " num_train_epochs=3, # Increased to 3\n", + " eval_strategy=\"epoch\",\n", + " learning_rate=2e-5,\n", + " logging_dir=\"./logs\",\n", + " logging_steps=10,\n", + " save_strategy=\"epoch\",\n", + " save_total_limit=1,\n", + " fp16=True,\n", + " report_to=\"none\",\n", + " load_best_model_at_end=True,\n", + " metric_for_best_model=\"eval_loss\",\n", + " greater_is_better=False\n", + ")\n", + "\n", + "\n", + "def compute_metrics(eval_pred):\n", + " predictions, labels = eval_pred\n", + " predictions = predictions[0] if isinstance(predictions, tuple) else predictions\n", + " predictions = np.argmax(predictions, axis=-1) if predictions.ndim == 3 else predictions\n", + " labels = np.argmax(labels, axis=-1) if labels.ndim == 3 else labels\n", + "\n", + " def decode_sequences(sequences):\n", + " return [tokenizer.decode(seq, skip_special_tokens=True) for seq in sequences]\n", + "\n", + " decoded_preds = decode_sequences(predictions)\n", + " decoded_labels = decode_sequences(labels)\n", + "\n", + " rouge = evaluate.load(\"rouge\")\n", + " rouge_score = rouge.compute(predictions=decoded_preds, references=decoded_labels)\n", + "\n", + " return {\n", + " \"rouge1\": rouge_score[\"rouge1\"],\n", + " \"rougeL\": rouge_score[\"rougeL\"]\n", + " }\n", + "\n", + "trainer = Trainer(\n", + " model=model,\n", + " args=training_args,\n", + " train_dataset=tokenized_train_dataset,\n", + " eval_dataset=tokenized_eval_dataset,\n", + " compute_metrics=compute_metrics\n", + ")\n", + "\n", + "print(\"Fine-tuning started...\")\n", + "trainer.train()\n", + "print(\"Running final evaluation...\")\n", + "results = trainer.evaluate()\n", + "print(\"Final Evaluation Results:\")\n", + "for metric, score in results.items():\n", + " print(f\" {metric}: {score}\")\n", + "\n", + "# Step 5: Generate and evaluate sample questions\n", + "from transformers import GenerationConfig\n", + "model.eval()\n", + "sample = eval_dataset[0]\n", + "inputs = tokenizer(f\"generate question: {sample['context']} {sample['answer']}\", max_length=256, truncation=True, padding=\"max_length\", return_tensors=\"pt\").to(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", + "\n", + "generation_config = GenerationConfig(early_stopping=True, num_beams=5, max_length=128) # Adjusted\n", + "outputs = model.generate(**inputs, generation_config=generation_config)\n", + "generated_question = tokenizer.decode(outputs[0], skip_special_tokens=True)\n", + "\n", + "print(f\"Context: {sample['context'][:100]}...\")\n", + "print(f\"Answer: {sample['answer']}\")\n", + "print(f\"Generated Question: {generated_question}\")\n", + "print(f\"Reference Question: {sample['question']}\")\n", + "\n", + "# Step 6: Plot evaluation scores\n", + "log_history = trainer.state.log_history\n", + "epochs = [entry['epoch'] for entry in log_history if 'eval_rouge1' in entry]\n", + "rouge1_scores = [entry['eval_rouge1'] for entry in log_history if 'eval_rouge1' in entry]\n", + "rougeL_scores = [entry['eval_rougeL'] for entry in log_history if 'eval_rougeL' in entry]\n", + "\n", + "plt.figure(figsize=(10, 5))\n", + "plt.plot(epochs, rouge1_scores, label='ROUGE-1')\n", + "plt.plot(epochs, rougeL_scores, label='ROUGE-L')\n", + "plt.xlabel('Epoch')\n", + "plt.ylabel('Score')\n", + "plt.title('Evaluation Scores Over Epochs')\n", + "plt.legend()\n", + "plt.grid(True)\n", + "plt.show()\n", + "\n", + "# Step 7: Save the model\n", + "model.save_pretrained(\"./qg-finetuned/final\")\n", + "tokenizer.save_pretrained(\"./qg-finetuned/final\")\n", + "print(\"Model and tokenizer saved!\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "PLtSpaNOFLxP" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000, + "referenced_widgets": [ + "a84e34de79c140abb75f26d9f9ca64c3", + "7cd6276e65a34c4381cc3f141f7210ab", + "dd4a25ac0fe34b3cb1509487b58ffd04", + "58a2acc544464cbfa2cbde86ffcada43", + "a2795646ea33406284fdb0a68a772ce7", + "39e7157554244ec884531f94e513811e", + "352154f2bbf54326b36fc0404752b8c9", + "e4cff4262d46424297c8308e97d0be53", + "f5eb532c16ad4a2eb6b189f9b583258a", + "23a5d020f62447dab80bd7424adf14da", + "348bcd5d97c4439b805f3a306cd2dddd", + "efe1f351b01440acb9259b254b91eabc", + "f70e2f3ca60b4c37b509c3a25363a577", + "aefde5f88d1f4f12b49b123758b265fb", + "5b8ae4261cf8451192fea749e4134a56", + "298a54de277c44c19797ee16216f700d", + "24dc071b0e5a46e3a38656ac6ac756fa", + "10cdcf806dbd4875ab5597791d8c284f", + "5e5250d5fa8249148ad503d7570a5e27", + "7907da1db61c44f18d93b73fa0b6a019", + "a5f26730a83543abace4fff07987c3f7", + "d82a4b978f2b4ee7a1cd9f81850ebab9" + ] + }, + "id": "i2p85bpiFO1X", + "outputId": "dd52cfe3-5d0f-44bb-d3a0-4a162c5720c9" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[33mWARNING: Skipping gcsfs as it is not installed.\u001b[0m\u001b[33m\n", + "\u001b[0m\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", + "bigframes 2.8.0 requires gcsfs!=2025.5.0,>=2023.3.0, which is not installed.\n", + "google-colab 1.0.0 requires pandas==2.2.2, but you have pandas 2.3.1 which is incompatible.\n", + "fastai 2.7.19 requires torch<2.7,>=1.10, but you have torch 2.7.1 which is incompatible.\n", + "dask-cudf-cu12 25.2.2 requires pandas<2.2.4dev0,>=2.0, but you have pandas 2.3.1 which is incompatible.\n", + "cudf-cu12 25.2.1 requires pandas<2.2.4dev0,>=2.0, but you have pandas 2.3.1 which is incompatible.\u001b[0m\u001b[31m\n", + "\u001b[0m" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[nltk_data] Downloading package punkt to /root/nltk_data...\n", + "[nltk_data] Package punkt is already up-to-date!\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Torch version: 2.7.1+cu126\n", + "GPU available: True\n", + "--2025-07-13 18:40:38-- https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json\n", + "Resolving rajpurkar.github.io (rajpurkar.github.io)... 185.199.108.153, 185.199.109.153, 185.199.110.153, ...\n", + "Connecting to rajpurkar.github.io (rajpurkar.github.io)|185.199.108.153|:443... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 30288272 (29M) [application/json]\n", + "Saving to: ‘train-v1.1.json’\n", + "\n", + "train-v1.1.json 100%[===================>] 28.88M --.-KB/s in 0.08s \n", + "\n", + "2025-07-13 18:40:39 (360 MB/s) - ‘train-v1.1.json’ saved [30288272/30288272]\n", + "\n", + "Sample data: {'context': 'Architecturally, the school has a Catholic character. Atop the Main Building\\'s gold dome is a golden statue of the Virgin Mary. Immediately in front of the Main Building and facing it, is a copper statue of Christ with arms upraised with the legend \"Venite Ad Me Omnes\". Next to the Main Building is the Basilica of the Sacred Heart. Immediately behind the basilica is the Grotto, a Marian place of prayer and reflection. It is a replica of the grotto at Lourdes, France where the Virgin Mary reputedly appeared to Saint Bernadette Soubirous in 1858. At the end of the main drive (and in a direct line that connects through 3 statues and the Gold Dome), is a simple, modern stone statue of Mary.', 'qas': [{'answers': [{'answer_start': 515, 'text': 'Saint Bernadette Soubirous'}], 'question': 'To whom did the Virgin Mary allegedly appear in 1858 in Lourdes France?', 'id': '5733be284776f41900661182'}, {'answers': [{'answer_start': 188, 'text': 'a copper statue of Christ'}], 'question': 'What is in front of the Notre Dame Main Building?', 'id': '5733be284776f4190066117f'}, {'answers': [{'answer_start': 279, 'text': 'the Main Building'}], 'question': 'The Basilica of the Sacred heart at Notre Dame is beside to which structure?', 'id': '5733be284776f41900661180'}, {'answers': [{'answer_start': 381, 'text': 'a Marian place of prayer and reflection'}], 'question': 'What is the Grotto at Notre Dame?', 'id': '5733be284776f41900661181'}, {'answers': [{'answer_start': 92, 'text': 'a golden statue of the Virgin Mary'}], 'question': 'What sits on top of the Main Building at Notre Dame?', 'id': '5733be284776f4190066117e'}]}\n", + "Train size: 640 | Eval size: 160\n", + "First train example: {'context': 'The University of Notre Dame du Lac (or simply Notre Dame /ˌnoʊtərˈdeɪm/ NOH-tər-DAYM) is a Catholic research university located adjacent to South Bend, Indiana, in the United States. In French, Notre Dame du Lac means \"Our Lady of the Lake\" and refers to the university\\'s patron saint, the Virgin Mary. The main campus covers 1,250 acres in a suburban setting and it contains a number of recognizable landmarks, such as the Golden Dome, the \"Word of Life\" mural (commonly known as Touchdown Jesus), and the Basilica.', 'question': 'The school known as Notre Dame is known by a more lengthy name, what is it?', 'answer': 'University of Notre Dame du'}\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/transformers/tokenization_utils_base.py:1601: FutureWarning: `clean_up_tokenization_spaces` was not set. It will be set to `True` by default. This behavior will be depracted in transformers v4.45, and will be then set to `False` by default. For more details check this issue: https://github.com/huggingface/transformers/issues/31884\n", + " warnings.warn(\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "a84e34de79c140abb75f26d9f9ca64c3", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Map: 0%| | 0/640 [00:00\n", + " \n", + " \n", + " [320/320 01:02, Epoch 2/2]\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 LossRouge1Rougel
11.3599001.1235630.4682390.447952
21.1854001.0516120.4745660.454544

" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "There were missing keys in the checkpoint model loaded: ['encoder.embed_tokens.weight', 'decoder.embed_tokens.weight', 'lm_head.weight'].\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Running final evaluation...\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "

\n", + " \n", + " \n", + " [40/40 00:01]\n", + "
\n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Final Evaluation Results:\n", + " eval_loss: 1.0516119003295898\n", + " eval_rouge1: 0.47456620661431465\n", + " eval_rougeL: 0.45454379559304303\n", + " eval_runtime: 4.061\n", + " eval_samples_per_second: 39.399\n", + " eval_steps_per_second: 9.85\n", + " epoch: 2.0\n", + "Context: In 1919 Father James Burns became president of Notre Dame, and in three years he produced an academi...\n", + "Answer: three years\n", + "Generated Question: What was the name of the president of Notre Dame in 1919?\n", + "Reference Question: Over how many years did the change to national standards undertaken at Notre Dame in the early 20th century take place?\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA18AAAHWCAYAAACIZjNQAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAbrFJREFUeJzt3Xl4k1X+/vE7adKke4HSlcomiCDLCIK4IbLjF0RRQRlZRNSRioCo4IwL6AxuIIyD4DiAzM8FXBlXlEFRwKojijiOVkWQtYUC3be0eX5/lIamaZsG26Qt79d19WrzbDlPe8TePc85H5NhGIYAAAAAAA3KHOgGAAAAAMDpgPAFAAAAAH5A+AIAAAAAPyB8AQAAAIAfEL4AAAAAwA8IXwAAAADgB4QvAAAAAPADwhcAAAAA+AHhCwAAAAD8gPAFAE2YyWTSgw8+GJD33rx5s0wmkzZv3hyQ9wd+K5PJpJSUlEA3A8BphPAFAL/Rc889J5PJVOPHZ599Fugm/iZPP/20nnvuuUA3w43T6dQ///lP9evXTy1btlRERIQ6d+6siRMnNvnvd2327t2rW2+9Ve3atZPNZlNsbKzGjBmjbdu2Bbpp1artv4tbb7010M0DAL+zBLoBANBcLFiwQO3bt/fYfuaZZwagNfXn6aefVkxMjCZPnuy2/ZJLLlFhYaGCg4P93qYZM2Zo2bJluuKKKzRhwgRZLBalpaXpvffeU4cOHXT++ef7vU0Nbdu2bRo5cqQk6aabblLXrl2Vnp6u5557ThdffLGWLl2q22+/PcCt9DRkyBBNnDjRY3vnzp0D0BoACCzCFwDUkxEjRqhPnz6BbobfmM1m2e12v79vRkaGnn76aU2bNk1///vf3fYtWbJER44c8VtbSktL5XQ6GzyAHj9+XFdffbVCQkK0bds2dezY0bVv9uzZGjZsmGbOnKnevXvrggsuaNC2VFZUVKTg4GCZzTU/SNO5c2f9/ve/91ubAKAx47FDAPADh8Ohli1basqUKR77cnJyZLfbNWfOHElSSUmJ7r//fvXu3VtRUVEKCwvTxRdfrI8++sjr+0yePFnt2rXz2P7ggw/KZDK5bVu9erUuu+wyxcbGymazqWvXrlq+fLnbMe3atdN3332njz/+2PW42KWXXiqp5jlfr7zyinr37q2QkBDFxMTo97//vQ4cOODRzvDwcB04cEBjxoxReHi4WrdurTlz5qisrKzWe9y9e7cMw9CFF17osc9kMik2NtZtW1ZWlmbNmuV6VK9NmzaaOHGiMjMzXcccPnxYU6dOVVxcnOx2u3r27Kk1a9a4XWfPnj0ymUx64okntGTJEnXs2FE2m03/+9//JEk//PCDrr76arVs2VJ2u119+vTRm2++6XYNh8Oh+fPnq1OnTrLb7WrVqpUuuugibdy4sdZ7fuaZZ5Senq7HH3/cLXhJUkhIiNasWSOTyaQFCxZIkr788kuZTCaPe5Ck999/XyaTSW+//bZr24EDB3TjjTcqLi5ONptN3bp106pVq9zOq/h5r127Vn/605+UlJSk0NBQ5eTk1Nr2urj00kt1zjnnaPv27brgggsUEhKi9u3ba8WKFR7H1uVnJZU/mrp06VJ1795ddrtdrVu31vDhw/Xll196HLt+/Xqdc845rnvfsGGD2/7c3FzNnDnT7XHPIUOG6KuvvvrN9w7g9MLIFwDUk+zsbLdf6KXyMNCqVStZrVZdeeWVev311/XMM8+4jZSsX79excXFGj9+vKTyMPaPf/xD1113naZNm6bc3FytXLlSw4YN0xdffKFevXrVS3uXL1+ubt26afTo0bJYLHrrrbd02223yel0avr06ZLKR5Juv/12hYeH649//KMkKS4ursZrPvfcc5oyZYrOO+88LVy4UBkZGVq6dKm2bdumr7/+WtHR0a5jy8rKNGzYMPXr109PPPGE/v3vf2vRokXq2LGj/vCHP9T4Hm3btpVUHvKuueYahYaG1nhsXl6eLr74Yn3//fe68cYbde655yozM1Nvvvmm9u/fr5iYGBUWFurSSy/Vzz//rJSUFLVv316vvPKKJk+erKysLN1xxx1u11y9erWKiop08803y2azqWXLlvruu+904YUXKikpSXPnzlVYWJhefvlljRkzRq+99pquvPJKSeUheOHChbrpppvUt29f5eTk6Msvv9RXX32lIUOG1Hgfb731lux2u6699tpq97dv314XXXSRPvzwQxUWFqpPnz7q0KGDXn75ZU2aNMnt2HXr1qlFixYaNmyYpPKRxPPPP9+1+ETr1q313nvvaerUqcrJydHMmTPdzn/ooYcUHBysOXPmqLi42OuoX1FRkcd/F5IUGRnpdu7x48c1cuRIXXvttbruuuv08ssv6w9/+IOCg4N14403SpJPP6upU6fqueee04gRI3TTTTeptLRUW7Zs0WeffeY2Qr1161a9/vrruu222xQREaG//vWvGjt2rPbu3atWrVpJkm699Va9+uqrSklJUdeuXXX06FFt3bpV33//vc4999xa7x8A3BgAgN9k9erVhqRqP2w2m+u4999/35BkvPXWW27njxw50ujQoYPrdWlpqVFcXOx2zPHjx424uDjjxhtvdNsuyXjggQdcrydNmmS0bdvWo40PPPCAUfWf/IKCAo/jhg0b5tYWwzCMbt26GQMGDPA49qOPPjIkGR999JFhGIZRUlJixMbGGuecc45RWFjoOu7tt982JBn333+/WzslGQsWLHC75u9+9zujd+/eHu9V1cSJEw1JRosWLYwrr7zSeOKJJ4zvv//e47j777/fkGS8/vrrHvucTqdhGIaxZMkSQ5Lx/PPPu/aVlJQY/fv3N8LDw42cnBzDMAxj9+7dhiQjMjLSOHz4sNu1Bg0aZHTv3t0oKipyu/4FF1xgdOrUybWtZ8+exuWXX+71/qqKjo42evbsWesxM2bMMCQZO3fuNAzDMObNm2dYrVbj2LFjrmOKi4uN6Ohot340depUIyEhwcjMzHS73vjx442oqChXP6n4eXfo0KHavlOdmv67kGS89NJLruMGDBhgSDIWLVrk1tZevXoZsbGxRklJiWEYdf9Zffjhh4YkY8aMGR5tqvi5V7QvODjY+Pnnn13bvvnmG0OS8dRTT7m2RUVFGdOnT6/TPQNAbXjsEADqybJly7Rx40a3j/fee8+1/7LLLlNMTIzWrVvn2nb8+HFt3LhR48aNc20LCgpyjQg4nU4dO3ZMpaWl6tOnT70+5hQSEuL6umLUbsCAAfrll1+UnZ3t8/W+/PJLHT58WLfddpvbXLDLL79cXbp00TvvvONxTtUV7y6++GL98ssvXt9r9erV+tvf/qb27dvrjTfe0Jw5c3T22Wdr0KBBbo84vvbaa+rZs6dr5Kmyiscw3333XcXHx+u6665z7bNarZoxY4by8vL08ccfu503duxYtW7d2vX62LFj+vDDD3XttdcqNzdXmZmZyszM1NGjRzVs2DD99NNPrjZFR0fru+++008//eT1HivLzc1VRERErcdU7K94DHDcuHFyOBx6/fXXXcd88MEHysrKcvU3wzD02muvadSoUTIMw9X2zMxMDRs2TNnZ2R59btKkSW59x5srrrjC47+LjRs3auDAgW7HWSwW3XLLLa7XwcHBuuWWW3T48GFt375dUt1/Vq+99ppMJpMeeOABj/ZUffx28ODBbo9y9ujRQ5GRkW79MDo6Wp9//rkOHjxY5/sGgOrw2CEA1JO+ffvWuuCGxWLR2LFj9eKLL6q4uFg2m02vv/66HA6HW/iSpDVr1mjRokX64Ycf5HA4XNurW03xVG3btk0PPPCAUlNTVVBQ4LYvOztbUVFRPl3v119/lSSdddZZHvu6dOmirVu3um2rmIdTWYsWLXT8+HGv72U2mzV9+nRNnz5dR48e1bZt27RixQq99957Gj9+vLZs2SJJ2rVrl8aOHeu13Z06dfJYNOLss892u68KVX8GP//8swzD0H333af77ruv2vc4fPiwkpKStGDBAl1xxRXq3LmzzjnnHA0fPlw33HCDevToUWsbIyIilJubW+sxFfsrQljPnj3VpUsXrVu3TlOnTpVU/shhTEyMLrvsMknSkSNHlJWVpb///e8ei5dUbntt9+9NmzZtNHjwYK/HJSYmKiwszG1bxYqIe/bs0fnnn1/nn9WuXbuUmJioli1ben3fM844w2Nb1X742GOPadKkSUpOTlbv3r01cuRITZw4UR06dPB6fQCojJEvAPCj8ePHKzc31zUi9vLLL6tLly7q2bOn65jnn39ekydPVseOHbVy5Upt2LBBGzdu1GWXXSan01nr9av+Vb9C1UUsdu3apUGDBikzM1OLFy/WO++8o40bN2rWrFmS5PV96kNQUFC9XKdVq1YaPXq03n33XQ0YMEBbt271CEz1qeqoT8X3as6cOdWO8GzcuNFVbuCSSy7Rrl27tGrVKp1zzjn6xz/+oXPPPVf/+Mc/an3Ps88+W2lpaSouLq7xmJ07d8pqtapTp06ubePGjdNHH32kzMxMFRcX680339TYsWNlsVjc2v773/++xrZXXdjEl1GvpqCmfmgYhuvra6+9Vr/88oueeuopJSYm6vHHH1e3bt3cRrYBoC4Y+QIAP7rkkkuUkJCgdevWuRZIqFjIosKrr76qDh066PXXX3cLU9U9QlVVixYtlJWV5bG9ahh56623XL+MV/7Lf3UrKtYU6KqqWAgjLS3NNbJSIS0tzbW/IfXp00cff/yxDh06pLZt26pjx47673//W+s5bdu21c6dO+V0Ot1GVH744QfX/tpUjH5YrdY6jfBUrHo5ZcoU5eXl6ZJLLtGDDz6om266qcZz/u///k+pqal65ZVXql22fc+ePdqyZYsGDx7sFo7GjRun+fPn67XXXlNcXJxycnJcC7tIUuvWrRUREaGysrI6tb0hHTx4UPn5+W6jXz/++KMkuVbwrOvPqmPHjnr//fd17NixOo1+1UVCQoJuu+023XbbbTp8+LDOPfdc/fnPf9aIESPq5foATg+MfAGAH5nNZl199dV666239P/+3/9TaWmpxyOHFX+Jr/yX988//1ypqaler9+xY0dlZ2dr586drm2HDh3SG2+84fU9srOztXr1ao9rhoWFVRvoqurTp49iY2O1YsUKtxGa9957T99//70uv/xyr9eoi/T0dNfy7pWVlJRo06ZNMpvNrpGmsWPH6ptvvvG4f+nkvY8cOVLp6eluc/FKS0v11FNPKTw8XAMGDKi1PbGxsbr00kv1zDPP6NChQx77K9cdO3r0qNu+8PBwnXnmmbWOaEnSLbfcotjYWN11110ec+KKioo0ZcoUGYah+++/323f2Wefre7du2vdunVat26dEhISdMkll7j2BwUFaezYsXrttdeqDan+rpn2zDPPuF6XlJTomWeeUevWrdW7d29Jdf9ZjR07VoZhaP78+R7vU7nP10VZWZnHHMjY2FglJiZ6/bkBQFWMfAFAPXnvvfdcf4Gv7IILLnCbGzJu3Dg99dRTeuCBB9S9e3fXfJUK//d//6fXX39dV155pS6//HLt3r1bK1asUNeuXZWXl1drG8aPH6977rlHV155pWbMmKGCggItX75cnTt3dls4YejQoQoODtaoUaN0yy23KC8vT88++6xiY2M9AkTv3r21fPlyPfzwwzrzzDMVGxvrMbIllY/8PProo5oyZYoGDBig6667zrXUfLt27VyPNP5W+/fvV9++fXXZZZdp0KBBio+P1+HDh/XSSy/pm2++0cyZMxUTEyNJuuuuu/Tqq6/qmmuu0Y033qjevXvr2LFjevPNN7VixQr17NlTN998s5555hlNnjxZ27dvV7t27fTqq69q27ZtWrJkideFLqTyxVYuuugide/eXdOmTVOHDh2UkZGh1NRU7d+/X998840kqWvXrrr00kvVu3dvtWzZUl9++aVrCfPatGrVSq+++qouv/xynXvuubrpppvUtWtXpaen67nnntPPP/+spUuXVltgedy4cbr//vtlt9s1depUj/lSjzzyiD766CP169dP06ZNU9euXXXs2DF99dVX+ve//61jx47V9UdTrR9//FHPP/+8x/a4uDi35fUTExP16KOPas+ePercubPWrVunHTt26O9//7usVqsk1flnNXDgQN1www3661//qp9++knDhw+X0+nUli1bNHDgQK/f78pyc3PVpk0bXX311erZs6fCw8P173//W//5z3+0aNGi3/S9AXAaCtQyiwDQXNS21LwkY/Xq1W7HO51OIzk52ZBkPPzwwx7Xczqdxl/+8hejbdu2hs1mM373u98Zb7/9drXLyKvKUvOGYRgffPCBcc455xjBwcHGWWedZTz//PPVLjX/5ptvGj169DDsdrvRrl0749FHHzVWrVplSDJ2797tOi49Pd24/PLLjYiICEOSa9n5qkvNV1i3bp3xu9/9zrDZbEbLli2NCRMmGPv373c7ZtKkSUZYWJjHvVfXzqpycnKMpUuXGsOGDTPatGljWK1WIyIiwujfv7/x7LPPui0lbhiGcfToUSMlJcVISkoygoODjTZt2hiTJk1yW1o9IyPDmDJlihETE2MEBwcb3bt39/i5VSw1//jjj1fbrl27dhkTJ0404uPjDavVaiQlJRn/93//Z7z66quuYx5++GGjb9++RnR0tBESEmJ06dLF+POf/+xaSt2b3bt3G9OmTTPOOOMMw2q1GjExMcbo0aONLVu21HjOTz/95OqLW7durfaYjIwMY/r06UZycrJhtVqN+Ph4Y9CgQcbf//531zEVP+9XXnmlTm01jNqXmq9cvmDAgAFGt27djC+//NLo37+/YbfbjbZt2xp/+9vfqm2rt5+VYZSXbHj88ceNLl26GMHBwUbr1q2NESNGGNu3b3drX3VLyLdt29aYNGmSYRjlS97fddddRs+ePY2IiAgjLCzM6Nmzp/H000/X+fsAABVMhuHj+DsAAEA9uvTSS5WZmel1fh4ANHXM+QIAAAAAPyB8AQAAAIAfEL4AAAAAwA+Y8wUAAAAAfsDIFwAAAAD4AeELAAAAAPyAIsunyOl06uDBg4qIiJDJZAp0cwAAAAAEiGEYys3NVWJiokcx+8oIX6fo4MGDSk5ODnQzAAAAADQS+/btU5s2bWrcT/g6RREREZLKv8GRkZEBbYvD4dAHH3ygoUOH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agX4DeHLH6yh5SNQDcTpdConN1eREREyV/fYoY8GDhyo5cuXKz8/X08++aQsFovGjh1bT62tXtXRrWHDhmnHjh06cOCALr30UpWVlbnt37JliyIiIlyvKybmbtmyRSNGjHBtf+aZZzRhwoQGbDkAAL4rcpQpPbuo2nlWFduK6zBqFRocdDJUuepanaxzFRdpl5VRK6DRIHz5g8n0mx7988rplKxl5e9RNXydgrCwMJ155pmSpFWrVqlnz55auXKlpk6dqs6dOys7O1sHDx5UYqL7o5QlJSXatWuXazXCigUxsrOzPeZnZWVlKSoqSpLUqVMnZWdnKz093TX6FR4erjPPPFMWS/VdtH379tXO+erTp4927Njheh0XF+fz/QMA8FsYhqHjBY6TwarSiFXFKoFHcou9XsdkkmIjbNWsEFgesNpEhyoyxMLj+UATQvhCrcxms+69917Nnj1b119/vcaOHat77rlHixYt0qJFi9yOXbFihfLz83XddddJKg9VZrNZ27dvd80Zk6RffvlF2dnZ6ty5syTp6quv1ty5c/Xoo4/qySef/E3tDQkJcQVHAAAaQkmpU+nZJ+tYVf18MKtIhY4yr9cJsQadLBjcIkSJUSfDVZsTo1bBFkatgOaE8AWvrrnmGt11111atmyZ5syZo8cee0x33nmn7Ha7brjhBlmtVv3rX//SvffeqzvvvNO12EZERIRuuukm3XnnnbJYLOrevbv27dune+65R+eff74uuOACSdIZZ5yhRYsW6Y477tCxY8c0efJktW/fXseOHdPzzz8vSQoKcq9Yf/jwYRUVFblta9WqVa11QbKzs91GxSrOSU5O/q3fIgBAM2EYhrILHScLBh8v0MFKQetgVqEO5xbL8L76ulqfGLVqU/EoYKVFLJKiQxQdamXUCjjNEL7glcViUUpKih577DH94Q9/0MyZM9WhQwc98cQTWrp0qavI8vLlyzVlyhS3c5cuXapHHnlE99xzj3799VfFx8dryJAh+vOf/+z2P5zbb79dZ599thYvXqyrr75aOTk5atWqlfr3768NGza4LbYhSWeddZZHO1NTU3X++efXeB+bN2/W7373O7dtU6dO1T/+8Y9T+bYAAJogR5nTNdfqYHaVgsEnPvJLvI9a2SxmtxUBKxcMTmoRovgou2yWIK/XAXB6MRlGXf52g6pycnIUFRWl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AAAAoIqAPnY4e/ZsTZo0SX369FHfvn21ZMkS5efnu1Y/nDhxopKSkrRw4ULZ7Xadc845budHR0dLktv2u+66S+PGjdMll1yigQMHasOGDXrrrbe0efNmSeUjaC+++KJGjhypVq1aaefOnZo1a5YuueQS9ejRwy/3DQAAAOD0E9DwNW7cOB05ckT333+/0tPT1atXL23YsMG1CMfevXtlNvs2OHfllVdqxYoVWrhwoWbMmKGzzjpLr732mi666CJJ5SNu//73v11BLzk5WWPHjtWf/vSner8/AAAAAKgQ8AU3UlJSlJKSUu2+itGqmjz33HPVbr/xxht14403VrsvOTlZH3/8sS9NBAAAAIDfLGBzvgAAAADgdEL4AgAAAAA/IHwBAAAAgB8QvgAAAADADwhfAAAAAOAHhC8AAAAA8APCFwAAAAD4AeELAAAAAPyA8AUAAAAAfkD4AgAAAAA/IHwBAAAAgB8QvgAAAADADwhfAAAAAOAHhC8AAAAA8APCFwAAAAD4AeELAAAAAPyA8AUAAAAAfkD4AgAAAAA/IHwBAAAAgB8QvgAAAADADwhfAAAAAOAHhC8AAAAA8APCFwAAAAD4AeELAAAAAPyA8AUAAAAAfvCbwldJSYnS0tJUWlpaX+0BAAAAgGbplMJXQUGBpk6dqtDQUHXr1k179+6VJN1+++165JFH6rWBAAAAANAcnFL4mjdvnr755htt3rxZdrvdtX3w4MFat25dvTUOAAAAAJoLy6mctH79eq1bt07nn3++TCaTa3u3bt20a9euemscAAAAADQXpzTydeTIEcXGxnpsz8/PdwtjAAAAAIBypxS++vTpo3feecf1uiJw/eMf/1D//v3rp2UAAAAA0Iyc0mOHf/nLXzRixAj973//U2lpqZYuXar//e9/+vTTT/Xxxx/XdxsBAAAAoMk7pZGviy66SN98841KS0vVvXt3ffDBB4qNjVVqaqp69+5d320EAAAAgCbP55Evh8OhW265Rffdd5+effbZhmgTAAAAADQ7Po98Wa1Wvfbaaw3RFgAAAABotk7pscMxY8Zo/fr19dwUAAAAAGi+TmnBjU6dOmnBggXatm2bevfurbCwMLf9M2bMqJfGAQAAAEBzcUrha+XKlYqOjtb27du1fft2t30mk4nwBQAAAABVnFL42r17d323AwAAAACatVOa81WZYRgyDKM+2gIAAAAAzdYph69//vOf6t69u0JCQhQSEqIePXro//2//1efbQMAAACAZuOUHjtcvHix7rvvPqWkpOjCCy+UJG3dulW33nqrMjMzNWvWrHptJAAAAAA0dacUvp566iktX75cEydOdG0bPXq0unXrpgcffJDwBQAAAABVnNJjh4cOHdIFF1zgsf2CCy7QoUOHfnOjAAAAAKC5OaXwdeaZZ+rll1/22L5u3Tp16tTpNzcKAAAAAJqbU3rscP78+Ro3bpw++eQT15yvbdu2adOmTdWGMgAAAAA43Z3SyNfYsWP1+eefKyYmRuvXr9f69esVExOjL774QldeeWV9txEAAAAAmrxTGvmSpN69e+v555+vz7YAAAAAQLN1SiNf7777rt5//32P7e+//77ee++939woAAAAAGhuTil8zZ07V2VlZR7bDcPQ3Llzf3OjAAAAAKC5OaXw9dNPP6lr164e27t06aKff/75NzcKAAAAAJqbUwpfUVFR+uWXXzy2//zzzwoLC/vNjQIAAACA5uaUwtcVV1yhmTNnateuXa5tP//8s+68806NHj263hoHAAAAAM3FKYWvxx57TGFhYerSpYvat2+v9u3bq0uXLmrVqpWeeOKJ+m4jAAAAADR5p7TUfFRUlD799FNt3LhR33zzjUJCQtSzZ09dfPHF9d0+AAAAAGgWfBr5Sk1N1dtvvy1JMplMGjp0qGJjY/XEE09o7Nixuvnmm1VcXOxTA5YtW6Z27drJbrerX79++uKLL+p03tq1a2UymTRmzBiPfd9//71Gjx6tqKgohYWF6bzzztPevXtd+4uKijR9+nS1atVK4eHhGjt2rDIyMnxqNwAAAAD4wqfwtWDBAn333Xeu199++62mTZumIUOGaO7cuXrrrbe0cOHCOl9v3bp1mj17th544AF99dVX6tmzp4YNG6bDhw/Xet6ePXs0Z86cakfadu3apYsuukhdunTR5s2btXPnTt13332y2+2uY2bNmqW33npLr7zyij7++GMdPHhQV111VZ3bDQAAAAC+8il87dixQ4MGDXK9Xrt2rfr27atnn31Ws2fP1l//+le9/PLLdb7e4sWLNW3aNE2ZMkVdu3bVihUrFBoaqlWrVtV4TllZmSZMmKD58+erQ4cOHvv/+Mc/auTIkXrsscf0u9/9Th07dtTo0aMVGxsrScrO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tWOp+SbGZDLpjTfe0JgxY2o85p577tE777zj1tHGjx+vrKwsbdiwwQ+tRGNRl/5SnW7dumncuHG6//77G6ZhaLR86TPjx49Xp06dFBQUpPXr12vHjh0N3j40PnXpMxs2bND48eP1yy+/qGXLlv5rHBqluvSZJ554QsuXL9euXbtc25566ik9+uij2r9/vx9aicbmyJEjio2N1ccff6xLLrmk2mPGjRun/Px8vf32265t559/vnr16qUVK1b4q6m1YuSrGUpNTdXgwYPdtg0bNkypqakBahGaEqfTqdzcXH5BQq1Wr16tX375RQ888ECgm4Im4M0331SfPn302GOPKSkpSZ07d9acOXNUWFgY6Kahkerfv7/27dund999V4ZhKCMjQ6+++qpGjhwZ6KYhQLKzsyWp1t9PmsLvwJZANwD1Lz09XXFxcW7b4uLilJOTo8LCQoWEhASoZWgKnnjiCeXl5enaa68NdFPQSP3000+aO3eutmzZIouF/43Au19++UVbt26V3W7XG2+8oczMTN122206evSoVq9eHejmoRG68MIL9cILL2jcuHEqKipSaWmpRo0a5fPj0WgenE6nZs6cqQsvvFDnnHNOjcfV9Dtwenp6Qzexzhj5AuDy4osvav78+Xr55ZcVGxsb6OagESorK9P111+v+fPnq3PnzoFuDpoIp9Mpk8mkF154QX379tXIkSO1ePFirVmzhtEvVOt///uf7rjjDt1///3avn27NmzYoD179ujWW28NdNMQANOnT9d///tfrV27NtBN+c34k2UzFB8fr4yMDLdtGRkZioyMZNQLNVq7dq1uuukmvfLKKx5D9kCF3Nxcffnll/r666+VkpIiqfwXa8MwZLFY9MEHH+iyyy4LcCvR2CQkJCgpKUlRUVGubWeffbYMw9D+/fvVqVOnALYOjdHChQt14YUX6q677pIk9ejRQ2FhYbr44ov18MMPKyEhIcAthL+kpKTo7bff1ieffKI2bdrUemxNvwPHx8c3ZBN9wshXM9S/f39t2rTJbdvGjRvVv3//ALUIjd1LL72kKVOm6KWXXtLll18e6OagEYuMjNS3336rHTt2uD5uvfVWnXXWWdqxY4f69esX6CaiEbrwwgt18OBB5eXlubb9+OOPMpvNXn+ZwumpoKBAZrP7r6lBQUGSJNaKOz0YhqGUlBS98cYb+vDDD9W+fXuv5zSF34EZ+WoC8vLy9PPPP7te7969Wzt27FDLli11xhlnaN68eTpw4ID++c9/SpJuvfVW/e1vf9Pdd9+tG2+8UR9++KFefvllvfPOO4G6BfiRr/3lxRdf1KRJk7R06VL169fP9Vx0SEiI21+p0Xz50mfMZrPH8/axsbGy2+21PoeP5sXXf2euv/56PfTQQ5oyZYrmz5+vzMxM3XXXXbrxxht5IuM04WufGTVqlKZNm6bly5dr2LBhOnTokGbOnKm+ffsqMTExULcBP5o+fbpefPFF/etf/1JERITr95OoqCjXvxsTJ05UUlKSFi5cKEm64447NGDAAC1atEiXX3651q5dqy+//FJ///vfA3YfHgw0eh999JEhyeNj0qRJhmEYxqRJk4wBAwZ4nNOrVy8jODjY6NChg7F69Wq/txuB4Wt/GTBgQK3Ho/k7lX9jKnvggQeMnj17+qWtaBxOpc98//33xuDBg42QkBCjTZs2xuzZs42CggL/Nx4BcSp95q9//avRtWtXIyQkxEhISDAmTJhg7N+/3/+NR0BU118kuf1OO2DAAI/fV15++WWjc+fORnBwsNGtWzfjnXfe8W/DvaDOFwAAAAD4AXO+AAAAAMAPCF8AAAAA4AeELwAAAADwA8IXAAAAAPgB4QsAAAAA/IDwBQAAAAB+QPgCAAAAAD8gfAEAAACAHxC+AADwM5PJpPXr1we6GQAAPyN8AQBOK5MnT5bJZPL4GD58eKCbBgBo5iyBbgAAAP42fPhwrV692m2bzWYLUGsAAKcLRr4AAKcdm82m+Ph4t48WLVpIKn8kcPny5RoxYoRCQkLUoUMHvfrqq27nf/vtt7rssssUEhKiVq1a6eabb1ZeXp7bMatWrVK3bt1ks9mUkJCglJQUt/2ZmZm68sorFRoaqk6dOunNN99s2JsGAAQc4QsAgCruu+8+jR07Vt98840mTJig8ePH6/vvv5ck5efna9iwYWrRooX+85//6JVXXtG///1vt3C1fPlyTZ8+XTfffLO+/fZbvfnmmzrzzDPd3mP+/Pm69tprtXPnTo0cOVITJkzQsWPH/HqfAAD/MhmGYQS6EQAA+MvkyZP1/PPPy263u22/9957de+998pkMunWW2/V8uXLXfvOP/98nXvuuXr66af17LPP6p577tG+ffsUFhYmSXr33Xc1atQoHTx4UHFxcUpKStKUKVP08MMPV9sGk8mkP/3pT3rooYcklQe68PBwvffee8w9A4BmjDlfAIDTzsCBA93ClSS1bNnS9XX//v3d9vXv3187duyQJH3//ffq2bOnK3hJ0oUXXiin06m0tDSZTCYdPHhQgwYNqrUNPXr0cH0dFhamyMhIHT58+FRvCQDQBBC+AACnnbCwMI/HAOtLSEhInY6zWq1ur00mk5xOZ0M0CQDQSDDnCwCAKj777DOP12effbYk6eyzz9Y333yj/Px81/5t27bJbDbrrLPOUkREhNq1a6dNmzb5tc0AgMaPkS8AwGmnuLhY6enpbtssFotiYmIkSa+88or69Omjiy66SC+88IK++OILrVy5UpI0YcIEPfDAA5o0aZIefPBBHTlyRLfffrtuuOEGxcXFSZIefPBB3XrrrYqNjdWIESOUm5urbdu26fbbb/fvjQIAGhXCFwDgtLNhwwYlJCS4bTvrrLP0ww8/SCpfiXDt2rW67bbblJCQoJdeekldu3aVJIWGhur999/XHXfcofPOO0+hoaEaO3asFi9e7LrWpEmTVFRUpCeffFJz5sxRTEyMrr76av/dIACgUWK1QwAAKjGZTHrjjTc0ZsyYQDcFANDMMOcLAAAAAPyA8AUAAAAAfsCcLwAAKuFpfABAQ2HkCwAAAAD8gPAFAAAAAH5A+AIAAAAAPyB8AQAAAIAfEL4AAAAAwA8IXwAAAADgB4QvAAAAAPADwhcAAAAA+MH/B0YizuiAR/vlAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model and tokenizer saved!\n" + ] + } + ], + "source": [ + "# Install dependencies\n", + "!pip uninstall -y torch torchvision torchaudio pandas fsspec gcsfs -q\n", + "!pip install torch torchvision torchaudio pandas transformers datasets nltk matplotlib evaluate rouge_score sentence-transformers -q\n", + "# Restart runtime after installation\n", + "\n", + "import json\n", + "import pandas as pd\n", + "from datasets import Dataset, Features, Value\n", + "from transformers import T5Tokenizer, T5ForConditionalGeneration, TrainingArguments, Trainer\n", + "import evaluate\n", + "import matplotlib.pyplot as plt\n", + "import torch\n", + "import nltk\n", + "import numpy as np # Added missing import\n", + "nltk.download('punkt')\n", + "\n", + "# Verify setup\n", + "print(f\"Torch version: {torch.__version__}\")\n", + "print(f\"GPU available: {torch.cuda.is_available()}\")\n", + "\n", + "# Step 2: Download and load dataset\n", + "!wget https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json -O train-v1.1.json\n", + "with open('train-v1.1.json', 'r', encoding='utf-8') as f:\n", + " squad_data = json.load(f)\n", + "print(\"Sample data:\", squad_data['data'][0]['paragraphs'][0])\n", + "\n", + "# Step 3: Clean and prepare dataset\n", + "data = []\n", + "for article in squad_data['data']:\n", + " for paragraph in article['paragraphs']:\n", + " context = paragraph['context'].strip()\n", + " for qa in paragraph['qas']:\n", + " question = qa['question'].strip()\n", + " answer = qa['answers'][0]['text'].strip() if qa['answers'] else \"\"\n", + " if context and question and answer:\n", + " data.append({\"context\": context, \"question\": question, \"answer\": answer})\n", + "\n", + "data = data[:800]\n", + "df = pd.DataFrame(data)\n", + "features = Features({\n", + " \"context\": Value(\"string\"),\n", + " \"question\": Value(\"string\"),\n", + " \"answer\": Value(\"string\")\n", + "})\n", + "dataset = Dataset.from_pandas(df, features=features)\n", + "train_test_split = dataset.train_test_split(test_size=0.2, seed=42)\n", + "train_dataset = train_test_split[\"train\"]\n", + "eval_dataset = train_test_split[\"test\"]\n", + "print(f\"Train size: {len(train_dataset)} | Eval size: {len(eval_dataset)}\")\n", + "print(\"First train example:\", train_dataset[0])\n", + "\n", + "# Step 4: Fine-tune the model\n", + "model_name = \"valhalla/t5-small-qg-hl\"\n", + "tokenizer = T5Tokenizer.from_pretrained(model_name)\n", + "model = T5ForConditionalGeneration.from_pretrained(model_name)\n", + "\n", + "def preprocess(examples):\n", + " inputs = [f\"generate question: {ctx} {ans}\" for ctx, ans in zip(examples['context'], examples['answer'])]\n", + " targets = examples['question']\n", + " model_inputs = tokenizer(inputs, max_length=256, truncation=True, padding=\"max_length\", return_tensors=None)\n", + " labels = tokenizer(targets, max_length=32, truncation=True, padding=\"max_length\")[\"input_ids\"]\n", + " model_inputs[\"labels\"] = labels\n", + " return model_inputs\n", + "\n", + "tokenized_train_dataset = train_dataset.map(preprocess, remove_columns=train_dataset.column_names, batched=True)\n", + "tokenized_eval_dataset = eval_dataset.map(preprocess, remove_columns=eval_dataset.column_names, batched=True)\n", + "\n", + "tokenized_train_dataset = tokenized_train_dataset.with_format(\"torch\")\n", + "tokenized_eval_dataset = tokenized_eval_dataset.with_format(\"torch\")\n", + "\n", + "training_args = TrainingArguments(\n", + " output_dir=\"./qg-finetuned\",\n", + " per_device_train_batch_size=4,\n", + " per_device_eval_batch_size=4,\n", + " num_train_epochs=2,\n", + " eval_strategy=\"epoch\",\n", + " learning_rate=2e-5,\n", + " logging_dir=\"./logs\",\n", + " logging_steps=10,\n", + " save_strategy=\"epoch\",\n", + " save_total_limit=1,\n", + " fp16=True,\n", + " report_to=\"none\",\n", + " load_best_model_at_end=True,\n", + " metric_for_best_model=\"eval_loss\",\n", + " greater_is_better=False\n", + ")\n", + "\n", + "\n", + "def compute_metrics(eval_pred):\n", + " predictions, labels = eval_pred\n", + " predictions = predictions[0] if isinstance(predictions, tuple) else predictions\n", + " predictions = np.argmax(predictions, axis=-1) if predictions.ndim == 3 else predictions\n", + " labels = np.argmax(labels, axis=-1) if labels.ndim == 3 else labels\n", + "\n", + " def decode_sequences(sequences):\n", + " return [tokenizer.decode(seq, skip_special_tokens=True) for seq in sequences]\n", + "\n", + " decoded_preds = decode_sequences(predictions)\n", + " decoded_labels = decode_sequences(labels)\n", + "\n", + " rouge = evaluate.load(\"rouge\")\n", + " rouge_score = rouge.compute(predictions=decoded_preds, references=decoded_labels)\n", + "\n", + " return {\n", + " \"rouge1\": rouge_score[\"rouge1\"],\n", + " \"rougeL\": rouge_score[\"rougeL\"]\n", + " }\n", + "\n", + "trainer = Trainer(\n", + " model=model,\n", + " args=training_args,\n", + " train_dataset=tokenized_train_dataset,\n", + " eval_dataset=tokenized_eval_dataset,\n", + " compute_metrics=compute_metrics\n", + ")\n", + "\n", + "print(\"Fine-tuning started...\")\n", + "trainer.train()\n", + "print(\"Running final evaluation...\")\n", + "results = trainer.evaluate()\n", + "print(\"Final Evaluation Results:\")\n", + "for metric, score in results.items():\n", + " print(f\" {metric}: {score}\")\n", + "\n", + "# Step 5: Generate and evaluate sample questions\n", + "from transformers import GenerationConfig\n", + "model.eval()\n", + "sample = eval_dataset[0]\n", + "inputs = tokenizer(f\"generate question: {sample['context']} {sample['answer']}\", max_length=256, truncation=True, padding=\"max_length\", return_tensors=\"pt\").to(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", + "\n", + "generation_config = GenerationConfig(early_stopping=True, num_beams=5, max_length=128) # Adjusted\n", + "outputs = model.generate(**inputs, generation_config=generation_config)\n", + "generated_question = tokenizer.decode(outputs[0], skip_special_tokens=True)\n", + "\n", + "print(f\"Context: {sample['context'][:100]}...\")\n", + "print(f\"Answer: {sample['answer']}\")\n", + "print(f\"Generated Question: {generated_question}\")\n", + "print(f\"Reference Question: {sample['question']}\")\n", + "\n", + "# Step 6: Plot evaluation scores\n", + "log_history = trainer.state.log_history\n", + "epochs = [entry['epoch'] for entry in log_history if 'eval_rouge1' in entry]\n", + "rouge1_scores = [entry['eval_rouge1'] for entry in log_history if 'eval_rouge1' in entry]\n", + "rougeL_scores = [entry['eval_rougeL'] for entry in log_history if 'eval_rougeL' in entry]\n", + "\n", + "plt.figure(figsize=(10, 5))\n", + "plt.plot(epochs, rouge1_scores, label='ROUGE-1')\n", + "plt.plot(epochs, rougeL_scores, label='ROUGE-L')\n", + "plt.xlabel('Epoch')\n", + "plt.ylabel('Score')\n", + "plt.title('Evaluation Scores Over Epochs')\n", + "plt.legend()\n", + "plt.grid(True)\n", + "plt.show()\n", + "\n", + "# Step 7: Save the model\n", + "model.save_pretrained(\"./qg-finetuned/final\")\n", + "tokenizer.save_pretrained(\"./qg-finetuned/final\")\n", + "print(\"Model and tokenizer saved!\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "68nRksRUH2D-" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000, + "referenced_widgets": [ + "83fcc7f94cd0425e893ac1e68213b9c6", + "214ef7b83c4d441b8b9474dcb6ea3aff", + "b000c107ddf24b168ba733937efd32a3", + "d6fcecfa42234b06ad3c8dc47a265001", + "cf1e3fbde7e34642a0dbe181858ea8f2", + "d11db59116f5450695f6aaf944617cf6", + "27e4b36842a749d781467a4593fbd453", + "3cf1c4746da54c88916b90772f434a4f", + "c4ef9e9b3c2043f0a08dacd0088871b7", + "cb440926360a4ba39cc34d1eae9a429d", + "d6ce4f75dd824911971c19a1602d4e34", + "e9bd52917d3744a6bde159c367b352cb", + "9de9cf92a62f495887c6495e55ce0738", + "53e2edf5cacf4eeabe24b61e7c8cc34e", + "1eb163a3ed314ca19f97a0ec060aebb6", + "352ef36e791348eb9d4d6021f073c8a5", + "be5b828dd1444c4694e67b545a858f59", + "5d7724fa0d4e4e18a0fabf6344a3503a", + "5970fce117894ccaab6e598417968d43", + "d1359916a9fd4ff993f142f18b04209e", + "11af3884716d44f3b2ed29804a2766a9", + "50f01d34d3664802ab2b56e07ea6d630" + ] + }, + "id": "waaltAGLH4h2", + "outputId": "76774308-9670-4755-805f-f84c5045e12b" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[33mWARNING: Skipping gcsfs as it is not installed.\u001b[0m\u001b[33m\n", + "\u001b[0m\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", + "bigframes 2.8.0 requires gcsfs!=2025.5.0,>=2023.3.0, which is not installed.\n", + "google-colab 1.0.0 requires pandas==2.2.2, but you have pandas 2.3.1 which is incompatible.\n", + "fastai 2.7.19 requires torch<2.7,>=1.10, but you have torch 2.7.1 which is incompatible.\n", + "dask-cudf-cu12 25.2.2 requires pandas<2.2.4dev0,>=2.0, but you have pandas 2.3.1 which is incompatible.\n", + "cudf-cu12 25.2.1 requires pandas<2.2.4dev0,>=2.0, but you have pandas 2.3.1 which is incompatible.\u001b[0m\u001b[31m\n", + "\u001b[0m" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[nltk_data] Downloading package punkt to /root/nltk_data...\n", + "[nltk_data] Package punkt is already up-to-date!\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Torch version: 2.7.1+cu126\n", + "GPU available: True\n", + "--2025-07-13 18:53:28-- https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json\n", + "Resolving rajpurkar.github.io (rajpurkar.github.io)... 185.199.108.153, 185.199.109.153, 185.199.110.153, ...\n", + "Connecting to rajpurkar.github.io (rajpurkar.github.io)|185.199.108.153|:443... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 30288272 (29M) [application/json]\n", + "Saving to: ‘train-v1.1.json’\n", + "\n", + "train-v1.1.json 100%[===================>] 28.88M --.-KB/s in 0.08s \n", + "\n", + "2025-07-13 18:53:29 (356 MB/s) - ‘train-v1.1.json’ saved [30288272/30288272]\n", + "\n", + "Sample data: {'context': 'Architecturally, the school has a Catholic character. Atop the Main Building\\'s gold dome is a golden statue of the Virgin Mary. Immediately in front of the Main Building and facing it, is a copper statue of Christ with arms upraised with the legend \"Venite Ad Me Omnes\". Next to the Main Building is the Basilica of the Sacred Heart. Immediately behind the basilica is the Grotto, a Marian place of prayer and reflection. It is a replica of the grotto at Lourdes, France where the Virgin Mary reputedly appeared to Saint Bernadette Soubirous in 1858. At the end of the main drive (and in a direct line that connects through 3 statues and the Gold Dome), is a simple, modern stone statue of Mary.', 'qas': [{'answers': [{'answer_start': 515, 'text': 'Saint Bernadette Soubirous'}], 'question': 'To whom did the Virgin Mary allegedly appear in 1858 in Lourdes France?', 'id': '5733be284776f41900661182'}, {'answers': [{'answer_start': 188, 'text': 'a copper statue of Christ'}], 'question': 'What is in front of the Notre Dame Main Building?', 'id': '5733be284776f4190066117f'}, {'answers': [{'answer_start': 279, 'text': 'the Main Building'}], 'question': 'The Basilica of the Sacred heart at Notre Dame is beside to which structure?', 'id': '5733be284776f41900661180'}, {'answers': [{'answer_start': 381, 'text': 'a Marian place of prayer and reflection'}], 'question': 'What is the Grotto at Notre Dame?', 'id': '5733be284776f41900661181'}, {'answers': [{'answer_start': 92, 'text': 'a golden statue of the Virgin Mary'}], 'question': 'What sits on top of the Main Building at Notre Dame?', 'id': '5733be284776f4190066117e'}]}\n", + "Train size: 640 | Eval size: 160\n", + "First train example: {'context': 'The University of Notre Dame du Lac (or simply Notre Dame /ˌnoʊtərˈdeɪm/ NOH-tər-DAYM) is a Catholic research university located adjacent to South Bend, Indiana, in the United States. In French, Notre Dame du Lac means \"Our Lady of the Lake\" and refers to the university\\'s patron saint, the Virgin Mary. The main campus covers 1,250 acres in a suburban setting and it contains a number of recognizable landmarks, such as the Golden Dome, the \"Word of Life\" mural (commonly known as Touchdown Jesus), and the Basilica.', 'question': 'The school known as Notre Dame is known by a more lengthy name, what is it?', 'answer': 'University of Notre Dame du'}\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/transformers/tokenization_utils_base.py:1601: FutureWarning: `clean_up_tokenization_spaces` was not set. It will be set to `True` by default. This behavior will be depracted in transformers v4.45, and will be then set to `False` by default. For more details check this issue: https://github.com/huggingface/transformers/issues/31884\n", + " warnings.warn(\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "83fcc7f94cd0425e893ac1e68213b9c6", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Map: 0%| | 0/640 [00:00\n", + " \n", + " \n", + " [320/320 00:56, Epoch 2/2]\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 LossRouge1Rougel
11.2955000.9407060.5337820.524730
21.0051000.8833010.5431430.535329

" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "There were missing keys in the checkpoint model loaded: ['encoder.embed_tokens.weight', 'decoder.embed_tokens.weight', 'lm_head.weight'].\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Running final evaluation...\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "

\n", + " \n", + " \n", + " [40/40 00:01]\n", + "
\n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Final Evaluation Results:\n", + " eval_loss: 0.8833014369010925\n", + " eval_rouge1: 0.5431428752464913\n", + " eval_rougeL: 0.5353286026815901\n", + " eval_runtime: 4.2109\n", + " eval_samples_per_second: 37.996\n", + " eval_steps_per_second: 9.499\n", + " epoch: 2.0\n", + "Context: In 1919 Father James Burns became president of Notre Dame, and in three years he produced an academi...\n", + "Answer: three years\n", + "Generated Question: What did Father James Burns do to Notre Dame?\n", + "Reference Question: Over how many years did the change to national standards undertaken at Notre Dame in the early 20th century take place?\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model and tokenizer saved!\n" + ] + } + ], + "source": [ + "# Install dependencies\n", + "!pip uninstall -y torch torchvision torchaudio pandas fsspec gcsfs -q\n", + "!pip install torch torchvision torchaudio pandas transformers datasets nltk matplotlib evaluate rouge_score sentence-transformers -q\n", + "# Restart runtime after installation\n", + "\n", + "import json\n", + "import pandas as pd\n", + "from datasets import Dataset, Features, Value\n", + "from transformers import T5Tokenizer, T5ForConditionalGeneration, TrainingArguments, Trainer\n", + "import evaluate\n", + "import matplotlib.pyplot as plt\n", + "import torch\n", + "import nltk\n", + "import numpy as np # Added missing import\n", + "nltk.download('punkt')\n", + "\n", + "# Verify setup\n", + "print(f\"Torch version: {torch.__version__}\")\n", + "print(f\"GPU available: {torch.cuda.is_available()}\")\n", + "\n", + "# Step 2: Download and load dataset\n", + "!wget https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json -O train-v1.1.json\n", + "with open('train-v1.1.json', 'r', encoding='utf-8') as f:\n", + " squad_data = json.load(f)\n", + "print(\"Sample data:\", squad_data['data'][0]['paragraphs'][0])\n", + "\n", + "# Step 3: Clean and prepare dataset\n", + "data = []\n", + "for article in squad_data['data']:\n", + " for paragraph in article['paragraphs']:\n", + " context = paragraph['context'].strip()\n", + " for qa in paragraph['qas']:\n", + " question = qa['question'].strip()\n", + " answer = qa['answers'][0]['text'].strip() if qa['answers'] else \"\"\n", + " if context and question and answer:\n", + " data.append({\"context\": context, \"question\": question, \"answer\": answer})\n", + "\n", + "data = data[:800]\n", + "df = pd.DataFrame(data)\n", + "features = Features({\n", + " \"context\": Value(\"string\"),\n", + " \"question\": Value(\"string\"),\n", + " \"answer\": Value(\"string\")\n", + "})\n", + "dataset = Dataset.from_pandas(df, features=features)\n", + "train_test_split = dataset.train_test_split(test_size=0.2, seed=42)\n", + "train_dataset = train_test_split[\"train\"]\n", + "eval_dataset = train_test_split[\"test\"]\n", + "print(f\"Train size: {len(train_dataset)} | Eval size: {len(eval_dataset)}\")\n", + "print(\"First train example:\", train_dataset[0])\n", + "\n", + "# Step 4: Fine-tune the model\n", + "model_name = \"valhalla/t5-small-qg-hl\"\n", + "tokenizer = T5Tokenizer.from_pretrained(model_name)\n", + "model = T5ForConditionalGeneration.from_pretrained(model_name)\n", + "\n", + "def preprocess(examples):\n", + " inputs = []\n", + " for ctx, ans in zip(examples['context'], examples['answer']):\n", + " if ans in ctx:\n", + " highlighted = ctx.replace(ans, f\" {ans} \")\n", + " inputs.append(f\"generate question: {highlighted}\")\n", + " else:\n", + " inputs.append(f\"generate question: {ctx} {ans} \")\n", + " targets = examples['question']\n", + " model_inputs = tokenizer(inputs, max_length=256, truncation=True, padding=\"max_length\", return_tensors=None)\n", + " labels = tokenizer(targets, max_length=32, truncation=True, padding=\"max_length\")[\"input_ids\"]\n", + " model_inputs[\"labels\"] = labels\n", + " return model_inputs\n", + "\n", + "tokenized_train_dataset = train_dataset.map(preprocess, remove_columns=train_dataset.column_names, batched=True)\n", + "tokenized_eval_dataset = eval_dataset.map(preprocess, remove_columns=eval_dataset.column_names, batched=True)\n", + "\n", + "tokenized_train_dataset = tokenized_train_dataset.with_format(\"torch\")\n", + "tokenized_eval_dataset = tokenized_eval_dataset.with_format(\"torch\")\n", + "\n", + "training_args = TrainingArguments(\n", + " output_dir=\"./qg-finetuned\",\n", + " per_device_train_batch_size=4,\n", + " per_device_eval_batch_size=4,\n", + " num_train_epochs=2,\n", + " eval_strategy=\"epoch\",\n", + " learning_rate=2e-5,\n", + " logging_dir=\"./logs\",\n", + " logging_steps=10,\n", + " save_strategy=\"epoch\",\n", + " save_total_limit=1,\n", + " fp16=True,\n", + " report_to=\"none\",\n", + " load_best_model_at_end=True,\n", + " metric_for_best_model=\"eval_loss\",\n", + " greater_is_better=False\n", + ")\n", + "\n", + "\n", + "def compute_metrics(eval_pred):\n", + " predictions, labels = eval_pred\n", + " predictions = predictions[0] if isinstance(predictions, tuple) else predictions\n", + " predictions = np.argmax(predictions, axis=-1) if predictions.ndim == 3 else predictions\n", + " labels = np.argmax(labels, axis=-1) if labels.ndim == 3 else labels\n", + "\n", + " def decode_sequences(sequences):\n", + " return [tokenizer.decode(seq, skip_special_tokens=True) for seq in sequences]\n", + "\n", + " decoded_preds = decode_sequences(predictions)\n", + " decoded_labels = decode_sequences(labels)\n", + "\n", + " rouge = evaluate.load(\"rouge\")\n", + " rouge_score = rouge.compute(predictions=decoded_preds, references=decoded_labels)\n", + "\n", + " return {\n", + " \"rouge1\": rouge_score[\"rouge1\"],\n", + " \"rougeL\": rouge_score[\"rougeL\"]\n", + " }\n", + "\n", + "trainer = Trainer(\n", + " model=model,\n", + " args=training_args,\n", + " train_dataset=tokenized_train_dataset,\n", + " eval_dataset=tokenized_eval_dataset,\n", + " compute_metrics=compute_metrics\n", + ")\n", + "\n", + "print(\"Fine-tuning started...\")\n", + "trainer.train()\n", + "print(\"Running final evaluation...\")\n", + "results = trainer.evaluate()\n", + "print(\"Final Evaluation Results:\")\n", + "for metric, score in results.items():\n", + " print(f\" {metric}: {score}\")\n", + "\n", + "# Step 5: Generate and evaluate sample questions\n", + "from transformers import GenerationConfig\n", + "model.eval()\n", + "sample = eval_dataset[0]\n", + "inputs = tokenizer(f\"generate question: {sample['context']} {sample['answer']}\", max_length=256, truncation=True, padding=\"max_length\", return_tensors=\"pt\").to(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", + "\n", + "generation_config = GenerationConfig(early_stopping=True, num_beams=5, max_length=128) # Adjusted\n", + "outputs = model.generate(**inputs, generation_config=generation_config)\n", + "generated_question = tokenizer.decode(outputs[0], skip_special_tokens=True)\n", + "\n", + "print(f\"Context: {sample['context'][:100]}...\")\n", + "print(f\"Answer: {sample['answer']}\")\n", + "print(f\"Generated Question: {generated_question}\")\n", + "print(f\"Reference Question: {sample['question']}\")\n", + "\n", + "# Step 6: Plot evaluation scores\n", + "log_history = trainer.state.log_history\n", + "epochs = [entry['epoch'] for entry in log_history if 'eval_rouge1' in entry]\n", + "rouge1_scores = [entry['eval_rouge1'] for entry in log_history if 'eval_rouge1' in entry]\n", + "rougeL_scores = [entry['eval_rougeL'] for entry in log_history if 'eval_rougeL' in entry]\n", + "\n", + "plt.figure(figsize=(10, 5))\n", + "plt.plot(epochs, rouge1_scores, label='ROUGE-1')\n", + "plt.plot(epochs, rougeL_scores, label='ROUGE-L')\n", + "plt.xlabel('Epoch')\n", + "plt.ylabel('Score')\n", + "plt.title('Evaluation Scores Over Epochs')\n", + "plt.legend()\n", + "plt.grid(True)\n", + "plt.show()\n", + "\n", + "# Step 7: Save the model\n", + "model.save_pretrained(\"./qg-finetuned/final\")\n", + "tokenizer.save_pretrained(\"./qg-finetuned/final\")\n", + "print(\"Model and tokenizer saved!\")" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "TlKkCvw0GoVJ", + "outputId": "74e5f939-c3fa-451e-98f5-61919ffa0969" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 1%| | 1/160 [00:00<01:21, 1.94it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 1 ---\n", + "Raw token IDs: [0, 571, 307, 410, 10846, 7, 582, 2753, 13, 7711, 3, 17084, 58, 1]\n", + "Decoded Prediction: How long did Burns become president of Notre Dame?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 1%|▏ | 2/160 [00:01<02:41, 1.02s/it]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 2 ---\n", + "Raw token IDs: [0, 0, 2645, 2832, 24, 493, 63, 14549, 65, 582, 3, 9, 26159, 3, 7, 994, 6083, 437, 8, 1576, 13, 2744, 1304, 11937, 16, 2129, 58, 1]\n", + "Decoded Prediction: Who wrote that Beyonce has become a crossover sex symbol since the release of Dangerously in Love?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 2%|▏ | 3/160 [00:02<02:39, 1.01s/it]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 3 ---\n", + "Raw token IDs: [0, 493, 63, 14549, 47, 8, 166, 3850, 18, 8778, 2377, 12, 1189, 8, 1600, 962, 13, 125, 3835, 58, 1]\n", + "Decoded Prediction: Beyonce was the first African-American artist to cover the September issue of what magazine?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 2%|▎ | 4/160 [00:03<02:28, 1.05it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 4 ---\n", + "Raw token IDs: [0, 0, 363, 47, 493, 63, 14549, 31, 7, 166, 6729, 2306, 1883, 30, 1515, 14320, 3888, 58, 1]\n", + "Decoded Prediction: What was Beyonce's first solo album released on June 24, 2003?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 3%|▎ | 5/160 [00:04<02:16, 1.14it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 5 ---\n", + "Raw token IDs: [0, 0, 2645, 410, 493, 63, 106, 75, 154, 20111, 30, 1186, 6464, 2628, 58, 1]\n", + "Decoded Prediction: Who did Beyoncé marry on April 4, 2008?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 4%|▍ | 6/160 [00:05<02:00, 1.28it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 6 ---\n", + "Raw token IDs: [0, 363, 410, 25219, 5530, 493, 63, 106, 75, 154, 38, 58, 1]\n", + "Decoded Prediction: What did Reid describe Beyoncé as?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 4%|▍ | 7/160 [00:06<02:23, 1.07it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 7 ---\n", + "Raw token IDs: [0, 363, 19, 8, 564, 13, 8, 126, 6198, 21, 1076, 44, 8, 3137, 26, 13277, 1888, 13, 1769, 5408, 2855, 1775, 58, 1]\n", + "Decoded Prediction: What is the name of the new residence for men at the Mendoza College of Business Executive Education Department?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 5%|▌ | 8/160 [00:07<02:10, 1.17it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 8 ---\n", + "Raw token IDs: [0, 363, 19, 8, 564, 13, 8, 1193, 18301, 257, 13, 6679, 4737, 58, 1]\n", + "Decoded Prediction: What is the name of the Congregation of Holy Cross?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 6%|▌ | 9/160 [00:07<01:54, 1.32it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 9 ---\n", + "Raw token IDs: [0, 0, 2645, 410, 493, 63, 14549, 20111, 58, 1]\n", + "Decoded Prediction: Who did Beyonce marry?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 6%|▋ | 10/160 [00:08<02:19, 1.07it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 10 ---\n", + "Raw token IDs: [0, 0, 363, 19, 8, 564, 13, 8, 814, 24, 493, 63, 106, 75, 154, 3, 29029, 16, 58, 1]\n", + "Decoded Prediction: What is the name of the film that Beyoncé starred in?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 7%|▋ | 11/160 [00:09<02:19, 1.07it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 11 ---\n", + "Raw token IDs: [0, 0, 2645, 410, 493, 63, 106, 75, 154, 1320, 46, 539, 2068, 21, 16, 1230, 58, 1]\n", + "Decoded Prediction: Who did Beyoncé sign an open letter for in 2015?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 8%|▊ | 12/160 [00:11<02:33, 1.04s/it]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 12 ---\n", + "Raw token IDs: [0, 571, 231, 410, 8, 3819, 13, 7711, 3, 17084, 11, 3526, 5412, 1211, 726, 21, 70, 7117, 7, 58, 1]\n", + "Decoded Prediction: How much did the university of Notre Dame and Under Armour pay for their uniforms?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 8%|▊ | 13/160 [00:12<02:39, 1.09s/it]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 13 ---\n", + "Raw token IDs: [0, 2840, 405, 7711, 3, 17084, 31, 7, 3, 867, 16528, 372, 5978, 58, 1]\n", + "Decoded Prediction: Where does Notre Dame's ice hockey team compete?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 9%|▉ | 14/160 [00:13<02:26, 1.00s/it]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 14 ---\n", + "Raw token IDs: [0, 0, 363, 2324, 410, 493, 63, 106, 75, 154, 1912, 44, 8, 2464, 13074, 3, 30634, 58, 1]\n", + "Decoded Prediction: What song did Beyoncé perform at the 2009 presidential inauguration?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 9%|▉ | 15/160 [00:13<02:04, 1.16it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 15 ---\n", + "Raw token IDs: [0, 571, 186, 8167, 410, 272, 31, 16803, 1789, 16, 165, 166, 471, 58, 1]\n", + "Decoded Prediction: How many copies did B'Day sell in its first week?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 10%|█ | 16/160 [00:14<01:46, 1.35it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 16 ---\n", + "Raw token IDs: [0, 363, 19, 411, 31, 10499, 18819, 655, 63, 2501, 31, 7, 3595, 358, 58, 1]\n", + "Decoded Prediction: What is O'Shaughnessy Hall's library system?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 11%|█ | 17/160 [00:14<01:39, 1.43it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 17 ---\n", + "Raw token IDs: [0, 0, 571, 231, 410, 493, 63, 14549, 1492, 30, 160, 166, 4219, 1552, 16, 4101, 58, 1]\n", + "Decoded Prediction: How much did Beyonce spend on her first concert tour in 2007?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 11%|█▏ | 18/160 [00:16<02:11, 1.08it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 18 ---\n", + "Raw token IDs: [0, 571, 186, 12321, 410, 8, 991, 712, 96, 308, 154, 354, 85, 584, 76, 121, 1535, 30, 8, 3259, 1976, 5396, 910, 5059, 58, 1]\n", + "Decoded Prediction: How many charts did the lead single \"Déjà Vu\" reach on the Billboard Hot 100 chart?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 12%|█▏ | 19/160 [00:16<01:53, 1.24it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 19 ---\n", + "Raw token IDs: [0, 0, 363, 605, 410, 493, 63, 14549, 11, 9373, 18, 956, 2467, 16, 1718, 2038, 58, 1]\n", + "Decoded Prediction: What event did Beyonce and Jay-Z attend in July 2013?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 12%|█▎ | 20/160 [00:16<01:29, 1.56it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 20 ---\n", + "Raw token IDs: [0, 0, 363, 47, 493, 63, 14549, 31, 7, 166, 6922, 1075, 16, 3581, 58, 1]\n", + "Decoded Prediction: What was Beyonce's first acting role in 2006?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 13%|█▎ | 21/160 [00:17<01:18, 1.76it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 21 ---\n", + "Raw token IDs: [0, 366, 410, 493, 63, 14549, 6456, 3, 9, 7102, 144, 302, 45, 160, 723, 1415, 58, 1]\n", + "Decoded Prediction: When did Beyonce announce a hiatus from her music career?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 14%|█▍ | 22/160 [00:17<01:14, 1.85it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 22 ---\n", + "Raw token IDs: [0, 0, 571, 231, 410, 493, 63, 106, 75, 154, 31, 7, 6922, 1075, 16, 37, 12070, 21149, 8690, 44, 8, 1367, 828, 4388, 58, 1]\n", + "Decoded Prediction: How much did Beyoncé's acting role in The Pink Panther gross at the box office worldwide?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 14%|█▍ | 23/160 [00:18<01:01, 2.24it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 23 ---\n", + "Raw token IDs: [0, 571, 186, 203, 47, 8, 4543, 13, 14984, 7, 8307, 58, 1]\n", + "Decoded Prediction: How many years was the Review of Politics edited?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 15%|█▌ | 24/160 [00:18<00:54, 2.47it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 24 ---\n", + "Raw token IDs: [0, 0, 363, 686, 13, 3800, 410, 493, 63, 106, 75, 154, 31, 7, 778, 3605, 560, 58, 1]\n", + "Decoded Prediction: What type of theme did Beyoncé's early songs include?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 16%|█▌ | 25/160 [00:18<00:48, 2.79it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 25 ---\n", + "Raw token IDs: [0, 363, 19, 8, 564, 13, 8, 4467, 13, 2330, 15848, 58, 1]\n", + "Decoded Prediction: What is the name of the Word of Life mural?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 16%|█▋ | 26/160 [00:19<00:49, 2.72it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 26 ---\n", + "Raw token IDs: [0, 0, 86, 125, 203, 410, 2900, 570, 493, 63, 106, 75, 154, 859, 8, 910, 167, 16569, 151, 16, 8, 296, 58, 1]\n", + "Decoded Prediction: In what years did Time list Beyoncé among the 100 most influential people in the world?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 17%|█▋ | 27/160 [00:19<00:45, 2.95it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 27 ---\n", + "Raw token IDs: [0, 571, 186, 2061, 43, 751, 8, 1076, 31, 7, 8498, 372, 58, 1]\n", + "Decoded Prediction: How many schools have won the men's basketball team?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 18%|█▊ | 28/160 [00:19<00:45, 2.88it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 28 ---\n", + "Raw token IDs: [0, 0, 363, 3295, 410, 3259, 1976, 3835, 570, 493, 63, 106, 75, 154, 30, 16, 2722, 58, 1]\n", + "Decoded Prediction: What category did Billboard magazine list Beyoncé on in 2011?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 18%|█▊ | 29/160 [00:20<00:47, 2.77it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 29 ---\n", + "Raw token IDs: [0, 0, 363, 19, 8, 564, 13, 8, 283, 5, 21313, 5, 478, 1860, 57, 8, 1888, 13, 4218, 11, 8706, 7, 58, 1]\n", + "Decoded Prediction: What is the name of the M.Div. program offered by the College of Arts and Letters?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 19%|█▉ | 30/160 [00:20<00:49, 2.61it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 30 ---\n", + "Raw token IDs: [0, 571, 186, 8167, 410, 493, 63, 106, 75, 154, 1789, 16, 165, 166, 471, 58, 1]\n", + "Decoded Prediction: How many copies did Beyoncé sell in its first week?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 19%|█▉ | 31/160 [00:20<00:45, 2.83it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 31 ---\n", + "Raw token IDs: [0, 0, 2645, 410, 493, 63, 14549, 2249, 16, 24692, 58, 1]\n", + "Decoded Prediction: Who did Beyonce voice in Epic?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 20%|██ | 32/160 [00:21<00:49, 2.59it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 32 ---\n", + "Raw token IDs: [0, 0, 363, 1900, 410, 216, 7289, 107, 11, 7711, 3, 17084, 1344, 3, 9, 576, 18, 994, 13073, 478, 58, 1]\n", + "Decoded Prediction: What college did Hesburgh and Notre Dame develop a co-exchange program?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 21%|██ | 33/160 [00:21<00:47, 2.67it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 33 ---\n", + "Raw token IDs: [0, 0, 363, 1552, 410, 493, 63, 106, 75, 154, 17046, 30, 16, 1740, 16, 1671, 3888, 58, 1]\n", + "Decoded Prediction: What tour did Beyoncé embark on in Europe in November 2003?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 21%|██▏ | 34/160 [00:21<00:47, 2.65it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 34 ---\n", + "Raw token IDs: [0, 0, 363, 47, 493, 63, 14549, 31, 7, 166, 6729, 1368, 30, 8, 3259, 1976, 5396, 910, 5059, 58, 1]\n", + "Decoded Prediction: What was Beyonce's first solo record on the Billboard Hot 100 chart?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 22%|██▏ | 35/160 [00:22<00:45, 2.76it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 35 ---\n", + "Raw token IDs: [0, 0, 2645, 410, 493, 63, 106, 75, 154, 11872, 887, 12, 1716, 38, 16, 8, 350, 940, 58, 1]\n", + "Decoded Prediction: Who did Beyoncé urge women to serve as in the G7?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 22%|██▎ | 36/160 [00:22<00:50, 2.47it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 36 ---\n", + "Raw token IDs: [0, 571, 186, 10657, 7, 399, 1962, 410, 19344, 63, 31, 7, 9364, 1912, 44, 8, 2011, 9713, 3, 4, 15086, 196, 196, 985, 715, 504, 58, 1]\n", + "Decoded Prediction: How many tweets per minute did Destiny's Child perform at the Super Bowl XLVII halftime show?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 23%|██▎ | 37/160 [00:23<00:46, 2.67it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 37 ---\n", + "Raw token IDs: [0, 2840, 410, 493, 63, 106, 75, 154, 2467, 13156, 18867, 1121, 58, 1]\n", + "Decoded Prediction: Where did Beyoncé attend Parker Elementary School?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 24%|██▍ | 38/160 [00:23<00:50, 2.43it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 38 ---\n", + "Raw token IDs: [0, 0, 363, 19, 8, 564, 13, 3, 9, 2324, 16, 272, 31, 16803, 58, 1]\n", + "Decoded Prediction: What is the name of a song in B'Day?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 24%|██▍ | 39/160 [00:24<00:50, 2.40it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 39 ---\n", + "Raw token IDs: [0, 0, 2645, 12566, 493, 63, 106, 75, 154, 31, 7, 5739, 11, 3, 2998, 1999, 38, 11562, 58, 1]\n", + "Decoded Prediction: Who highlighted Beyoncé's tone and timbre as distinctive?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 25%|██▌ | 40/160 [00:24<00:49, 2.45it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 40 ---\n", + "Raw token IDs: [0, 4073, 3819, 65, 8, 167, 216, 159, 348, 21361, 107, 725, 751, 58, 1]\n", + "Decoded Prediction: Which university has the most Heisman Trophies won?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 26%|██▌ | 41/160 [00:24<00:51, 2.32it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 41 ---\n", + "Raw token IDs: [0, 0, 363, 2324, 410, 9373, 1027, 1576, 30, 2330, 232, 715, 7, 5, 287, 58, 1]\n", + "Decoded Prediction: What song did Jay Z release on Lifeandtimes.com?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 26%|██▋ | 42/160 [00:25<00:55, 2.14it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 42 ---\n", + "Raw token IDs: [0, 0, 571, 186, 13569, 410, 493, 63, 14549, 43, 44, 8, 2722, 283, 4562, 3953, 3057, 6580, 58, 1]\n", + "Decoded Prediction: How many viewers did Beyonce have at the 2011 MTV Video Music Awards?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 27%|██▋ | 43/160 [00:25<00:51, 2.25it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 43 ---\n", + "Raw token IDs: [0, 363, 8468, 405, 59, 43, 3, 9, 6040, 8815, 42, 14829, 21913, 45, 7711, 3, 17084, 58, 1]\n", + "Decoded Prediction: What newspaper does not have a faculty advisor or editorial oversight from Notre Dame?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 28%|██▊ | 44/160 [00:26<00:53, 2.16it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 44 ---\n", + "Raw token IDs: [0, 0, 2645, 2832, 24, 493, 63, 14549, 65, 582, 3, 9, 26159, 3, 7, 994, 6083, 437, 8, 1576, 13, 2744, 1304, 11937, 16, 2129, 58, 1]\n", + "Decoded Prediction: Who wrote that Beyonce has become a crossover sex symbol since the release of Dangerously in Love?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 28%|██▊ | 45/160 [00:26<00:48, 2.35it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 45 ---\n", + "Raw token IDs: [0, 0, 363, 686, 13, 3, 7, 994, 3958, 65, 493, 63, 14549, 118, 3028, 38, 58, 1]\n", + "Decoded Prediction: What type of sex appeal has Beyonce been described as?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 29%|██▉ | 46/160 [00:26<00:45, 2.53it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 46 ---\n", + "Raw token IDs: [0, 0, 363, 3066, 47, 6946, 1079, 1660, 630, 4904, 107, 51, 638, 18, 23620, 127, 13, 58, 1]\n", + "Decoded Prediction: What department was Father John Augustine Zahm Co-Director of?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 29%|██▉ | 47/160 [00:27<00:43, 2.58it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 47 ---\n", + "Raw token IDs: [0, 0, 2645, 410, 493, 63, 106, 75, 154, 11872, 887, 12, 1716, 38, 16, 8, 350, 940, 58, 1]\n", + "Decoded Prediction: Who did Beyoncé urge women to serve as in the G7?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 30%|███ | 48/160 [00:27<00:41, 2.67it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 48 ---\n", + "Raw token IDs: [0, 0, 363, 47, 8, 564, 13, 493, 63, 14549, 31, 7, 511, 6729, 2306, 58, 1]\n", + "Decoded Prediction: What was the name of Beyonce's second solo album?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 31%|███ | 49/160 [00:28<00:41, 2.70it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 49 ---\n", + "Raw token IDs: [0, 366, 410, 493, 63, 106, 75, 154, 497, 24, 5428, 15822, 3555, 160, 12, 240, 610, 13, 160, 1415, 58, 1]\n", + "Decoded Prediction: When did Beyoncé say that Madonna inspired her to take control of her career?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 31%|███▏ | 50/160 [00:28<00:38, 2.86it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 50 ---\n", + "Raw token IDs: [0, 0, 363, 4183, 12373, 410, 493, 63, 106, 75, 154, 577, 1414, 6073, 16, 16, 3888, 58, 1]\n", + "Decoded Prediction: What musical comedy did Beyoncé play Lilly in in 2003?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 32%|███▏ | 51/160 [00:28<00:35, 3.10it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 51 ---\n", + "Raw token IDs: [0, 2645, 5105, 2691, 81, 493, 63, 106, 75, 154, 58, 1]\n", + "Decoded Prediction: Who obtained documents about Beyoncé?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 32%|███▎ | 52/160 [00:28<00:35, 3.03it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 52 ---\n", + "Raw token IDs: [0, 0, 363, 47, 493, 63, 14549, 31, 7, 4509, 712, 3, 9, 1328, 1269, 16, 8, 837, 58, 1]\n", + "Decoded Prediction: What was Beyonce's fourth single a commercial success in the US?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 33%|███▎ | 53/160 [00:29<00:35, 2.99it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 53 ---\n", + "Raw token IDs: [0, 366, 47, 7155, 3, 19003, 1790, 58, 1]\n", + "Decoded Prediction: When was Common Sense published?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 34%|███▍ | 54/160 [00:29<00:33, 3.14it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 54 ---\n", + "Raw token IDs: [0, 0, 363, 405, 493, 63, 106, 75, 154, 114, 12, 3270, 30, 10705, 58, 1]\n", + "Decoded Prediction: What does Beyoncé like to dress onstage?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 34%|███▍ | 55/160 [00:29<00:35, 2.96it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 55 ---\n", + "Raw token IDs: [0, 2645, 47, 8, 1025, 2335, 30, 3259, 1976, 31, 7, 570, 13, 8, 2224, 460, 5396, 910, 11263, 12756, 7, 58, 1]\n", + "Decoded Prediction: Who was the third woman on Billboard's list of the Top 20 Hot 100 Songwriters?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 35%|███▌ | 56/160 [00:30<00:39, 2.66it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 56 ---\n", + "Raw token IDs: [0, 0, 2645, 410, 493, 63, 106, 75, 154, 1912, 30, 8, 1463, 96, 566, 63, 51, 29, 21, 8, 20418, 121, 58, 1]\n", + "Decoded Prediction: Who did Beyoncé perform on the track \"Hymn for the Weekend\"?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 36%|███▌ | 57/160 [00:30<00:41, 2.46it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 57 ---\n", + "Raw token IDs: [0, 571, 186, 14234, 410, 8, 991, 712, 96, 308, 154, 354, 85, 584, 76, 121, 1535, 30, 8, 3259, 1976, 5396, 910, 5059, 58, 1]\n", + "Decoded Prediction: How many albums did the lead single \"Déjà Vu\" reach on the Billboard Hot 100 chart?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 36%|███▋ | 58/160 [00:31<00:39, 2.61it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 58 ---\n", + "Raw token IDs: [0, 0, 571, 186, 13588, 7, 410, 493, 63, 14549, 911, 44, 8, 9065, 727, 7389, 26596, 6580, 58, 1]\n", + "Decoded Prediction: How many nominations did Beyonce receive at the 52nd Annual Grammy Awards?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 37%|███▋ | 59/160 [00:31<00:35, 2.88it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 59 ---\n", + "Raw token IDs: [0, 363, 2324, 410, 493, 63, 106, 75, 154, 1431, 21, 24692, 58, 1]\n", + "Decoded Prediction: What song did Beyoncé write for Epic?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 38%|███▊ | 60/160 [00:31<00:32, 3.12it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 60 ---\n", + "Raw token IDs: [0, 2645, 3555, 493, 63, 106, 75, 154, 58, 1]\n", + "Decoded Prediction: Who inspired Beyoncé?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 38%|███▊ | 61/160 [00:32<00:30, 3.28it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 61 ---\n", + "Raw token IDs: [0, 363, 47, 8, 2041, 585, 3135, 21, 7711, 3, 17084, 58, 1]\n", + "Decoded Prediction: What was the annual research funding for Notre Dame?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 39%|███▉ | 62/160 [00:32<00:27, 3.57it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 62 ---\n", + "Raw token IDs: [0, 2645, 1632, 8, 166, 797, 12, 1299, 3, 9, 5419, 1569, 58, 1]\n", + "Decoded Prediction: Who became the first American to send a wireless message?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 39%|███▉ | 63/160 [00:32<00:32, 3.00it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 63 ---\n", + "Raw token IDs: [0, 363, 13681, 19, 2425, 12, 585, 6, 1073, 11, 16866, 30, 8, 4110, 13, 9674, 4129, 11, 8, 1124, 21, 5086, 3065, 58, 1]\n", + "Decoded Prediction: What institute is dedicated to research, education and outreach on the causes of violent conflict and the conditions for sustainable peace?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 40%|████ | 64/160 [00:33<00:30, 3.10it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 64 ---\n", + "Raw token IDs: [0, 0, 2645, 751, 493, 63, 106, 75, 154, 31, 7, 2760, 21, 16182, 12559, 58, 1]\n", + "Decoded Prediction: Who won Beyoncé's award for Morning Phase?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 41%|████ | 65/160 [00:33<00:28, 3.28it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 65 ---\n", + "Raw token IDs: [0, 2645, 10626, 2765, 12, 6774, 8, 452, 3078, 3543, 58, 1]\n", + "Decoded Prediction: Who hired workers to construct the public parking garage?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 41%|████▏ | 66/160 [00:33<00:31, 2.97it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 66 ---\n", + "Raw token IDs: [0, 2645, 47, 8, 6342, 5, 37, 7512, 15, 283, 5, 216, 7289, 107, 205, 4112, 58, 1]\n", + "Decoded Prediction: Who was the Rev. Theodore M. Hesburgh CSC?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 42%|████▏ | 67/160 [00:34<00:31, 2.91it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 67 ---\n", + "Raw token IDs: [0, 0, 2645, 1891, 493, 63, 14549, 8, 1867, 12, 619, 280, 6, 12, 36, 3555, 57, 378, 541, 58, 1]\n", + "Decoded Prediction: Who gave Beyonce the advice to live life, to be inspired by things again?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 42%|████▎ | 68/160 [00:34<00:30, 2.97it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 68 ---\n", + "Raw token IDs: [0, 0, 366, 47, 493, 63, 14549, 31, 7, 4509, 3100, 2306, 314, 1883, 58, 1]\n", + "Decoded Prediction: When was Beyonce's fourth studio album 4 released?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 43%|████▎ | 69/160 [00:34<00:31, 2.87it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 69 ---\n", + "Raw token IDs: [0, 461, 125, 833, 47, 1449, 13, 8, 325, 3809, 17, 444, 6341, 1166, 708, 58, 1]\n", + "Decoded Prediction: On what date was construction of the LaFortune Student Center started?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 44%|████▍ | 70/160 [00:34<00:28, 3.19it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 70 ---\n", + "Raw token IDs: [0, 2645, 1632, 819, 3763, 13, 7711, 3, 17084, 16, 21402, 58, 1]\n", + "Decoded Prediction: Who became head coach of Notre Dame in 1918?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 44%|████▍ | 71/160 [00:35<00:26, 3.42it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 71 ---\n", + "Raw token IDs: [0, 363, 19, 8, 711, 740, 13, 7711, 3, 17084, 31, 7, 3595, 58, 1]\n", + "Decoded Prediction: What is the main building of Notre Dame's library?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 45%|████▌ | 72/160 [00:35<00:29, 3.02it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 72 ---\n", + "Raw token IDs: [0, 363, 19, 8, 564, 13, 7711, 3, 17084, 58, 1]\n", + "Decoded Prediction: What is the name of Notre Dame?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 46%|████▌ | 73/160 [00:35<00:29, 2.98it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 73 ---\n", + "Raw token IDs: [0, 461, 125, 239, 56, 8, 15714, 5567, 31, 15697, 916, 58, 1]\n", + "Decoded Prediction: On what day will the Drummers' Circle continue?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 46%|████▋ | 74/160 [00:36<00:42, 2.03it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 74 ---\n", + "Raw token IDs: [0, 86, 1230, 18, 11505, 6, 125, 11003, 410, 7711, 3, 17084, 11003, 859, 96, 16557, 8278, 121, 16, 8, 412, 5, 134, 5, 3529, 3, 184, 1150, 3750, 31, 7, 1648, 1888, 7, 58, 1]\n", + "Decoded Prediction: In 2015-2016, what rank did Notre Dame rank among \"national universities\" in the U.S. News & World Report's Best Colleges?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 47%|████▋ | 75/160 [00:37<00:42, 1.98it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 75 ---\n", + "Raw token IDs: [0, 0, 486, 125, 605, 410, 493, 63, 106, 75, 154, 582, 8, 166, 3955, 2377, 12, 12392, 8, 30237, 1726, 58, 1]\n", + "Decoded Prediction: At what event did Beyoncé become the first female artist to headline the Pyramid stage?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 48%|████▊ | 76/160 [00:38<00:52, 1.59it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 76 ---\n", + "Raw token IDs: [0, 0, 493, 63, 14549, 11, 9373, 1027, 263, 34, 139, 8, 2846, 77, 655, 1150, 11547, 38, 8, 96, 6739, 222, 18, 2741, 29, 53, 579, 1158, 121, 21, 6018, 120, 12127, 1514, 3940, 770, 58, 1]\n", + "Decoded Prediction: Beyonce and Jay Z made it into the Guinness World Records as the \"highest-earning power couple\" for collectively earning $78 million?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 48%|████▊ | 77/160 [00:38<00:44, 1.87it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 77 ---\n", + "Raw token IDs: [0, 0, 363, 5349, 13, 3605, 410, 19344, 63, 31, 7, 9364, 1576, 2129, 18142, 58, 1]\n", + "Decoded Prediction: What genre of songs did Destiny's Child release Love Songs?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 49%|████▉ | 78/160 [00:39<00:41, 1.97it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 78 ---\n", + "Raw token IDs: [0, 0, 2645, 410, 493, 63, 106, 75, 154, 582, 8, 166, 3850, 18, 8778, 2335, 12, 43, 913, 11893, 30, 386, 381, 80, 3605, 58, 1]\n", + "Decoded Prediction: Who did Beyoncé become the first African-American woman to have writing credits on three number one songs?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 49%|████▉ | 79/160 [00:39<00:36, 2.20it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 79 ---\n", + "Raw token IDs: [0, 571, 186, 13588, 7, 410, 493, 63, 14549, 911, 44, 8, 9065, 727, 7389, 26596, 6580, 58, 1]\n", + "Decoded Prediction: How many nominations did Beyonce receive at the 52nd Annual Grammy Awards?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 50%|█████ | 80/160 [00:39<00:36, 2.19it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 80 ---\n", + "Raw token IDs: [0, 2645, 2681, 493, 63, 106, 75, 154, 44, 381, 80, 30, 160, 570, 13, 8, 9528, 1648, 24366, 87, 308, 663, 52, 7, 58, 1]\n", + "Decoded Prediction: Who placed Beyoncé at number one on her list of the Five Best Singer/Dancers?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 51%|█████ | 81/160 [00:40<00:32, 2.40it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 81 ---\n", + "Raw token IDs: [0, 0, 363, 19, 8, 564, 13, 411, 31, 10499, 18819, 655, 63, 2501, 58, 1]\n", + "Decoded Prediction: What is the name of O'Shaughnessy Hall?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 51%|█████▏ | 82/160 [00:40<00:28, 2.73it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 82 ---\n", + "Raw token IDs: [0, 0, 363, 47, 8, 167, 7533, 6878, 16, 283, 4562, 892, 58, 1]\n", + "Decoded Prediction: What was the most watched broadcast in MTV history?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 52%|█████▏ | 83/160 [00:40<00:29, 2.63it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 83 ---\n", + "Raw token IDs: [0, 363, 2760, 410, 493, 63, 106, 75, 154, 911, 45, 8, 368, 1060, 2125, 13, 1589, 3559, 343, 7, 58, 1]\n", + "Decoded Prediction: What award did Beyoncé receive from the New York Association of Black Journalists?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 52%|█████▎ | 84/160 [00:41<00:29, 2.59it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 84 ---\n", + "Raw token IDs: [0, 0, 571, 231, 410, 8513, 2621, 7, 16, 2540, 12066, 16917, 16, 4407, 58, 1]\n", + "Decoded Prediction: How much did Austin Powers in Goldmember grosse in 2002?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 53%|█████▎ | 85/160 [00:41<00:26, 2.80it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 85 ---\n", + "Raw token IDs: [0, 363, 19, 8, 564, 13, 7711, 3, 17084, 31, 7, 1449, 516, 58, 1]\n", + "Decoded Prediction: What is the name of Notre Dame's construction project?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 54%|█████▍ | 86/160 [00:41<00:24, 3.03it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 86 ---\n", + "Raw token IDs: [0, 363, 47, 493, 63, 14549, 31, 7, 166, 4219, 1552, 58, 1]\n", + "Decoded Prediction: What was Beyonce's first concert tour?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 54%|█████▍ | 87/160 [00:42<00:23, 3.05it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 87 ---\n", + "Raw token IDs: [0, 0, 2645, 1940, 8, 3567, 12, 112, 5961, 1826, 3100, 11, 2681, 135, 16, 2042, 4769, 58, 1]\n", + "Decoded Prediction: Who brought the girls to his Northern California studio and placed them in Star Search?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 55%|█████▌ | 88/160 [00:42<00:24, 2.97it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 88 ---\n", + "Raw token IDs: [0, 363, 47, 8, 564, 13, 8, 723, 6358, 44, 325, 3809, 17, 444, 58, 1]\n", + "Decoded Prediction: What was the name of the music hall at LaFortune?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 56%|█████▌ | 89/160 [00:42<00:22, 3.10it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 89 ---\n", + "Raw token IDs: [0, 363, 3066, 13, 8, 1888, 13, 2854, 405, 59, 462, 10360, 1356, 58, 1]\n", + "Decoded Prediction: What department of the College of Science does not offer PhD programs?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 56%|█████▋ | 90/160 [00:43<00:23, 2.98it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 90 ---\n", + "Raw token IDs: [0, 0, 363, 47, 8, 564, 13, 19344, 63, 31, 7, 9364, 22, 7, 167, 1574, 2324, 44, 8, 97, 58, 1]\n", + "Decoded Prediction: What was the name of Destiny's Child’s most successful song at the time?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 57%|█████▋ | 91/160 [00:43<00:25, 2.75it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 91 ---\n", + "Raw token IDs: [0, 363, 47, 493, 63, 106, 75, 154, 31, 7, 11592, 16, 8, 5777, 11263, 12756, 13, 8, 2929, 2760, 58, 1]\n", + "Decoded Prediction: What was Beyoncé's ranking in the Pop Songwriter of the Year award?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 57%|█████▊ | 92/160 [00:43<00:25, 2.68it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 92 ---\n", + "Raw token IDs: [0, 366, 47, 8, 1657, 96, 279, 32, 32, 17, 63, 2176, 2936, 121, 974, 12, 8, 10274, 1566, 28767, 58, 1]\n", + "Decoded Prediction: When was the term \"Bootylicious\" added to the Oxford English Dictionary?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 58%|█████▊ | 93/160 [00:44<00:25, 2.63it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 93 ---\n", + "Raw token IDs: [0, 0, 571, 186, 2456, 410, 493, 63, 106, 75, 154, 911, 45, 6800, 7, 16, 37, 30979, 3, 15291, 17, 1628, 58, 1]\n", + "Decoded Prediction: How many reviews did Beyoncé receive from critics in The Fighting Temptations?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 59%|█████▉ | 94/160 [00:44<00:25, 2.63it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 94 ---\n", + "Raw token IDs: [0, 0, 493, 63, 106, 75, 154, 47, 2616, 859, 8, 910, 167, 16569, 151, 16, 8, 296, 16, 2038, 11, 1412, 58, 1]\n", + "Decoded Prediction: Beyoncé was listed among the 100 most influential people in the world in 2013 and 2014?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 59%|█████▉ | 95/160 [00:45<00:23, 2.73it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 95 ---\n", + "Raw token IDs: [0, 0, 2840, 410, 8, 9058, 29, 43, 3, 9, 471, 18, 2961, 9058, 624, 29, 58, 1]\n", + "Decoded Prediction: Where did the Klan have a week-long Klavern?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 60%|██████ | 96/160 [00:45<00:24, 2.63it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 96 ---\n", + "Raw token IDs: [0, 571, 186, 5128, 410, 493, 63, 106, 75, 154, 17046, 30, 8, 8667, 5, 17080, 3111, 1150, 3351, 58, 1]\n", + "Decoded Prediction: How many dates did Beyoncé embark on the Mrs. Carter Show World Tour?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 61%|██████ | 97/160 [00:45<00:22, 2.75it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 97 ---\n", + "Raw token IDs: [0, 2840, 19, 8, 23711, 2617, 13, 8, 3, 24756, 6219, 1069, 58, 1]\n", + "Decoded Prediction: Where is the Basilica of the Sacred Heart located?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 61%|██████▏ | 98/160 [00:46<00:24, 2.56it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 98 ---\n", + "Raw token IDs: [0, 4073, 3835, 2616, 493, 63, 14549, 38, 381, 1003, 30, 70, 570, 13, 8, 96, 22481, 460, 5396, 910, 11263, 12756, 7, 121, 58, 1]\n", + "Decoded Prediction: Which magazine listed Beyonce as number 17 on their list of the \"Top 20 Hot 100 Songwriters\"?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 62%|██████▏ | 99/160 [00:46<00:23, 2.57it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 99 ---\n", + "Raw token IDs: [0, 363, 47, 8, 564, 13, 19344, 63, 31, 7, 9364, 58, 1]\n", + "Decoded Prediction: What was the name of Destiny's Child?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 62%|██████▎ | 100/160 [00:46<00:22, 2.71it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 100 ---\n", + "Raw token IDs: [0, 0, 363, 1657, 410, 8, 783, 557, 169, 12, 5530, 493, 63, 106, 75, 154, 58, 1]\n", + "Decoded Prediction: What term did the media often use to describe Beyoncé?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 63%|██████▎ | 101/160 [00:47<00:21, 2.79it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 101 ---\n", + "Raw token IDs: [0, 0, 363, 47, 8, 564, 13, 8, 23739, 261, 57, 6248, 5, 29295, 58, 1]\n", + "Decoded Prediction: What was the name of the chapel used by Fr. Sorin?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 64%|██████▍ | 102/160 [00:47<00:19, 2.96it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 102 ---\n", + "Raw token IDs: [0, 571, 186, 203, 410, 8, 7262, 1369, 386, 1157, 10183, 7, 58, 1]\n", + "Decoded Prediction: How many years did the Irish win three national championships?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 64%|██████▍ | 103/160 [00:47<00:17, 3.19it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 103 ---\n", + "Raw token IDs: [0, 86, 125, 484, 47, 19344, 63, 31, 7, 9364, 3, 390, 58, 1]\n", + "Decoded Prediction: In what book was Destiny's Child based?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 65%|██████▌ | 104/160 [00:48<00:18, 3.02it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 104 ---\n", + "Raw token IDs: [0, 366, 19, 7711, 3, 17084, 234, 12, 8, 3699, 3, 14808, 257, 11507, 58, 1]\n", + "Decoded Prediction: When is Notre Dame home to the Global Adaptation Index?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 66%|██████▌ | 105/160 [00:48<00:19, 2.87it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 105 ---\n", + "Raw token IDs: [0, 571, 186, 481, 5526, 7711, 3, 17084, 16, 1412, 58, 1]\n", + "Decoded Prediction: How many students attended Notre Dame in 2014?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 66%|██████▋ | 106/160 [00:49<00:20, 2.64it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 106 ---\n", + "Raw token IDs: [0, 0, 363, 1974, 410, 493, 63, 106, 75, 154, 1912, 44, 8, 166, 1158, 31, 7, 166, 22145, 1996, 58, 1]\n", + "Decoded Prediction: What movie did Beyoncé perform at the first couple's first inaugural ball?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 67%|██████▋ | 107/160 [00:49<00:22, 2.40it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 107 ---\n", + "Raw token IDs: [0, 2645, 3977, 227, 493, 63, 106, 75, 154, 11, 9373, 18, 956, 1736, 28, 112, 384, 58, 1]\n", + "Decoded Prediction: Who died after Beyoncé and Jay-Z met with his family?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 68%|██████▊ | 108/160 [00:49<00:22, 2.36it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 108 ---\n", + "Raw token IDs: [0, 0, 363, 410, 493, 63, 106, 75, 154, 497, 5428, 15822, 3555, 160, 58, 1]\n", + "Decoded Prediction: What did Beyoncé say Madonna inspired her?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 68%|██████▊ | 109/160 [00:50<00:22, 2.23it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 109 ---\n", + "Raw token IDs: [0, 0, 366, 410, 493, 63, 14549, 1576, 2744, 1304, 11937, 16, 2129, 58, 1]\n", + "Decoded Prediction: When did Beyonce release Dangerously in Love?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 69%|██████▉ | 110/160 [00:50<00:21, 2.29it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 110 ---\n", + "Raw token IDs: [0, 0, 571, 186, 3187, 65, 493, 63, 106, 75, 154, 1916, 28, 19344, 63, 31, 7, 9364, 58, 1]\n", + "Decoded Prediction: How many records has Beyoncé sold with Destiny's Child?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 69%|██████▉ | 111/160 [00:51<00:20, 2.37it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 111 ---\n", + "Raw token IDs: [0, 37, 8026, 49, 1166, 21, 5408, 2855, 19, 1069, 3414, 13, 8, 3137, 26, 13277, 1888, 13, 1769, 4297, 1073, 3066, 58, 1]\n", + "Decoded Prediction: The Stayer Center for Executive Education is located south of the Mendoza College of Business executive education department?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 70%|███████ | 112/160 [00:51<00:18, 2.65it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 112 ---\n", + "Raw token IDs: [0, 2645, 1192, 325, 3809, 17, 444, 1166, 58, 1]\n", + "Decoded Prediction: Who built LaFortune Center?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 71%|███████ | 113/160 [00:51<00:16, 2.91it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 113 ---\n", + "Raw token IDs: [0, 2645, 3, 28285, 26, 120, 4283, 12, 8, 16823, 3790, 16, 507, 3449, 58, 1]\n", + "Decoded Prediction: Who reputedly appeared to the Virgin Mary in 1858?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 71%|███████▏ | 114/160 [00:52<00:16, 2.82it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 114 ---\n", + "Raw token IDs: [0, 0, 2840, 410, 493, 63, 106, 75, 154, 11, 9373, 1027, 281, 12, 12, 4279, 8, 2306, 1189, 21, 160, 314, 58, 1]\n", + "Decoded Prediction: Where did Beyoncé and Jay Z go to to shoot the album cover for her 4?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 72%|███████▏ | 115/160 [00:52<00:17, 2.62it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 115 ---\n", + "Raw token IDs: [0, 0, 2645, 1012, 1601, 8, 1657, 96, 279, 32, 32, 17, 63, 2176, 2936, 121, 12, 5530, 493, 63, 14549, 58, 1]\n", + "Decoded Prediction: Who popularized the term \"Bootylicious\" to describe Beyonce?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 72%|███████▎ | 116/160 [00:52<00:14, 2.99it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 116 ---\n", + "Raw token IDs: [0, 363, 2953, 186, 6502, 8445, 7, 12, 8079, 15, 1740, 58, 1]\n", + "Decoded Prediction: What caused many Catholic intellectuals to flee Europe?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 73%|███████▎ | 117/160 [00:53<00:12, 3.32it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 117 ---\n", + "Raw token IDs: [0, 363, 19, 8, 564, 13, 8, 2854, 2501, 58, 1]\n", + "Decoded Prediction: What is the name of the Science Hall?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 74%|███████▍ | 118/160 [00:53<00:13, 3.11it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 118 ---\n", + "Raw token IDs: [0, 363, 47, 8, 564, 13, 8, 8131, 10626, 57, 8, 896, 13, 1013, 22435, 12, 6774, 262, 8155, 1887, 7155, 7, 58, 1]\n", + "Decoded Prediction: What was the name of the contractor hired by the City of South Bend to construct Eddy Street Commons?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 74%|███████▍ | 119/160 [00:53<00:13, 3.15it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 119 ---\n", + "Raw token IDs: [0, 0, 2645, 130, 493, 63, 106, 75, 154, 31, 7, 5487, 8705, 12, 58, 1]\n", + "Decoded Prediction: Who were Beyoncé's letters addressed to?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 75%|███████▌ | 120/160 [00:54<00:15, 2.66it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 120 ---\n", + "Raw token IDs: [0, 0, 86, 125, 814, 410, 493, 63, 106, 75, 154, 1912, 28, 3, 9, 7100, 20790, 18, 3114, 77, 920, 821, 30, 19344, 63, 31, 7, 9364, 58, 1]\n", + "Decoded Prediction: In what film did Beyoncé perform with a Golden Globe-nominated performance on Destiny's Child?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 76%|███████▌ | 121/160 [00:54<00:13, 2.85it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 121 ---\n", + "Raw token IDs: [0, 366, 410, 493, 63, 14549, 428, 3879, 12, 3, 9, 3062, 58, 1]\n", + "Decoded Prediction: When did Beyonce give birth to a daughter?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 76%|███████▋ | 122/160 [00:54<00:13, 2.84it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 122 ---\n", + "Raw token IDs: [0, 0, 363, 410, 493, 63, 106, 75, 154, 2516, 13, 38, 8, 568, 113, 2139, 160, 2870, 160, 7562, 58, 1]\n", + "Decoded Prediction: What did Beyoncé speak of as the person who helped her fight her depression?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 77%|███████▋ | 123/160 [00:55<00:12, 2.90it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 123 ---\n", + "Raw token IDs: [0, 366, 47, 37, 7512, 15, 283, 5, 216, 7289, 107, 5355, 2012, 58, 1]\n", + "Decoded Prediction: When was Theodore M. Hesburgh Library completed?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 78%|███████▊ | 124/160 [00:55<00:12, 2.91it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 124 ---\n", + "Raw token IDs: [0, 86, 125, 215, 47, 17464, 1106, 3279, 12, 8, 2637, 13, 46, 2548, 58, 1]\n", + "Decoded Prediction: In what year was Lobund raised to the status of an Institute?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 78%|███████▊ | 125/160 [00:55<00:11, 3.04it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 125 ---\n", + "Raw token IDs: [0, 2645, 47, 8, 2753, 13, 7711, 3, 17084, 45, 25021, 12, 23744, 58, 1]\n", + "Decoded Prediction: Who was the president of Notre Dame from 1946 to 1952?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 79%|███████▉ | 126/160 [00:56<00:10, 3.24it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 126 ---\n", + "Raw token IDs: [0, 86, 125, 215, 410, 8, 7262, 1369, 8, 5088, 9713, 58, 1]\n", + "Decoded Prediction: In what year did the Irish win the Rose Bowl?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 79%|███████▉ | 127/160 [00:56<00:10, 3.27it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 127 ---\n", + "Raw token IDs: [0, 571, 186, 381, 80, 3605, 410, 493, 63, 106, 75, 154, 43, 58, 1]\n", + "Decoded Prediction: How many number one songs did Beyoncé have?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 80%|████████ | 128/160 [00:56<00:08, 3.56it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 128 ---\n", + "Raw token IDs: [0, 363, 19, 7711, 3, 17084, 31, 7, 1988, 38, 58, 1]\n", + "Decoded Prediction: What is Notre Dame's claim as?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 81%|████████ | 129/160 [00:56<00:08, 3.55it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 129 ---\n", + "Raw token IDs: [0, 2645, 1790, 493, 63, 106, 75, 154, 31, 7, 2772, 16, 1186, 2038, 58, 1]\n", + "Decoded Prediction: Who published Beyoncé's interview in April 2013?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 81%|████████▏ | 130/160 [00:57<00:08, 3.38it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 130 ---\n", + "Raw token IDs: [0, 37, 1022, 7628, 6455, 23, 32, 5929, 2781, 47, 3, 25125, 227, 125, 3819, 58, 1]\n", + "Decoded Prediction: The Jesuit Ratio Studiorum was modeled after what university?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 82%|████████▏ | 131/160 [00:57<00:08, 3.36it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 131 ---\n", + "Raw token IDs: [0, 0, 366, 410, 493, 63, 14549, 2467, 8, 283, 4562, 3953, 3057, 6580, 58, 1]\n", + "Decoded Prediction: When did Beyonce attend the MTV Video Music Awards?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 82%|████████▎ | 132/160 [00:57<00:09, 3.08it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 132 ---\n", + "Raw token IDs: [0, 4073, 3835, 2616, 493, 63, 106, 75, 154, 38, 8, 167, 2021, 3955, 16244, 13, 1230, 58, 1]\n", + "Decoded Prediction: Which magazine listed Beyoncé as the most powerful female musician of 2015?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 83%|████████▎ | 133/160 [00:58<00:08, 3.07it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 133 ---\n", + "Raw token IDs: [0, 0, 363, 5349, 13, 723, 405, 493, 63, 106, 75, 154, 31, 7, 723, 2389, 560, 58, 1]\n", + "Decoded Prediction: What genre of music does Beyoncé's music generally include?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 84%|████████▍ | 134/160 [00:58<00:08, 2.94it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 134 ---\n", + "Raw token IDs: [0, 363, 19, 8, 216, 159, 348, 21361, 107, 725, 16, 8, 1888, 10929, 2501, 13, 20758, 58, 1]\n", + "Decoded Prediction: What is the Heisman Trophies in the College Football Hall of Fame?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 84%|████████▍ | 135/160 [00:59<00:09, 2.67it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 135 ---\n", + "Raw token IDs: [0, 0, 363, 3, 288, 6015, 410, 493, 63, 106, 75, 154, 3508, 12, 227, 160, 1675, 28, 9373, 1027, 58, 1]\n", + "Decoded Prediction: What anthem did Beyoncé transition to after her relationship with Jay Z?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 85%|████████▌ | 136/160 [00:59<00:09, 2.55it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 136 ---\n", + "Raw token IDs: [0, 0, 363, 2324, 410, 493, 63, 14549, 10159, 30, 96, 345, 76, 17, 3, 9, 7888, 30, 94, 121, 58, 1]\n", + "Decoded Prediction: What song did Beyonce sing on \"Put a Ring on It\"?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 86%|████████▌ | 137/160 [00:59<00:08, 2.83it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 137 ---\n", + "Raw token IDs: [0, 363, 19, 493, 63, 14549, 31, 7, 991, 712, 58, 1]\n", + "Decoded Prediction: What is Beyonce's lead single?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 86%|████████▋ | 138/160 [01:00<00:07, 3.09it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 138 ---\n", + "Raw token IDs: [0, 0, 363, 19, 8, 10043, 740, 30, 7711, 3, 17084, 31, 7, 4730, 58, 1]\n", + "Decoded Prediction: What is the oldest building on Notre Dame's campus?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 87%|████████▋ | 139/160 [01:00<00:08, 2.50it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 139 ---\n", + "Raw token IDs: [0, 0, 363, 2760, 410, 493, 63, 14549, 1369, 16, 4402, 44, 8, 797, 3467, 13, 2570, 2748, 277, 6, 10236, 7, 6, 11, 19816, 7, 5777, 3057, 6580, 58, 1]\n", + "Decoded Prediction: What award did Beyonce win in 2001 at the American Society of Composers, Authors, and Publishers Pop Music Awards?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 88%|████████▊ | 140/160 [01:01<00:08, 2.39it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 140 ---\n", + "Raw token IDs: [0, 571, 186, 5128, 410, 493, 63, 106, 75, 154, 17046, 30, 8, 8667, 5, 17080, 3111, 1150, 3351, 58, 1]\n", + "Decoded Prediction: How many dates did Beyoncé embark on the Mrs. Carter Show World Tour?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 88%|████████▊ | 141/160 [01:01<00:08, 2.31it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 141 ---\n", + "Raw token IDs: [0, 486, 125, 1246, 410, 493, 63, 106, 75, 154, 942, 325, 382, 2960, 9, 5376, 13515, 58, 1]\n", + "Decoded Prediction: At what age did Beyoncé meet LaTavia Roberson?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 89%|████████▉ | 142/160 [01:02<00:09, 1.97it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 142 ---\n", + "Raw token IDs: [0, 19344, 63, 31, 7, 9364, 1883, 70, 779, 3783, 5695, 2324, 96, 439, 1092, 53, 2900, 121, 30, 125, 814, 58, 1]\n", + "Decoded Prediction: Destiny's Child released their major label debut song \"Killing Time\" on what film?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 89%|████████▉ | 143/160 [01:02<00:08, 1.97it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 143 ---\n", + "Raw token IDs: [0, 0, 2645, 410, 493, 63, 106, 75, 154, 11872, 135, 12, 992, 30, 16, 1230, 58, 1]\n", + "Decoded Prediction: Who did Beyoncé urge them to focus on in 2015?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 90%|█████████ | 144/160 [01:03<00:07, 2.18it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 144 ---\n", + "Raw token IDs: [0, 571, 5065, 19, 325, 3809, 17, 444, 58, 1]\n", + "Decoded Prediction: How tall is LaFortune?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 91%|█████████ | 145/160 [01:03<00:06, 2.34it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 145 ---\n", + "Raw token IDs: [0, 0, 571, 186, 3187, 65, 493, 63, 106, 75, 154, 1916, 38, 3, 9, 6729, 2377, 58, 1]\n", + "Decoded Prediction: How many records has Beyoncé sold as a solo artist?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 91%|█████████▏| 146/160 [01:03<00:06, 2.28it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 146 ---\n", + "Raw token IDs: [0, 0, 366, 410, 493, 63, 106, 75, 154, 143, 160, 5695, 30, 160, 66, 18, 89, 15, 13513, 1552, 1928, 180, 12204, 14200, 58, 1]\n", + "Decoded Prediction: When did Beyoncé make her debut on her all-female tour band Suga Mama?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 92%|█████████▏| 147/160 [01:04<00:04, 2.61it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 147 ---\n", + "Raw token IDs: [0, 571, 186, 8167, 410, 272, 31, 16803, 1789, 16, 165, 166, 471, 58, 1]\n", + "Decoded Prediction: How many copies did B'Day sell in its first week?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 92%|█████████▎| 148/160 [01:04<00:05, 2.38it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 148 ---\n", + "Raw token IDs: [0, 0, 363, 410, 493, 63, 106, 75, 154, 24861, 30, 1332, 13597, 7218, 227, 8, 8531, 2243, 5054, 30, 1826, 31, 7, 749, 4718, 505, 58, 1]\n", + "Decoded Prediction: What did Beyoncé endorse on March 26, 2013, after the Supreme Court debate on California's Proposition 8?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 93%|█████████▎| 149/160 [01:04<00:04, 2.75it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 149 ---\n", + "Raw token IDs: [0, 363, 19, 325, 3809, 17, 444, 31, 7, 2041, 1487, 58, 1]\n", + "Decoded Prediction: What is LaFortune's annual budget?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 94%|█████████▍| 150/160 [01:05<00:03, 3.02it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 150 ---\n", + "Raw token IDs: [0, 0, 2645, 19, 9762, 15, 210, 8900, 965, 58, 1]\n", + "Decoded Prediction: Who is Mathew Knowles?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 95%|█████████▌| 152/160 [01:05<00:02, 3.58it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 151 ---\n", + "Raw token IDs: [0, 2645, 19, 8, 2630, 8374, 651, 16, 1900, 3370, 16, 7711, 3, 17084, 58, 1]\n", + "Decoded Prediction: Who is the biggest rivalry in college football in Notre Dame?\n", + "\n", + "--- Sample 152 ---\n", + "Raw token IDs: [0, 366, 47, 3, 9, 8, 1863, 3595, 2946, 58, 1]\n", + "Decoded Prediction: When was a theology library opened?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 96%|█████████▌| 153/160 [01:05<00:01, 3.50it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 153 ---\n", + "Raw token IDs: [0, 0, 2840, 47, 493, 63, 106, 75, 154, 3, 9, 6729, 343, 21, 192, 203, 58, 1]\n", + "Decoded Prediction: Where was Beyoncé a soloist for two years?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 96%|█████████▋| 154/160 [01:06<00:01, 3.74it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 154 ---\n", + "Raw token IDs: [0, 571, 186, 6116, 405, 7711, 3, 17084, 12750, 43, 58, 1]\n", + "Decoded Prediction: How many seats does Notre Dame Stadium have?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 97%|█████████▋| 155/160 [01:07<00:02, 1.84it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 155 ---\n", + "Raw token IDs: [0, 0, 486, 125, 1246, 410, 493, 63, 14549, 11, 10605, 11768, 40, 232, 942, 325, 382, 2960, 9, 5376, 13515, 58, 1]\n", + "Decoded Prediction: At what age did Beyonce and Kelly Rowland meet LaTavia Roberson?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 98%|█████████▊| 156/160 [01:07<00:01, 2.14it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 156 ---\n", + "Raw token IDs: [0, 0, 2840, 47, 493, 63, 106, 75, 154, 3, 9, 6729, 343, 21, 192, 203, 58, 1]\n", + "Decoded Prediction: Where was Beyoncé a soloist for two years?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 98%|█████████▊| 157/160 [01:08<00:01, 2.15it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 157 ---\n", + "Raw token IDs: [0, 0, 86, 125, 5112, 410, 8, 11392, 53, 9036, 2125, 13, 1371, 4206, 493, 63, 106, 75, 154, 38, 8, 2224, 10178, 9152, 16, 1371, 58, 1]\n", + "Decoded Prediction: In what decade did the Recording Industry Association of America recognize Beyoncé as the Top Certified Artist in America?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 99%|█████████▉| 158/160 [01:08<00:00, 2.20it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 158 ---\n", + "Raw token IDs: [0, 0, 363, 47, 8, 564, 13, 8, 3, 60, 18, 21019, 13, 493, 63, 14549, 31, 7, 5093, 3605, 58, 1]\n", + "Decoded Prediction: What was the name of the re-release of Beyonce's Spanish songs?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\r", + " 99%|█████████▉| 159/160 [01:08<00:00, 2.40it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 159 ---\n", + "Raw token IDs: [0, 363, 405, 493, 63, 106, 75, 154, 3115, 369, 95, 28, 383, 999, 58, 1]\n", + "Decoded Prediction: What does Beyoncé typically come up with during production?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 160/160 [01:09<00:00, 2.31it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- Sample 160 ---\n", + "Raw token IDs: [0, 363, 4889, 405, 7711, 3, 17084, 5978, 38, 3, 9, 1144, 13, 58, 1]\n", + "Decoded Prediction: What division does Notre Dame compete as a member of?\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "from tqdm import tqdm\n", + "\n", + "decoded_preds = []\n", + "decoded_refs = []\n", + "\n", + "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", + "model.to(device)\n", + "model.eval()\n", + "\n", + "for i, sample in enumerate(tqdm(eval_dataset)):\n", + " if sample[\"answer\"] in sample[\"context\"]:\n", + " highlighted_context = sample[\"context\"].replace(sample[\"answer\"], f\" {sample['answer']} \")\n", + " else:\n", + " highlighted_context = sample[\"context\"] + f\" {sample['answer']} \"\n", + "\n", + " input_text = f\"generate question: {highlighted_context}\"\n", + " inputs = tokenizer(\n", + " input_text,\n", + " return_tensors=\"pt\",\n", + " truncation=True,\n", + " padding=\"max_length\",\n", + " max_length=256\n", + " ).to(device)\n", + "\n", + " output_ids = model.generate(\n", + " **inputs,\n", + " max_length=64,\n", + " num_beams=4,\n", + " early_stopping=False, # <— loosen this up for now\n", + " no_repeat_ngram_size=2\n", + " )\n", + "\n", + " # ���� Debug print\n", + " print(f\"\\n--- Sample {i + 1} ---\")\n", + " print(\"Raw token IDs:\", output_ids[0].tolist())\n", + "\n", + " decoded_pred = tokenizer.decode(output_ids[0], skip_special_tokens=True)\n", + " print(\"Decoded Prediction:\", decoded_pred)\n", + "\n", + " decoded_preds.append(decoded_pred)\n", + " decoded_refs.append(sample[\"question\"])\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "vEf0yWcGEaEA", + "outputId": "d9aa2b3f-3eb7-46a9-c2ad-374875f2c519" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Sample Predictions vs References with BLEU-1:\n", + "--------------------------------------------------\n", + "\n", + "Sample 1\n", + "Prediction : How long did Burns become president of Notre Dame?\n", + "Reference : Over how many years did the change to national standards undertaken at Notre Dame in the early 20th century take place?\n", + "BLEU-1 : 0.0586\n", + "\n", + "Sample 2\n", + "Prediction : Who wrote that Beyonce has become a crossover sex symbol since the release of Dangerously in Love?\n", + "Reference : What journalist wrote that Beyoncé was a \"sex symbol\"?\n", + "BLEU-1 : 0.1765\n", + "\n", + "Sample 3\n", + "Prediction : Beyonce was the first African-American artist to cover the September issue of what magazine?\n", + "Reference : Which magazine did Beyoncé pose for the cover, making her the first black female artist to do so?\n", + "BLEU-1 : 0.2684\n", + "\n", + "Sample 4\n", + "Prediction : What was Beyonce's first solo album released on June 24, 2003?\n", + "Reference : Beyonce's first album by herself was called what?\n", + "BLEU-1 : 0.3636\n", + "\n", + "Sample 5\n", + "Prediction : Who did Beyoncé marry on April 4, 2008?\n", + "Reference : Beyonce got married in 2008 to whom?\n", + "BLEU-1 : 0.0000\n", + "\n", + "Average BLEU-1 Score on Eval Set: 0.1734\n" + ] + } + ], + "source": [ + "\n", + "from nltk.translate.bleu_score import sentence_bleu, SmoothingFunction\n", + "\n", + "# Use smoothing to avoid zero score for short outputs\n", + "smoothie = SmoothingFunction().method1\n", + "\n", + "bleu_scores = []\n", + "print(\"\\nSample Predictions vs References with BLEU-1:\")\n", + "print(\"-\" * 50)\n", + "\n", + "for i in range(min(5, len(decoded_preds))):\n", + " pred = decoded_preds[i]\n", + " ref = decoded_refs[i]\n", + " bleu = sentence_bleu([ref.split()], pred.split(), weights=(1, 0, 0, 0), smoothing_function=smoothie)\n", + "\n", + " print(f\"\\nSample {i + 1}\")\n", + " print(f\"Prediction : {pred}\")\n", + " print(f\"Reference : {ref}\")\n", + " print(f\"BLEU-1 : {bleu:.4f}\")\n", + " bleu_scores.append(bleu)\n", + "\n", + "# Compute average BLEU-1 score across all examples\n", + "avg_bleu = sum(bleu_scores) / len(bleu_scores) if bleu_scores else 0\n", + "print(f\"\\nAverage BLEU-1 Score on Eval Set: {avg_bleu:.4f}\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "GDEY6dHzNm6f", + "outputId": "08d85d94-4625-45a3-c505-612ae37d07b4" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample 1\n", + "BLEU-2: 0.0139, BLEU-4: 0.0075\n", + "Sample 2\n", + "BLEU-2: 0.1050, BLEU-4: 0.0269\n", + "Sample 3\n", + "BLEU-2: 0.1761, BLEU-4: 0.0339\n", + "Sample 4\n", + "BLEU-2: 0.1907, BLEU-4: 0.0474\n", + "Sample 5\n", + "BLEU-2: 0.0000, BLEU-4: 0.0000\n", + "Sample 6\n", + "BLEU-2: 0.0577, BLEU-4: 0.0408\n", + "Sample 7\n", + "BLEU-2: 0.0242, BLEU-4: 0.0121\n", + "Sample 8\n", + "BLEU-2: 0.4082, BLEU-4: 0.1313\n", + "Sample 9\n", + "BLEU-2: 0.0711, BLEU-4: 0.0626\n", + "Sample 10\n", + "BLEU-2: 0.0426, BLEU-4: 0.0224\n", + "Sample 11\n", + "BLEU-2: 0.1826, BLEU-4: 0.0494\n", + "Sample 12\n", + "BLEU-2: 0.1690, BLEU-4: 0.0368\n", + "Sample 13\n", + "BLEU-2: 0.0751, BLEU-4: 0.0211\n", + "Sample 14\n", + "BLEU-2: 0.4082, BLEU-4: 0.2778\n", + "Sample 15\n", + "BLEU-2: 0.4939, BLEU-4: 0.4115\n", + "Sample 16\n", + "BLEU-2: 0.0296, BLEU-4: 0.0210\n", + "Sample 17\n", + "BLEU-2: 0.3015, BLEU-4: 0.0564\n", + "Sample 18\n", + "BLEU-2: 0.2236, BLEU-4: 0.0724\n", + "Sample 19\n", + "BLEU-2: 0.4472, BLEU-4: 0.2907\n", + "Sample 20\n", + "BLEU-2: 0.2315, BLEU-4: 0.0650\n", + "Sample 21\n", + "BLEU-2: 0.0667, BLEU-4: 0.0298\n", + "Sample 22\n", + "BLEU-2: 0.0408, BLEU-4: 0.0174\n", + "Sample 23\n", + "BLEU-2: 0.3313, BLEU-4: 0.2037\n", + "Sample 24\n", + "BLEU-2: 0.0645, BLEU-4: 0.0316\n", + "Sample 25\n", + "BLEU-2: 0.1157, BLEU-4: 0.0291\n", + "Sample 26\n", + "BLEU-2: 0.6708, BLEU-4: 0.5424\n", + "Sample 27\n", + "BLEU-2: 0.2652, BLEU-4: 0.1631\n", + "Sample 28\n", + "BLEU-2: 0.2705, BLEU-4: 0.0517\n", + "Sample 29\n", + "BLEU-2: 0.0354, BLEU-4: 0.0162\n", + "Sample 30\n", + "BLEU-2: 0.4472, BLEU-4: 0.1375\n", + "Sample 31\n", + "BLEU-2: 0.0296, BLEU-4: 0.0210\n", + "Sample 32\n", + "BLEU-2: 0.1257, BLEU-4: 0.0336\n", + "Sample 33\n", + "BLEU-2: 0.2248, BLEU-4: 0.0836\n", + "Sample 34\n", + "BLEU-2: 0.2853, BLEU-4: 0.0897\n", + "Sample 35\n", + "BLEU-2: 0.0302, BLEU-4: 0.0189\n", + "Sample 36\n", + "BLEU-2: 0.2739, BLEU-4: 0.0801\n", + "Sample 37\n", + "BLEU-2: 0.0000, BLEU-4: 0.0000\n", + "Sample 38\n", + "BLEU-2: 0.5270, BLEU-4: 0.4463\n", + "Sample 39\n", + "BLEU-2: 0.5274, BLEU-4: 0.4562\n", + "Sample 40\n", + "BLEU-2: 0.1093, BLEU-4: 0.0307\n", + "Sample 41\n", + "BLEU-2: 0.3918, BLEU-4: 0.3642\n", + "Sample 42\n", + "BLEU-2: 0.5547, BLEU-4: 0.4280\n", + "Sample 43\n", + "BLEU-2: 0.0331, BLEU-4: 0.0170\n", + "Sample 44\n", + "BLEU-2: 0.0332, BLEU-4: 0.0151\n", + "Sample 45\n", + "BLEU-2: 0.1491, BLEU-4: 0.0446\n", + "Sample 46\n", + "BLEU-2: 0.2388, BLEU-4: 0.0914\n", + "Sample 47\n", + "BLEU-2: 0.1907, BLEU-4: 0.0474\n", + "Sample 48\n", + "BLEU-2: 0.8165, BLEU-4: 0.5969\n", + "Sample 49\n", + "BLEU-2: 0.4396, BLEU-4: 0.3716\n", + "Sample 50\n", + "BLEU-2: 0.1353, BLEU-4: 0.0366\n", + "Sample 51\n", + "BLEU-2: 0.0301, BLEU-4: 0.0192\n", + "Sample 52\n", + "BLEU-2: 0.0522, BLEU-4: 0.0248\n", + "Sample 53\n", + "BLEU-2: 0.0523, BLEU-4: 0.0188\n", + "Sample 54\n", + "BLEU-2: 0.3280, BLEU-4: 0.0742\n", + "Sample 55\n", + "BLEU-2: 0.1195, BLEU-4: 0.0309\n", + "Sample 56\n", + "BLEU-2: 0.0426, BLEU-4: 0.0224\n", + "Sample 57\n", + "BLEU-2: 0.1118, BLEU-4: 0.0288\n", + "Sample 58\n", + "BLEU-2: 0.6396, BLEU-4: 0.4833\n", + "Sample 59\n", + "BLEU-2: 0.0598, BLEU-4: 0.0341\n", + "Sample 60\n", + "BLEU-2: 0.0244, BLEU-4: 0.0215\n", + "Sample 61\n", + "BLEU-2: 0.0776, BLEU-4: 0.0188\n", + "Sample 62\n", + "BLEU-2: 0.1826, BLEU-4: 0.0494\n", + "Sample 63\n", + "BLEU-2: 0.1091, BLEU-4: 0.0243\n", + "Sample 64\n", + "BLEU-2: 0.0318, BLEU-4: 0.0215\n", + "Sample 65\n", + "BLEU-2: 0.0242, BLEU-4: 0.0131\n", + "Sample 66\n", + "BLEU-2: 0.0527, BLEU-4: 0.0292\n", + "Sample 67\n", + "BLEU-2: 0.0331, BLEU-4: 0.0170\n", + "Sample 68\n", + "BLEU-2: 0.2315, BLEU-4: 0.0650\n", + "Sample 69\n", + "BLEU-2: 0.1630, BLEU-4: 0.1046\n", + "Sample 70\n", + "BLEU-2: 0.1913, BLEU-4: 0.0389\n", + "Sample 71\n", + "BLEU-2: 0.4004, BLEU-4: 0.1251\n", + "Sample 72\n", + "BLEU-2: 0.0488, BLEU-4: 0.0330\n", + "Sample 73\n", + "BLEU-2: 0.2549, BLEU-4: 0.1071\n", + "Sample 74\n", + "BLEU-2: 0.0889, BLEU-4: 0.0225\n", + "Sample 75\n", + "BLEU-2: 0.3381, BLEU-4: 0.2575\n", + "Sample 76\n", + "BLEU-2: 0.0000, BLEU-4: 0.0000\n", + "Sample 77\n", + "BLEU-2: 0.1491, BLEU-4: 0.0446\n", + "Sample 78\n", + "BLEU-2: 0.2970, BLEU-4: 0.1703\n", + "Sample 79\n", + "BLEU-2: 0.4924, BLEU-4: 0.1281\n", + "Sample 80\n", + "BLEU-2: 0.6202, BLEU-4: 0.4572\n", + "Sample 81\n", + "BLEU-2: 0.2010, BLEU-4: 0.0541\n", + "Sample 82\n", + "BLEU-2: 0.0267, BLEU-4: 0.0172\n", + "Sample 83\n", + "BLEU-2: 0.0253, BLEU-4: 0.0155\n", + "Sample 84\n", + "BLEU-2: 0.0333, BLEU-4: 0.0211\n", + "Sample 85\n", + "BLEU-2: 0.0373, BLEU-4: 0.0240\n", + "Sample 86\n", + "BLEU-2: 0.2215, BLEU-4: 0.0623\n", + "Sample 87\n", + "BLEU-2: 0.3381, BLEU-4: 0.0925\n", + "Sample 88\n", + "BLEU-2: 0.5774, BLEU-4: 0.3656\n", + "Sample 89\n", + "BLEU-2: 0.1516, BLEU-4: 0.0353\n", + "Sample 90\n", + "BLEU-2: 0.0307, BLEU-4: 0.0158\n", + "Sample 91\n", + "BLEU-2: 0.0389, BLEU-4: 0.0203\n", + "Sample 92\n", + "BLEU-2: 0.0545, BLEU-4: 0.0128\n", + "Sample 93\n", + "BLEU-2: 0.0550, BLEU-4: 0.0241\n", + "Sample 94\n", + "BLEU-2: 0.0456, BLEU-4: 0.0184\n", + "Sample 95\n", + "BLEU-2: 0.1837, BLEU-4: 0.0480\n", + "Sample 96\n", + "BLEU-2: 0.6355, BLEU-4: 0.4844\n", + "Sample 97\n", + "BLEU-2: 0.2619, BLEU-4: 0.1811\n", + "Sample 98\n", + "BLEU-2: 0.2970, BLEU-4: 0.0805\n", + "Sample 99\n", + "BLEU-2: 0.0338, BLEU-4: 0.0192\n", + "Sample 100\n", + "BLEU-2: 0.0427, BLEU-4: 0.0227\n", + "Sample 101\n", + "BLEU-2: 0.2753, BLEU-4: 0.0544\n", + "Sample 102\n", + "BLEU-2: 0.2336, BLEU-4: 0.0945\n", + "Sample 103\n", + "BLEU-2: 0.0984, BLEU-4: 0.0265\n", + "Sample 104\n", + "BLEU-2: 0.4132, BLEU-4: 0.2405\n", + "Sample 105\n", + "BLEU-2: 0.5433, BLEU-4: 0.3436\n", + "Sample 106\n", + "BLEU-2: 0.4606, BLEU-4: 0.2620\n", + "Sample 107\n", + "BLEU-2: 0.1495, BLEU-4: 0.0404\n", + "Sample 108\n", + "BLEU-2: 0.0690, BLEU-4: 0.0393\n", + "Sample 109\n", + "BLEU-2: 0.2134, BLEU-4: 0.0923\n", + "Sample 110\n", + "BLEU-2: 0.4004, BLEU-4: 0.1251\n", + "Sample 111\n", + "BLEU-2: 0.0181, BLEU-4: 0.0108\n", + "Sample 112\n", + "BLEU-2: 0.0000, BLEU-4: 0.0000\n", + "Sample 113\n", + "BLEU-2: 0.2137, BLEU-4: 0.0818\n", + "Sample 114\n", + "BLEU-2: 0.0913, BLEU-4: 0.0260\n", + "Sample 115\n", + "BLEU-2: 0.0000, BLEU-4: 0.0000\n", + "Sample 116\n", + "BLEU-2: 0.2598, BLEU-4: 0.1015\n", + "Sample 117\n", + "BLEU-2: 0.1239, BLEU-4: 0.0348\n", + "Sample 118\n", + "BLEU-2: 0.1539, BLEU-4: 0.0290\n", + "Sample 119\n", + "BLEU-2: 0.0000, BLEU-4: 0.0000\n", + "Sample 120\n", + "BLEU-2: 0.0000, BLEU-4: 0.0000\n", + "Sample 121\n", + "BLEU-2: 0.5669, BLEU-4: 0.1809\n", + "Sample 122\n", + "BLEU-2: 0.1482, BLEU-4: 0.0359\n", + "Sample 123\n", + "BLEU-2: 0.2536, BLEU-4: 0.1845\n", + "Sample 124\n", + "BLEU-2: 0.3693, BLEU-4: 0.1109\n", + "Sample 125\n", + "BLEU-2: 0.1651, BLEU-4: 0.0441\n", + "Sample 126\n", + "BLEU-2: 0.5608, BLEU-4: 0.4411\n", + "Sample 127\n", + "BLEU-2: 0.0238, BLEU-4: 0.0119\n", + "Sample 128\n", + "BLEU-2: 0.1918, BLEU-4: 0.0580\n", + "Sample 129\n", + "BLEU-2: 0.0000, BLEU-4: 0.0000\n", + "Sample 130\n", + "BLEU-2: 0.0000, BLEU-4: 0.0000\n", + "Sample 131\n", + "BLEU-2: 0.0373, BLEU-4: 0.0240\n", + "Sample 132\n", + "BLEU-2: 0.6396, BLEU-4: 0.5491\n", + "Sample 133\n", + "BLEU-2: 0.3333, BLEU-4: 0.1275\n", + "Sample 134\n", + "BLEU-2: 0.2600, BLEU-4: 0.2118\n", + "Sample 135\n", + "BLEU-2: 0.0000, BLEU-4: 0.0000\n", + "Sample 136\n", + "BLEU-2: 0.0210, BLEU-4: 0.0131\n", + "Sample 137\n", + "BLEU-2: 0.0318, BLEU-4: 0.0241\n", + "Sample 138\n", + "BLEU-2: 0.4564, BLEU-4: 0.3156\n", + "Sample 139\n", + "BLEU-2: 0.1209, BLEU-4: 0.0271\n", + "Sample 140\n", + "BLEU-2: 0.3922, BLEU-4: 0.2300\n", + "Sample 141\n", + "BLEU-2: 0.6547, BLEU-4: 0.4111\n", + "Sample 142\n", + "BLEU-2: 0.0358, BLEU-4: 0.0185\n", + "Sample 143\n", + "BLEU-2: 0.1652, BLEU-4: 0.0447\n", + "Sample 144\n", + "BLEU-2: 0.0175, BLEU-4: 0.0129\n", + "Sample 145\n", + "BLEU-2: 0.1224, BLEU-4: 0.0331\n", + "Sample 146\n", + "BLEU-2: 0.1387, BLEU-4: 0.0364\n", + "Sample 147\n", + "BLEU-2: 0.2004, BLEU-4: 0.0383\n", + "Sample 148\n", + "BLEU-2: 0.3321, BLEU-4: 0.2818\n", + "Sample 149\n", + "BLEU-2: 0.1425, BLEU-4: 0.0463\n", + "Sample 150\n", + "BLEU-2: 0.0000, BLEU-4: 0.0000\n", + "Sample 151\n", + "BLEU-2: 0.0426, BLEU-4: 0.0224\n", + "Sample 152\n", + "BLEU-2: 0.1179, BLEU-4: 0.0533\n", + "Sample 153\n", + "BLEU-2: 0.3336, BLEU-4: 0.1304\n", + "Sample 154\n", + "BLEU-2: 0.5175, BLEU-4: 0.1729\n", + "Sample 155\n", + "BLEU-2: 0.1348, BLEU-4: 0.0399\n", + "Sample 156\n", + "BLEU-2: 0.0444, BLEU-4: 0.0222\n", + "Sample 157\n", + "BLEU-2: 0.6398, BLEU-4: 0.5014\n", + "Sample 158\n", + "BLEU-2: 0.0302, BLEU-4: 0.0189\n", + "Sample 159\n", + "BLEU-2: 0.2619, BLEU-4: 0.0856\n", + "Sample 160\n", + "BLEU-2: 0.0471, BLEU-4: 0.0251\n" + ] + } + ], + "source": [ + "from nltk.translate.bleu_score import sentence_bleu, SmoothingFunction\n", + "\n", + "for i, (pred, ref) in enumerate(zip(decoded_preds, decoded_refs)):\n", + " bleu2 = sentence_bleu([ref.split()], pred.split(), weights=(0.5, 0.5), smoothing_function=smoothie)\n", + " bleu4 = sentence_bleu([ref.split()], pred.split(), weights=(0.25, 0.25, 0.25, 0.25), smoothing_function=smoothie)\n", + " print(f\"Sample {i+1}\\nBLEU-2: {bleu2:.4f}, BLEU-4: {bleu4:.4f}\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Gc3vsZ3aN6-b", + "outputId": "b8dec4e5-56d7-4b0c-8b27-5fe4cc4ea3b1" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Length of decoded_preds: 160\n", + "Length of decoded_refs: 160\n", + "Length of bleu_scores: 5\n" + ] + } + ], + "source": [ + "print(\"Length of decoded_preds:\", len(decoded_preds))\n", + "print(\"Length of decoded_refs:\", len(decoded_refs))\n", + "print(\"Length of bleu_scores:\", len(bleu_scores))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "id": "M9GuNM1nOHtv" + }, + "outputs": [], + "source": [ + "from nltk.translate.bleu_score import sentence_bleu, SmoothingFunction\n", + "\n", + "smoothing = SmoothingFunction().method1\n", + "bleu_scores = [\n", + " sentence_bleu([ref.split()], pred.split(), weights=(1, 0, 0, 0), smoothing_function=smoothing)\n", + " for pred, ref in zip(decoded_preds, decoded_refs)\n", + "]\n", + "\n", + "df = pd.DataFrame({\n", + " \"Prediction\": decoded_preds,\n", + " \"Reference\": decoded_refs,\n", + " \"BLEU-1\": bleu_scores\n", + "})\n", + "df.to_csv(\"question_generation_bleu_scores.csv\", index=False)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "sJ7J2ajfOUnJ", + "outputId": "5026cf2b-91ba-4ea2-aeb4-9124a6b4d468" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Prediction \\\n", + "0 How long did Burns become president of Notre D... \n", + "1 Who wrote that Beyonce has become a crossover ... \n", + "2 Beyonce was the first African-American artist ... \n", + "3 What was Beyonce's first solo album released o... \n", + "4 Who did Beyoncé marry on April 4, 2008? \n", + "\n", + " Reference BLEU-1 \n", + "0 Over how many years did the change to national... 0.058577 \n", + "1 What journalist wrote that Beyoncé was a \"sex ... 0.176471 \n", + "2 Which magazine did Beyoncé pose for the cover,... 0.268385 \n", + "3 Beyonce's first album by herself was called what? 0.363636 \n", + "4 Beyonce got married in 2008 to whom? 0.000000 \n" + ] + } + ], + "source": [ + "#preview of the file\n", + "import pandas as pd\n", + "\n", + "df_check = pd.read_csv(\"question_generation_bleu_scores.csv\")\n", + "print(df_check.head())\n" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 431 + }, + "id": "X0DwkC8_Odlx", + "outputId": "dee22ff2-3535-49a6-e980-313749868bda" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAHqCAYAAAAZLi26AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAmQ1JREFUeJzs3Xl4U2XePvA7aZvuadO9dElayi5bWymLbK8Iig6Dg4jiyCLiOCMogrLM/ESWUWQRcIQRFwr4qu/guI86SEWBKhVsoaxSBdq0dKOlabq3aXJ+fyQ55ZAUSmlJ2t6f6+rl5JwnyZP0GeXL8z33kQmCIICIiIiIiIiI2pzc0RMgIiIiIiIi6qxYdBMRERERERG1ExbdRERERERERO2ERTcRERERERFRO2HRTURERERERNROWHQTERERERERtRMW3URERERERETthEU3ERERERERUTth0U1ERERERETUTlh0ExEREXUCOTk5kMlk2LBhg6OnQkREV2DRTURETmPnzp2QyWTij6urKyIiIjBr1izk5+fbfY4gCPjf//1fjBo1Cv7+/vDy8kL//v2xatUqVFdX24zXaDS477777L5Weno6ZDIZdu7caXPuxIkTmD17NmJiYuDh4QEfHx8MGjQIixcvxoULFyRjZ82aJfkcV/54eHhc93uoqqrCiy++iNtuuw3e3t4IDAzEoEGD8Mwzz6CgoOC6z6f2YS1qm/t55ZVXHD1FIiJyQq6OngAREdHVVq1ahZiYGNTV1eGnn37Czp078cMPP+DUqVOSotVoNGL69On48MMPMXLkSKxYsQJeXl5ITU3FypUr8e9//xvffvstQkNDb2o+b7/9Nv785z8jKCgIjzzyCHr37o3GxkacOnUK7777LjZv3oza2lq4uLiIz3F3d8c777xj81pXjrHHYDBg1KhROHv2LGbOnIn58+ejqqoKp0+fxgcffID7778f3bp1u6nPQzfn4YcfxsSJE22ODx482AGzISIiZ8eim4iInM4999yDxMREAMDjjz+OoKAgrF27Fl988QUefPBBcdy6devw4Ycf4rnnnsP69evF40888QQefPBBTJ48GbNmzcJ///vfVs/l0KFD+POf/4wRI0bgyy+/hK+vr+T8q6++ipdeesnmea6urvjjH/94w+/32Wef4dixY3j//fcxffp0ybm6ujo0NDTc8Gu2VnV1Nby9vW/Z+zmDlnzm+Pj4Vv1uiYioa2J7OREROb2RI0cCAM6fPy8eq62txfr169GzZ0+sWbPG5jm/+93vMHPmTOzZswc//fRTq9975cqVkMlkeP/9920KbgDw8PDA6tWrr7uD3VLWzzhixAi776VUKiXHzp49iwcffBDBwcHw9PREr1698Le//U0y5tixY7jnnnugVCrh4+ODO++80+Y7sbb2HzhwAH/5y18QEhKCyMhI8fx///tfjBw5Et7e3vD19cW9996L06dPS16jqKgIs2fPRmRkJNzd3REeHo7f//73yMnJue7n/u6778TX9/f3x+9//3v88ssv4vmPPvpInN/V3nzzTchkMpw6dUryvTzwwAMICAiAh4cHEhMT8cUXX9zQZ74Z1ssY9u7di0GDBsHDwwN9+/bFJ598YjP2woULmDp1KgICAuDl5YWhQ4fiq6++shlXV1eHFStWoGfPnvDw8EB4eDj+8Ic/SP5/YfXWW2+he/fucHd3x+23346ff/5Zcv5mfldERHRjuNNNREROz1oIqFQq8dgPP/wAnU6HZ555Bq6u9v9zNmPGDOzYsQNffvklhg4desPvW1NTg++++w5jxoxpVTFWWlpqc0yhUNgUzldSq9UAgHfffRf/7//9P8hksmbHnjhxAiNHjoSbmxueeOIJaDQanD9/Hv/5z3/E3ffTp09j5MiRUCqVWLx4Mdzc3PDmm29izJgxOHDgAJKSkiSv+Ze//AXBwcFYvny5eE38//7v/2LmzJmYMGEC1q5di5qaGrzxxhu44447cOzYMWg0GgDAlClTcPr0acyfPx8ajQaXLl1CSkoKcnNzxTH2fPvtt7jnnnsQGxuLFStWoLa2Fq+//jpGjBiBo0ePQqPR4N5774WPjw8+/PBDjB49WvL83bt3o1+/frjtttvEzzxixAhERERg6dKl8Pb2xocffojJkyfj448/xv3333/dz3wtNTU1dn+3/v7+krX422+/Ydq0aXjyyScxc+ZM7NixA1OnTsWePXtw1113AQCKi4sxfPhw1NTU4Omnn0ZgYCB27dqFSZMm4aOPPhLnajQacd9992Hfvn146KGH8Mwzz6CyshIpKSk4deoUunfvLr7vBx98gMrKSvzpT3+CTCbDunXr8Ic//AEXLlyAm5vbTf2uiIioFQQiIiInsWPHDgGA8O233wolJSVC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MGGC4OfnJ3h4eAjdu3cXZs2aJaSnpwuCIAilpaXCU089JfTu3Vvw9vYW/Pz8hKSkJOHDDz9s9rNe6dtvvxVGjBgheHp6CkqlUvjd734nnDlzxu7YlJQUAYAgk8kkt5G70vnz54UZM2YIYWFhgpubmxARESHcd999wkcffdTiz3y1690ybObMmeJY663pvvnmG2HAgAGCu7u70Lt3b+Hf//633bk+8MAD4u9wyJAhwpdffmkzrqamRvjb3/4mrtuwsDDhgQceEG8HZ52fvVuBARBefPFFQRBu/ndFREQ3RiYIbdwXR0RERNTFaTQa3Hbbbfjyyy8dPRUiInIwXtNNRERERERE1E5YdBMRERERERG1ExbdRERERERERO2E13QTERERERERtRPudBMRERERERG1ExbdRERERERERO3E1dET6KxMJhMKCgrg6+sLmUzm6OkQERERERFRGxIEAZWVlejWrRvk8ub3s1l0t5OCggJERUU5ehpERERERETUjvLy8hAZGdnseRbd7cTX1xeA+RegVCodPBv7DAYD9u7di/Hjx8PNzc3R06EuiuuQnAXXIjkDrkNyBlyH5Aw6wjqsqKhAVFSUWPs1h0V3O7G2lCuVSqcuur28vKBUKp12IVPnx3VIzoJrkZwB1yE5A65DcgYdaR1e73JiBqkRERERERERtRMW3URERERERETthEU3ERERERERUTvhNd0OZjQaYTAYHPLeBoMBrq6uqKurg9FodMgcOio3Nze4uLg4ehpEREREROTkWHQ7iCAIKCoqQnl5uUPnEBYWhry8PN5LvBX8/f0RFhbG746IiIiIiJrFottBrAV3SEgIvLy8HFK4mUwmVFVVwcfH55o3cycpQRBQU1ODS5cuAQDCw8MdPCMiIiIiInJWLLodwGg0igV3YGCgw+ZhMpnQ0NAADw8PFt03yNPTEwBw6dIlhISEsNWciIiIiIjsYqXlANZruL28vBw8E7oZ1t+fo67JJyIiIiIi58ei24F4LXDHxt8fERERERFdD4tuIiIiIiIionbCopuIiIiIiIionbDo7uCMJgFp5y/j88x8pJ2/DKNJaNf3mzVrFmQyGWQyGdzc3BATE4PFixejrq5OMu7LL7/E6NGj4evrCy8vL9x+++3YuXOnZMz+/fshk8ns3jZNo9Fg8+bNkmPff/897rvvPgQHB8PDwwPd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yJEj9ctf/lK//e1vtWTJEp0+fVrh4eGSpO3btyszM1PV1dWKi4tTYmKi5syZo2eeeea6GWw2m374wx9q1apVktoa+V69eunPf/4ze8sBAD0ee7oBAPBzEyZM8GiqJSk6Otr9tdPp9HjM6XSqqqpKknT06FGNGDHC3XBLUnp6ulwul44dOyabzabq6mo98MADN8yQmprq/jo8PFyRkZH617/+1dVLAgDAa9B0AwDg58LDw695u/ftEhoa2ql5QUFBHvdtNptcLpcZkQAA6Fbs6QYAADd08ODBa+4PGzZMkjRs2DC99957amxsdD9eWVkpu92u5ORkRUREKCkpSRUVFd2aGQAAb8FKNwAAfq65uVk1NTUeY4GBgYqJiZEklZaWavTo0br33nu1bt06vfnmm3rppZckSTNnztSKFSuUm5urlStX6vz583r88cf13e9+V3FxcZKklStXKi8vT7GxsXrooYdUX1+vyspKPf744917oQAAWICmGwAAP1deXq74+HiPseTkZH3wwQeS2k4WLykp0WOPPab4+Hht2LBBKSkpkqSwsDDt2LFDCxcu1N13362wsDA9/PDDWr16tfu1cnNzdfnyZa1Zs0ZPPvmkYmJi9Mgjj3TfBQIAYCFOLwcAAO2y2WzavHmzsrKyrI4CAECPxJ5uAAAAAABMQtMNAAAAAIBJ2NMNAADaxS40AABuDSvdAAAAAACYhKYbAAAAAACT0HQDAAAAAGASmm4AAAAAAExC0w0AAAAAgElougEAAAAAMAlNNwAAAAAAJqHpBgAAAADAJDTdAAAAAACY5P8B4dZNGhStE3sAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Plot ROUGE-1 and ROUGE-L scores over epochs\n", + "plt.figure(figsize=(10, 5))\n", + "plt.plot(epochs, rouge1_scores, marker='o', label='ROUGE-1')\n", + "plt.plot(epochs, rougeL_scores, marker='o', label='ROUGE-L')\n", + "plt.xlabel('Epoch')\n", + "plt.ylabel('Score')\n", + "plt.title('ROUGE Scores over Epochs')\n", + "plt.legend()\n", + "plt.grid(True)\n", + "plt.tight_layout()\n", + "plt.show()\n", + "\n", + "#ADD TO YOUR REPORT :\n", + "#INTERPRETATION : The line plot shows a steady increase in both ROUGE-1 and ROUGE-L scores over training epochs, indicating that the model's ability to generate relevant and coherent questions improved progressively. ROUGE-1 evaluates unigram overlap, while ROUGE-L captures longest common subsequence similarity, so their combined trend confirms enhanced syntactic and semantic alignment with reference questions." + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 407 + }, + "id": "Qd-QC_RIPyQi", + "outputId": "b1c2a017-2942-48ef-c8f0-9b4754446b84" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxYAAAGGCAYAAADmRxfNAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAQRZJREFUeJzt3XlYlPX+//HXjMAACu4IKAqpuaaWZVlq7lvH3aNli3ZMW9RMT6eyLNfSPKfydHI5LWodU0tTs0UTzTRTW0zUysiFRBMxLEUBAZn794df5ucEGsw9eM/A83Fdc13e93zu+37Ph49wv+bebIZhGAIAAAAAE+xWFwAAAADA/xEsAAAAAJhGsAAAAABgGsECAAAAgGkECwAAAACmESwAAAAAmEawAAAAAGAawQIAAACAaQQLAAAAAKYRLAAApV779u3Vvn37K7Itm82myZMnu6YnT54sm82mtLS0K7L92NhYDRs27IpsCwAuRrAAUKotWrRINpvN7RUREaEOHTpo7dq1BdrbbDaNHj36suts3759gXXmvxo2bOhq92c7lE2bNi3yzu6zzz6r3r17q0aNGgV2XIti7969GjhwoOrUqaPg4GDVrFlTXbp00X/+859irccXDBs2zK3PK1SooKuuukoDBw7Ue++9J6fT6ZXtbNu2TZMnT9apU6e8sj5v8uXaAJRdAVYXAABXwtSpUxUXFyfDMJSamqpFixapZ8+e+uCDD/SXv/yl2OurVauWZsyYUWB+xYoVvVFuARMnTlRkZKSuvfZaffLJJ8Vadtu2berQoYNq166tESNGKDIyUkeOHNGOHTv073//W2PGjCmRmkuSw+HQ66+/LknKysrS4cOH9cEHH2jgwIFq37693n//fYWHh7var1+/vtjb2LZtm6ZMmaJhw4apUqVKRV4uKytLAQEl++f1crUlJibKbud7QwBXHsECQJnQo0cPXX/99a7p4cOHq0aNGlq6dKlHwaJixYq66667vFniZSUlJSk2NlZpaWmqXr16sZZ99tlnVbFiRX399dcFdkJPnDjhxSr/XGZmpkJDQ02vJyAgoED/T58+XTNnztSECRM0YsQIvfPOO673goKCTG/zcpxOp3JychQcHKzg4OAS3dafcTgclm4fQNnFVxoAyqRKlSopJCSkxL9Z9pbY2FiPlz148KCaNGlS6LfuERERBeYtXrxYrVq1UmhoqCpXrqx27doV+MZ/7ty5atKkiRwOh6KjozVq1KgCp+W0b99eTZs21c6dO9WuXTuFhobqySeflCRlZ2dr0qRJqlevnhwOh2JiYvTYY48pOzvb488pSU888YS6du2q5cuX66effnKr5Y+nnf3nP/9RkyZNXJ/z+uuv15IlSyRdOI3tH//4hyQpLi7OddrVzz//LOn/nzL39ttvu/ph3bp1rvcKO1UtLS1NgwYNUnh4uKpWraqxY8fq3Llzrvd//vln2Ww2LVq0qMCyF6/zz2or7BqLQ4cO6a9//auqVKmi0NBQ3XTTTfroo4/c2nz22Wey2Wx699139eyzz6pWrVoKDg5Wp06ddODAgUv2OQDk84+/qABg0unTp5WWlibDMHTixAn95z//0dmzZz0+6pCXl1fotRMhISEqX7682XK9qk6dOtq+fbu+++47NW3a9LJtp0yZosmTJ+vmm2/W1KlTFRQUpC+//FKffvqpunbtKunCju2UKVPUuXNnPfjgg0pMTNS8efP09ddf64svvlBgYKBrfSdPnlSPHj10++2366677lKNGjXkdDrVu3dvbd26VSNHjlSjRo20d+9evfTSS/rpp5+0evVqU5/37rvv1vr16xUfH6+rr7660DavvfaaHn74YQ0cONC1g79nzx59+eWXGjJkiPr376+ffvpJS5cu1UsvvaRq1apJktvRok8//VTvvvuuRo8erWrVqv1p+Bs0aJBiY2M1Y8YM7dixQy+//LJ+//13vfXWW8X6fEWp7WKpqam6+eablZmZqYcfflhVq1bVm2++qd69e2vFihXq16+fW/uZM2fKbrfr0Ucf1enTpzVr1izdeeed+vLLL4tVJ4Cyh2ABoEzo3Lmz27TD4dCCBQvUpUsXj9b3448/Frojd//992v+/PkerbOkPProo+rRo4datGihVq1aqW3bturUqZM6dOjgFgIOHDigqVOnql+/flqxYoXbefqGYUiSfv31V82YMUNdu3bV2rVrXW0aNmyo0aNHa/Hixbr33ntdyx0/flzz58/X/fff75q3ePFibdiwQZs3b1abNm1c85s2baoHHnhA27Zt08033+zx580PTwcPHrxkm48++khNmjTR8uXLC32/WbNmuu6667R06VL17du30NCQmJiovXv3qnHjxkWqKy4uTu+//74kadSoUQoPD9fcuXP16KOPqlmzZkVaR1Fru9jMmTOVmpqqzz//3NXfI0aMULNmzTR+/Hj16dPH7Wd97tw5JSQkuE4fq1y5ssaOHVukYAqgbONUKABlwpw5cxQfH6/4+HgtXrxYHTp00H333aeVK1d6tL7Y2FjX+i5+PfLII94t3Au6dOmi7du3q3fv3tq9e7dmzZqlbt26qWbNmlqzZo2r3erVq+V0OvXMM88UuPjXZrNJkjZs2KCcnBw98sgjbm1GjBih8PDwAqfXOBwOt6AhScuXL1ejRo3UsGFDpaWluV4dO3aUJG3atMnU561QoYIk6cyZM5dsU6lSJR09elRff/21x9u59dZbixwqpAth4mL5F81//PHHHtdQFB9//LFatWrlFuIqVKigkSNH6ueff9YPP/zg1v7ee+91uyalbdu2ki6cTgUAl8MRCwBlQqtWrdwu3r7jjjt07bXXavTo0frLX/5S7It7y5cvX+AoiCfyd9ilC9/uX6xixYoKCQkxvQ1JuuGGG7Ry5Url5ORo9+7dWrVqlV566SUNHDhQCQkJaty4sQ4ePCi73X7ZneXDhw9Lkho0aOA2PygoSFdddZXr/Xw1a9Ys0Lf79+/Xvn37LnnqjtkLys+ePStJCgsLu2Sbxx9/XBs2bFCrVq1Ur149de3aVUOGDNEtt9xS5O3ExcUVq6769eu7TdetW1d2u911bURJOXz4sG688cYC8xs1auR6/+IjEbVr13ZrV7lyZUnS77//XoJVAigNOGIBoEyy2+3q0KGDUlJStH///hLZRv7dgbKysgp9PzMz0+0OQlFRUW6vi+9q5C1BQUG64YYb9Nxzz2nevHnKzc295OlA3lBYMHI6nbrmmmsKPeITHx+vhx56yNQ2v/vuO0lSvXr1LtmmUaNGSkxM1LJly9SmTRu99957atOmjSZNmlTk7ZgNfReHysKm8+Xl5ZnaTnGVK1eu0Pn5p8MBwKVwxAJAmXX+/HlJ//8bbm+rU6eOpAvn4sfExLi9l5mZqSNHjrguiJak+Ph4tzZNmjQpkbry5R/BSUlJkXThG3Sn06kffvhBLVq0KHSZiz/TVVdd5Zqfk5OjpKSkIh3FqVu3rnbv3q1OnTpdcmfajP/973+y2Wx/ev1M+fLlNXjwYA0ePFg5OTnq37+/nn32WU2YMEHBwcFer23//v1uRzkOHDggp9PpukYi/8jAH++u9cejQNKlQ0hh6tSpo8TExALzf/zxR9f7AOANHLEAUCbl5uZq/fr1CgoKcp0S4m2dOnVSUFCQ5s2bV+Bp0K+++qrOnz+vHj16uOZ17tzZ7RUVFeWVOjZt2lTot8355/bnn9bUt29f2e12TZ06tUC9+ct37txZQUFBevnll93W+cYbb+j06dO67bbb/rSeQYMG6ZdfftFrr71W4L2srCxlZGQU/cP9wcyZM7V+/XoNHjy4wKlHFzt58qTbdFBQkBo3bizDMJSbmytJrrt7eevp1nPmzHGbzn/qef4YCA8PV7Vq1bRlyxa3dnPnzi2wruLU1rNnT3311Vfavn27a15GRoZeffVVxcbGFus6EQC4HI5YACgT1q5d6/qG9sSJE1qyZIn279+vJ554wu0JzZL0zTffaPr06QXW0b59e9cFsKdPn9bixYsL3Vb+LWwjIiL0zDPPaOLEiWrXrp169+6t0NBQbdu2TUuXLlXXrl3Vq1evItX/v//9T4cPH1ZmZqYkacuWLa4a77777st+6zxmzBhlZmaqX79+atiwoXJycrRt2za98847io2NdV1cXa9ePT311FOaNm2a2rZtq/79+8vhcOjrr79WdHS0ZsyYoerVq2vChAmaMmWKunfvrt69eysxMVFz587VDTfcUKTb9959991699139cADD2jTpk265ZZblJeXpx9//FHvvvuuPvnkE7frYQpz/vx5V/+fO3dOhw8f1po1a7Rnzx516NBBr7766mWX79q1qyIjI3XLLbeoRo0a2rdvn1555RXddtttrmszWrZsKUl66qmndPvttyswMFC9evXy+HbCSUlJ6t27t7p3767t27dr8eLFGjJkiJo3b+5qc99992nmzJm67777dP3112vLli1uz+PIV5zannjiCS1dulQ9evTQww8/rCpVqujNN99UUlKS3nvvPZ7SDcB7DAAoxRYuXGhIcnsFBwcbLVq0MObNm2c4nU639n9se/Fr2rRphmEYxq233nrZdn+0ePFi46abbjLKly9vOBwOo2HDhsaUKVOMc+fOFflzXG6bmzZtuuyya9euNf72t78ZDRs2NCpUqGAEBQUZ9erVM8aMGWOkpqYWaL9gwQLj2muvNRwOh1G5cmXj1ltvNeLj493avPLKK0bDhg2NwMBAo0aNGsaDDz5o/P777wVqbtKkSaE15eTkGM8//7zRpEkT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SdWqVVO5cuWUmprqNj81NVWRkZGFLhMZGVms9ig7PBlP+f71r39p5syZ2rBhg5o1a1aSZcJPFHc8HTx4UD///LN69erlmud0OiVJAQEBSkxMVN26dUu2aPgkT343RUVFKTAwUOXKlXPNa9SokY4fP66cnBwFBQWVaM3wXZ6Mp6efflp333237rvvPknSNddco4yMDI0cOVJPPfWU7Ha+K/cF/BRMCgoKUsuWLbVx40bXPKfTqY0bN6p169aFLtO6dWu39pIUHx9/yfYoOzwZT5I0a9YsTZs2TevWrdP1119/JUqFHyjueGrYsKH27t2rhIQE16t3797q0KGDEhISFBMTcyXLhw/x5HfTLbfcogMHDrjCqST99NNPioqKIlSUcZ6Mp8zMzALhIT+0GoZRcsWieKy+erw0WLZsmeFwOIxFixYZP/zwgzFy5EijUqVKxvHjxw3DMIy7777beOKJJ1ztv/jiCyMgIMD417/+Zezbt8+YNGkSt5uFS3HH08yZM42goCBjxYoVRkpKiut15swZqz4CfEhxx9MfcVco5CvuWEpOTjbCwsKM0aNHG4mJicaHH35oREREGNOnT7fqI8CHFHc8TZo0yQgLCzOWLl1qHDp0yFi/fr1Rt25dY9CgQVZ9BBSCU6G8YPDgwfr111/1zDPP6Pjx42rRooXWrVvnuigpOTnZLWXffPPNWrJkiSZOnKgnn3xS9evX1+rVq9W0aVOrPgJ8SHHH07x585STk6OBAwe6rWfSpEmaPHnylSwdPqi44wm4lOKOpZiYGH3yyScaN26cmjVrppo1a2rs2LF6/PHHrfoI8CHFHU8TJ06UzWbTxIkT9csvv6h69erq1auXnn32Was+AgphMwyOHwEAAAAwh6+pAAAAAJhGsAAAAABgGsECAAAAgGkECwAAAACmESwAAAAAmEawAAAAAGAawQIAAACAaQQLAAAAAKYRLAAAAACYRrAAgFJk2LBhstlsrlfVqlXVvXt37dmzx62dzWbT6tWrC13HZ5995raOi1/Hjx93badv376XXPbUqVOXrPH777/XgAEDFBsbK5vNptmzZxfps7322mtq3ry5KlSooEqVKunaa6/VjBkzirQsAKDkESwAoJTp3r27UlJSlJKSoo0bNyogIEB/+ctfir2exMRE13ryXxEREabry8zM1FVXXaWZM2cqMjKySMssWLBAjzzyiB5++GElJCToiy++0GOPPaazZ8+arudScnJySmzdAFAaESwAoJRxOByKjIxUZGSkWrRooSeeeEJHjhzRr7/+Wqz1REREuNaT/7Lbzf/ZuOGGG/TPf/5Tt99+uxwOR5GWWbNmjQYNGqThw4erXr16atKkie644w49++yzbu0WLFigJk2ayOFwKCoqSqNHj3a9l5ycrD59+qhChQoKDw/XoEGDlJqa6np/8uTJatGihV5//XXFxcUpODhYknTq1Cndd999ql69usLDw9WxY0ft3r3bdD8AQGlDsACAUuzs2bNavHix6tWrp6pVq1pdjsciIyO1Y8cOHT58+JJt5s2bp1GjRmnkyJHau3ev1qxZo3r16kmSnE6n+vTpo99++02bN29WfHy8Dh06pMGDB7ut48CBA3rvvfe0cuVKJSQkSJL++te/6sSJE1q7dq127typ6667Tp06ddJvv/1WYp8XAPxRgNUFAAC868MPP1SFChUkSRkZGYqKitKHH35Y7KMNtWrVcpuuU6eOvv/+e6/VWRyTJk1S//79FRsbq6uvvlqtW7dWz549NXDgQNfnmj59uv7+979r7NixruVuuOEGSdLGjRu1d+9eJSUlKSYmRpL01ltvqUmTJvr6669d7XJycvTWW2+pevXqkqStW7fqq6++0okTJ1xHV/71r39p9erVWrFihUaOHHnF+gAAfB1HLACglOnQoYMSEhKUkJCgr776St26dVOPHj0u+21/YT7//HPXehISEvTxxx8Xa/nk5GRVqFDB9XruueeKtfzFoqKitH37du3du1djx47V+fPnNXToUHXv3l1Op1MnTpzQsWPH1KlTp0KX37dvn2JiYlyhQpIaN26sSpUqad++fa55derUcYUKSdq9e7fOnj2rqlWrun2WpKQkHTx40OPPAwClEUcsAKCUKV++vOsUIEl6/fXXVbFiRb322muaPn16kdcTFxenSpUqFfpeeHh4oUHl1KlTKleunMqXL68KFSq4TieSpCpVqhR525fStGlTNW3aVA899JAeeOABtW3bVps3b9b1119vet3Shb672NmzZxUVFaXPPvusQNtL9Q0AlFUECwAo5Ww2m+x2u7Kysry2zgYNGmjZsmXKzs52uwD722+/VVxcnAIDAyXJLeB4W+PGjSVdON0rLCxMsbGx2rhxozp06FCgbaNGjXTkyBEdOXLEddTihx9+0KlTp1zrKcx1112n48ePKyAgQLGxsSXyOQCgtCBYAEApk52d7XrexO+//65XXnlFZ8+eVa9evdzaJSUluR1RkKT69eu7/n3ixAmdO3fO7f2qVasqMDBQd955p6ZOnap77rlHjz32mCpWrKgtW7Zo9uzZmjVr1mXry8nJ0Q8//OD69y+//KKEhARVqFDhkkHkwQcfVHR0tDp27KhatWopJSVF06dPV/Xq1dW6dWtJF+7q9MADDygiIkI9evTQmTNn9MUXX2jMmDHq3LmzrrnmGt15552aPXu2zp8/r4ceeki33nrrZY92dO7cWa1bt1bfvn01a9YsXX311Tp27Jg++ugj9evXz2tHSgCgVDAAAKXG0KFDDUmuV1hYmHHDDTcYK1ascGt3cZuLX59//rmxadOmS76/fft21zoSExONfv36GdHR0Ub58uWN5s2bG6+99prhdDovW2NSUlKh67711lsvucyKFSuMnj17GlFRUUZQUJARHR1tDBgwwNizZ49bu/nz5xsNGjQwAgMDjaioKGPMmDGu9w4fPmz07t3bKF++vBEWFmb89a9/NY4fP+56f9KkSUbz5s0LbDs9Pd0YM2aMER0dbQQGBhoxMTHGnXfeaSQnJ1/2cwJAWWMzDMO4slEGAAAAQGnDXaEAAAAAmEawAAAAAGAawQIAAACAaQQLAAAAAKYRLAAAAACYRrAAAAAAYBrBAgAAAIBpBAsAAAAAphEsAAAAAJhGsAAAAABgGsECAAAAgGkECwAAAACm/T+S2/aqd5cLkgAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#Histogram: BLEU-1 Score Distribution\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# BLEU score histogram\n", + "plt.figure(figsize=(8, 4))\n", + "plt.hist(bleu_scores, bins=10, color='skyblue', edgecolor='black')\n", + "plt.title('BLEU-1 Score Distribution')\n", + "plt.xlabel('BLEU-1 Score')\n", + "plt.ylabel('Frequency')\n", + "plt.grid(True)\n", + "plt.tight_layout()\n", + "plt.show()\n", + "\n", + "#INTERPRETATION : The BLEU-1 histogram reveals that most generated questions received lower unigram overlap scores, with only a few predictions achieving high similarity with the reference. This is expected in generative tasks, especially when multiple valid phrasings exist for a single question." + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "EcvasJfXRB7x", + "outputId": "c2ffd227-7239-4231-e87f-c02dee005b54" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Length of BLEU-1 scores: 160\n", + "Length of ROUGE-1 scores: 3\n" + ] + } + ], + "source": [ + "print(\"Length of BLEU-1 scores:\", len(bleu_scores))\n", + "print(\"Length of ROUGE-1 scores:\", len(rouge1_scores))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "id": "QZtLnjPJRMry" + }, + "outputs": [], + "source": [ + "import evaluate\n", + "rouge = evaluate.load(\"rouge\")\n", + "\n", + "rouge1_scores = []\n", + "rougeL_scores = []\n", + "\n", + "for pred, ref in zip(decoded_preds, decoded_refs):\n", + " result = rouge.compute(predictions=[pred], references=[ref])\n", + " rouge1_scores.append(result[\"rouge1\"])\n", + " rougeL_scores.append(result[\"rougeL\"])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "qHX-R-5xRRXN", + "outputId": "32572540-c8ec-40e2-af91-679a286e4f3c" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Length of BLEU-1 scores: 160\n", + "Length of ROUGE-1 scores: 160\n" + ] + } + ], + "source": [ + "print(\"Length of BLEU-1 scores:\", len(bleu_scores))\n", + "print(\"Length of ROUGE-1 scores:\", len(rouge1_scores))" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 564 + }, + "id": "r70MHktlRfvh", + "outputId": "129bc598-7f7c-44d8-aba6-c140ffefdb9b" + }, + "outputs": [ + { + "data": { + "image/png": "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nVvvtTtq8cndn6D5YDPUejWUGiVEjwhbow2uNheKTi3q0nqL7beIiIgo3lhmEAP+LVyLpxTDftwOALAfT51b74GODI02KNQKKLVKCDIBcpUcmhwNPHYPLN9aoNAq2HqLiIiIEoozszFSNLkIgyYMwreffItvnN9g2qJpGDFnBGSK5P/9oWNHBluTDaJHhFwpB+DryKDKUMF+3I72+vaUqv8lIiKigSf5M6sUVbujFmvvWIutz20FAGx9bivW3rE2JTZM8HdkyBiUAW2OFq52FyScaL0lU8ggekRYj7H1FhERESUWk9kYSPUdwAIdGWxuGEYaoNAo4Gh2wOv2QpIkuB1ueBweZOZnpkT9LxEREQ1cTGajLJl3AAu18UEoHTdD0OZpUXRqETKMGfA4PXA0O+C0OpF7ci7OfuzspK//JSIiooGNNbNR1nkHsI635zvvABbP1f89bXzQOSHt0pFhsB7FU4vR3tDu2wwhPwNnP3Y2iqcUxy1+IiIiolA4Mxtl4ewAFu8OAEFlDwYtDCMMQRsfhCp7COrIYLHDst8Cr9uLk886GXOemMNEloiIiJICZ2ajrOMOYGq9usvz8d4BrHPZgyD46lvVenXQxgeFZYVdal+LJhehsIybIRAREVHy4sxslHWsN5Wk4JpU/w5g8ewA0LnsoaPOZQ+hCDIBeSPzUDK1BHkj85jIEhERUVJhMhtl/npTnVEHc5UZLqsLAOCyumCuMsd9B7BkLHsgIiIiihYmszGQTDuAdSx7CCXeZQ9ERERE0cSa2Rjx15s27GvAluotmLtiLgpGFcT9Nr2/7MFUaQqqmQVOlD2UlJdw4wMiIiJKSZyZjSFBJgSSxEQtnOpc9uC0OiF6RDitzoSUPRARERFFE5PZNNClzVaNBXZLYsoeiIiIiKKJZQZpgm22iIiIaCBiMptG/G22iIiIiAYKlhkQERERUcpiMktEREREKYvJLBERERGlLCazRERERJSymMwSERERUcpiMktEREREKYvJLBERERGlLCazRERERJSymMwSERERUcpiMktEREREKYvJLBERERGlLCazRERERJSymMwSERERUcpiMktEREREKYvJLBERERGlLCazRERERJSymMwSERERUcpiMktEREREKYvJLBERERGlLCazRERERJSymMwSERERUcpiMktEREREKYvJLBERERGlLCazRERERJSymMzGkMfhweYnNwMANj+5GR6HJ8EREREREQ0sSZHMPv/88xg6dCg0Gg2mT5+OrVu39nj8u+++i9GjR0Oj0WDChAn48MMP4xRp+D68+UM8lvsY/vPQfwAA/3noP3gs9zF8eHPyxUpERESUqhKezL7zzjtYvHgxli1bhu3bt6OsrAznnnsuGhoaQh6/efNmzJs3D9dddx127NiBSy65BJdccgm++uqrOEfevQ9v/hDbXtgGr8N74grLAK/Di20vbGNCS0RERBQlCU9mn376adxwww249tprMXbsWLz00kvQ6XRYtWpVyON/85vf4LzzzsOSJUswZswYPPjggzj11FPx3HPPxTny0DwOD7b/fjsgAoJCgFwuBwDI5XIICgEQgR1/2MGSAyIiIqIoUCTy5C6XC5WVlbjnnnsCj8lkMsyZMwdffPFFyNd88cUXWLx4cdBj5557Lt5///2QxzudTjidzsDPVqsVAOB2u+F2u/v5Cbra/MxmSDIJskwZ5HI5ZBrf7wsyjQwKKOD1eiGKIjY9swkz75gZ9fNT8vB/v2LxPaPkxrFPXxz79MWxj65IrmNCk1mz2Qyv14tBgwYFPT5o0CB88803IV9TV1cX8vi6urqQxz/66KN44IEHujy+du1a6HS6Pkbeg7HAxDcndnl4zO/GBP3cjOakrPWl6Fu3bl2iQ6AE4dinL459+uLYR4fNZgv72IQms/Fwzz33BM3kWq1WlJaWYu7cudDr9VE/3+YnN/sWfckQmJkd87sxqPp5FUSHCK/XC4jA7Ptmc2Z2gHO73Vi3bh3OOeccKJXKRIdDccSxT18c+/TFsY8u/530cCQ0mTUajZDL5aivrw96vL6+HoWFhSFfU1hYGNHxarUaarW6y+NKpTImX7ZZt83CZ8s/g9fmhaSQoPjfJRYdIjztHkgeCQqtArNumwWFcsD/LkGI3XeNkh/HPn1x7NMXxz46IrmGCV0AplKpMGXKFKxfvz7wmCiKWL9+PWbMmBHyNTNmzAg6HvBN6Xd3fLwpNAqcev2pgAyQPJJvJhaA1+uF5JEAGTD5uslQaJjIEhEREfVXwjOqxYsXY+HChSgvL8e0adOwcuVKtLe349prrwUALFiwACUlJXj00UcBALfeeisqKirw1FNP4YILLsDbb7+N//73v3j55ZcT+TGCnP/s+QCA7b/fDkmUfA+KgEKrwOTrJgeeJyIiIqL+SXgye8UVV6CxsRFLly5FXV0dJk2ahI8//jiwyOvw4cOQyU5MIM+cORNvvvkm7rvvPvzf//0fRowYgffffx/jx49P1EcI6fxnz8fcFXOx6ZlNaEYzZt8321dawBlZIiIioqhJisxq0aJFWLRoUcjnNmzY0OWxyy67DJdddlmMo+o/hUaBmXfMxIcffoiZd8xkjSwRERFRlCV80wQiIiIior5iMktEREREKYvJLBERERGlLCazRERERJSymMwSERERUcpiMktEREREKYvJLBERERGlLCazRERERJSymMwSERERUcpiMktEREREKYvJLBERERGlLCazRERERJSymMwSERERUcpSJDqAeJMkCQBgtVrjcj632w2bzQar1QqlUhmXc1Jy4NinL459+uLYpy+OfXT58zR/3taTtEtmW1tbAQClpaUJjoSIiIiIetLa2ors7OwejxGkcFLeAUQURZhMJmRlZUEQhJifz2q1orS0FEeOHIFer4/5+Sh5cOzTF8c+fXHs0xfHProkSUJrayuKi4shk/VcFZt2M7MymQyDBw+O+3n1ej2/3GmKY5++OPbpi2Ofvjj20dPbjKwfF4ARERERUcpiMktEREREKYvJbIyp1WosW7YMarU60aFQnHHs0xfHPn1x7NMXxz5x0m4BGBERERENHJyZJSIiIqKUxWSWiIiIiFIWk1kiIiIiSllMZomIiIgoZTGZjYLnn38eQ4cOhUajwfTp07F169Yej3/33XcxevRoaDQaTJgwAR9++GGcIqVoi2TsX3nlFZxxxhnIzc1Fbm4u5syZ0+t3hZJXpH/v/d5++20IgoBLLrkktgFSzEQ69s3NzbjppptQVFQEtVqNkSNH8t/9FBXp2K9cuRKjRo2CVqtFaWkpbrvtNjgcjjhFm0Yk6pe3335bUqlU0qpVq6S9e/dKN9xwg5STkyPV19eHPH7Tpk2SXC6XnnjiCenrr7+W7rvvPkmpVEp79uyJc+TUX5GO/fz586Xnn39e2rFjh1RVVSVdc801UnZ2tnT06NE4R079FenY+3333XdSSUmJdMYZZ0gXX3xxfIKlqIp07J1Op1ReXi6df/750ueffy5999130oYNG6SdO3fGOXLqr0jH/o033pDUarX0xhtvSN999520Zs0aqaioSLrtttviHPnAx2S2n6ZNmybddNNNgZ+9Xq9UXFwsPfrooyGPv/zyy6ULLrgg6LHp06dLP//5z2MaJ0VfpGPfmcfjkbKysqTXX389ViFSjPRl7D0ejzRz5kzp97//vbRw4UImsykq0rF/8cUXpWHDhkkulyteIVKMRDr2N910k/S9730v6LHFixdLs2bNimmc6YhlBv3gcrlQWVmJOXPmBB6TyWSYM2cOvvjii5Cv+eKLL4KOB4Bzzz232+MpOfVl7Duz2Wxwu90wGAyxCpNioK9jv3z5chQUFOC6666LR5gUA30Z+w8++AAzZszATTfdhEGDBmH8+PF45JFH4PV64xU2RUFfxn7mzJmorKwMlCIcOHAAH374Ic4///y4xJxOFIkOIJWZzWZ4vV4MGjQo6PFBgwbhm2++Cfmaurq6kMfX1dXFLE6Kvr6MfWd33XUXiouLu/xyQ8mtL2P/+eef4w9/+AN27twZhwgpVvoy9gcOHMC///1vXHXVVfjwww9RU1ODG2+8EW63G8uWLYtH2BQFfRn7+fPnw2w24/TTT4ckSfB4PPjFL36B//u//4tHyGmFM7NECfDYY4/h7bffxt/+9jdoNJpEh0Mx1NraiquvvhqvvPIKjEZjosOhOBNFEQUFBXj55ZcxZcoUXHHFFbj33nvx0ksvJTo0irENGzbgkUcewQsvvIDt27fjr3/9K/71r3/hwQcfTHRoAw5nZvvBaDRCLpejvr4+6PH6+noUFhaGfE1hYWFEx1Ny6svY+z355JN47LHH8Mknn2DixImxDJNiINKx379/Pw4ePIiLLroo8JgoigAAhUKBffv24ZRTTolt0BQVffl7X1RUBKVSCblcHnhszJgxqKurg8vlgkqlimnMFB19Gftf//rXuPrqq3H99dcDACZMmID29nb87Gc/w7333guZjPOJ0cIr2Q8qlQpTpkzB+vXrA4+Jooj169djxowZIV8zY8aMoOMBYN26dd0eT8mpL2MPAE888QQefPBBfPzxxygvL49HqBRlkY796NGjsWfPHuzcuTPw5wc/+AHOOuss7Ny5E6WlpfEMn/qhL3/vZ82ahZqamsAvMABQXV2NoqIiJrIppC9jb7PZuiSs/l9qJEmKXbDpKNEr0FLd22+/LanVaum1116Tvv76a+lnP/uZlJOTI9XV1UmSJElXX321dPfddweO37Rpk6RQKKQnn3xSqqqqkpYtW8bWXCkq0rF/7LHHJJVKJb333ntSbW1t4E9ra2uiPgL1UaRj3xm7GaSuSMf+8OHDUlZWlrRo0SJp37590j//+U+poKBAeuihhxL1EaiPIh37ZcuWSVlZWdJbb70lHThwQFq7dq10yimnSJdffnmiPsKAxWQ2Cp599lnppJNOklQqlTRt2jRpy5YtgecqKiqkhQsXBh3/5z//WRo5cqSkUqmkcePGSf/617/iHDFFSyRjP2TIEAlAlz/Lli2Lf+DUb5H+ve+IyWxqi3TsN2/eLE2fPl1Sq9XSsGHDpIcffljyeDxxjpqiIZKxd7vd0v333y+dcsopkkajkUpLS6Ubb7xROn78ePwDH+AESeJcNxERERGlJtbMEhEREVHKYjJLRERERCmLySwRERERpSwms0RERESUspjMEhEREVHKYjJLRERERCmLySwRERERpSwms0RERESUspjMEhEREVHKYjJLRNTJNddcA0EQAn/y8vJw3nnnYffu3UHHCYKA999/P+R7bNiwIeg9Ov6pq6sLnOeSSy7p9rXNzc3dxrh37178+Mc/xtChQyEIAlauXBnWZ3vllVdQVlaGzMxM5OTkYPLkyXj00UfDei0RUTJiMktEFMJ5552H2tpa1NbWYv369VAoFLjwwgsjfp99+/YF3sf/p6CgoN/x2Ww2DBs2DI899hgKCwvDes2qVavwq1/9Crfccgt27tyJTZs24c4770RbW1u/4+mOy+WK2XsTEQFMZomIQlKr1SgsLERhYSEmTZqEu+++G0eOHEFjY2NE71NQUBB4H/8fmaz///ROnToVK1aswJVXXgm1Wh3Waz744ANcfvnluO666zB8+HCMGzcO8+bNw8MPPxx03KpVqzBu3Dio1WoUFRVh0aJFgecOHz6Miy++GJmZmdDr9bj88stRX18feP7+++/HpEmT8Pvf/x4nn3wyNBoNAKC5uRnXX3898vPzodfr8b3vfQ+7du3q93UgImIyS0TUi7a2NvzpT3/C8OHDkZeXl+hw+qywsBBbtmzBoUOHuj3mxRdfxE033YSf/exn2LNnDz744AMMHz4cACCKIi6++GJYLBZs3LgR69atw4EDB3DFFVcEvUdNTQ3+8pe/4K9//St27twJALjsssvQ0NCAjz76CJWVlTj11FNx9tlnw2KxxOzzElF6UCQ6ACKiZPTPf/4TmZmZAID29nYUFRXhn//8Z8SzqoMHDw76eciQIdi7d2/U4ozEsmXL8KMf/QhDhw7FyJEjMWPGDJx//vm49NJLA5/roYcewu23345bb7018LqpU6cCANavX489e/bgu+++Q2lpKQBg9erVGDduHLZt2xY4zuVyYfXq1cjPzwcAfP7559i6dSsaGhoCs8hPPvkk3n//fbz33nv42c9+FrdrQEQDD2dmiYhCOOuss7Bz507s3LkTW7duxbnnnovvf//7Pc5qhvLZZ58F3mfnzp348MMPI3r94cOHkZmZGfjzyCOPRPT6joqKivDFF19gz549uPXWW+HxeLBw4UKcd955EEURDQ0NMJlMOPvss0O+vqqqCqWlpYFEFgDGjh2LnJwcVFVVBR4bMmRIIJEFgF27dqGtrQ15eXlBn+W7777D/v37+/x5iIgAzswSEYWUkZERuL0OAL///e+RnZ2NV155BQ899FDY73PyyScjJycn5HN6vT5kctzc3Ay5XI6MjAxkZmYGbtUDgMFgCPvc3Rk/fjzGjx+PG2+8Eb/4xS9wxhlnYOPGjSgvL+/3ewO+a9dRW1sbioqKsGHDhi7HdndtiIjCxWSWiCgMgiBAJpPBbrdH7T1HjRqFt99+G06nM2gR1/bt23HyySdDqVQCQFBSHW1jx44F4CulyMrKwtChQ7F+/XqcddZZXY4dM2YMjhw5giNHjgRmZ7/++ms0NzcH3ieUU089FXV1dVAoFBg6dGhMPgcRpS8ms0REITidzkA/2OPHj+O5555DW1sbLrrooqDjvvvuu6CZUwAYMWJE4P83NDTA4XAEPZ+XlwelUomrrroKy5cvx4IFC3DnnXciOzsb//nPf7By5Uo88cQTPcbncrnw9ddfB/7/sWPHsHPnTmRmZnab/P7yl79EcXExvve972Hw4MGora3FQw89hPz8fMyYMQOArxvBL37xCxQUFOD73/8+WltbsWnTJtx8882YM2cOJkyYgKuuugorV66Ex+PBjTfeiIqKih5ndefMmYMZM2bgkksuwRNPPIGRI0fCZDLhX//6F374wx9GbUaYiNKUREREQRYuXCgBCPzJysqSpk6dKr333ntBx3U8puOfzz77TPr000+7ff6LL74IvMe+ffukH/7w/9u5e9QEggAMw6RYm8UD7IC15R7BfgshiJVn2DN4DcEreBovIG5l7QH80gkhiWlCYOB52vnv3mreU0pJ27bp+z7H4zGPx+PlHS+Xy7d7r1arH9ecTqcMw5Cu6zKbzVJKyWazyfl8/jTvcDhkuVymaZp0XZdxHJ9j1+s16/U6bdtmPp9nu93mdrs9x/f7ffq+/3L2/X7POI4ppaRpmiwWi+x2u0zT9PKdAL95S5L/zWcAAPgbfjMAAKBaYhYAgGqJWQAAqiVmAQColpgFAKBaYhYAgGqJWQAAqiVmAQColpgFAKBaYhYAgGqJWQAAqvUBFYDFoLBywdAAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#Scatter Plot Between BLEU-1 and ROUGE-1\n", + "import matplotlib.pyplot as plt\n", + "\n", + "plt.figure(figsize=(8, 6))\n", + "plt.scatter(bleu_scores, rouge1_scores, alpha=0.6, color='purple')\n", + "plt.title('BLEU-1 vs ROUGE-1 Scores')\n", + "plt.xlabel('BLEU-1 Score')\n", + "plt.ylabel('ROUGE-1 Score')\n", + "plt.grid(True)\n", + "plt.show()\n", + "\n", + "#Interpretation : To assess the quality of the generated questions, we computed BLEU-1, ROUGE-1, and ROUGE-L scores across the evaluation set. While BLEU-1 captures exact n-gram overlap, ROUGE measures both lexical and semantic similarity more flexibly. A scatter plot comparing BLEU-1 and ROUGE-1 scores showed moderate variation, with some samples scoring high on ROUGE despite lower BLEU, suggesting semantic validity despite lexical mismatch. This highlights the limitation of using a single metric and motivates multi-metric evaluation for generative tasks." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "rZ_1fFAtV60u" + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "gpuType": "T4", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +}