{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "1b5b7e0e",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T03:27:07.130546Z",
"iopub.status.busy": "2024-10-19T03:27:07.130175Z",
"iopub.status.idle": "2024-10-19T03:27:23.548705Z",
"shell.execute_reply": "2024-10-19T03:27:23.547706Z"
},
"id": "B9q9ZSp5lo7X",
"outputId": "890cd4d8-5f85-4756-a09b-1dfe940ee81a",
"papermill": {
"duration": 16.444707,
"end_time": "2024-10-19T03:27:23.551114",
"exception": false,
"start_time": "2024-10-19T03:27:07.106407",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Collecting seqeval\r\n",
" Downloading seqeval-1.2.2.tar.gz (43 kB)\r\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m43.6/43.6 kB\u001b[0m \u001b[31m1.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\r\n",
"\u001b[?25h Preparing metadata (setup.py) ... \u001b[?25l-\b \b\\\b \b|\b \bdone\r\n",
"\u001b[?25hRequirement already satisfied: numpy>=1.14.0 in /opt/conda/lib/python3.10/site-packages (from seqeval) (1.26.4)\r\n",
"Requirement already satisfied: scikit-learn>=0.21.3 in /opt/conda/lib/python3.10/site-packages (from seqeval) (1.2.2)\r\n",
"Requirement already satisfied: scipy>=1.3.2 in /opt/conda/lib/python3.10/site-packages (from scikit-learn>=0.21.3->seqeval) (1.14.1)\r\n",
"Requirement already satisfied: joblib>=1.1.1 in /opt/conda/lib/python3.10/site-packages (from scikit-learn>=0.21.3->seqeval) (1.4.2)\r\n",
"Requirement already satisfied: threadpoolctl>=2.0.0 in /opt/conda/lib/python3.10/site-packages (from scikit-learn>=0.21.3->seqeval) (3.5.0)\r\n",
"Building wheels for collected packages: seqeval\r\n",
" Building wheel for seqeval (setup.py) ... \u001b[?25l-\b \b\\\b \b|\b \bdone\r\n",
"\u001b[?25h Created wheel for seqeval: filename=seqeval-1.2.2-py3-none-any.whl size=16161 sha256=69bd75e0f0986914506845525271beaecf662a42481bb6c537436e831a99a0c6\r\n",
" Stored in directory: /root/.cache/pip/wheels/1a/67/4a/ad4082dd7dfc30f2abfe4d80a2ed5926a506eb8a972b4767fa\r\n",
"Successfully built seqeval\r\n",
"Installing collected packages: seqeval\r\n",
"Successfully installed seqeval-1.2.2\r\n"
]
}
],
"source": [
"!pip install seqeval"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "0e6809c5",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T03:27:23.595729Z",
"iopub.status.busy": "2024-10-19T03:27:23.595398Z",
"iopub.status.idle": "2024-10-19T03:27:32.907685Z",
"shell.execute_reply": "2024-10-19T03:27:32.906858Z"
},
"id": "JqGBmHCdlo7Y",
"papermill": {
"duration": 9.337092,
"end_time": "2024-10-19T03:27:32.910127",
"exception": false,
"start_time": "2024-10-19T03:27:23.573035",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"import pandas as pd\n",
"import re\n",
"from transformers import BertTokenizer, BertForTokenClassification, AdamW, BertTokenizerFast\n",
"from nltk.tokenize import sent_tokenize, word_tokenize\n",
"import torch.nn as nn\n",
"import torch\n",
"import tqdm"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "e54c2694",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T03:27:32.955778Z",
"iopub.status.busy": "2024-10-19T03:27:32.954920Z",
"iopub.status.idle": "2024-10-19T03:27:33.127858Z",
"shell.execute_reply": "2024-10-19T03:27:33.126903Z"
},
"id": "YMZ4Ox4jlo7Z",
"outputId": "e93176cb-247d-430a-e0bd-5022444f9b87",
"papermill": {
"duration": 0.197735,
"end_time": "2024-10-19T03:27:33.130177",
"exception": false,
"start_time": "2024-10-19T03:27:32.932442",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[nltk_data] Downloading package punkt to /usr/share/nltk_data...\n",
"[nltk_data] Package punkt is already up-to-date!\n",
"[nltk_data] Downloading package stopwords to /usr/share/nltk_data...\n",
"[nltk_data] Package stopwords is already up-to-date!\n"
]
}
],
"source": [
"import re\n",
"import nltk\n",
"from nltk.corpus import stopwords\n",
"from nltk.tokenize import word_tokenize\n",
"\n",
"# Download stopwords if not already downloaded\n",
"nltk.download('punkt')\n",
"nltk.download('stopwords')\n",
"\n",
"# Set of stop words (you can add more if needed)\n",
"stop_words = set(stopwords.words('english'))"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "f7f68ef5",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T03:27:33.174865Z",
"iopub.status.busy": "2024-10-19T03:27:33.174544Z",
"iopub.status.idle": "2024-10-19T03:27:37.069450Z",
"shell.execute_reply": "2024-10-19T03:27:37.068367Z"
},
"id": "tWH6Vp5Flo7a",
"papermill": {
"duration": 3.919845,
"end_time": "2024-10-19T03:27:37.071804",
"exception": false,
"start_time": "2024-10-19T03:27:33.151959",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"df = pd.read_excel(\"/kaggle/input/miimansa/G1.xlsx\")\n",
"df2 = pd.read_excel(\"/kaggle/input/miimansa/G2.xlsx\")\n",
"df3 = pd.read_excel(\"/kaggle/input/miimansa/G3.xlsx\")"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "ea5a10eb",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T03:27:37.116964Z",
"iopub.status.busy": "2024-10-19T03:27:37.116457Z",
"iopub.status.idle": "2024-10-19T03:27:37.135451Z",
"shell.execute_reply": "2024-10-19T03:27:37.134392Z"
},
"id": "-v1hN8xwdA_O",
"papermill": {
"duration": 0.04403,
"end_time": "2024-10-19T03:27:37.137759",
"exception": false,
"start_time": "2024-10-19T03:27:37.093729",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"df.dropna(inplace=True)\n",
"df2.dropna(inplace=True)\n",
"df3.dropna(inplace=True)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "fbe36515",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T03:27:37.184837Z",
"iopub.status.busy": "2024-10-19T03:27:37.184522Z",
"iopub.status.idle": "2024-10-19T03:27:37.202782Z",
"shell.execute_reply": "2024-10-19T03:27:37.201870Z"
},
"id": "gLVf86bYlo7a",
"outputId": "0b2c5507-2b12-4daa-aaf7-07f383d7a95a",
"papermill": {
"duration": 0.043363,
"end_time": "2024-10-19T03:27:37.204761",
"exception": false,
"start_time": "2024-10-19T03:27:37.161398",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Unnamed: 0 | \n",
" ID | \n",
" tags | \n",
" text | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 0 | \n",
" NCT02361944 | \n",
" 16:20:treatment,25:44:treatment | \n",
" Current use of hemo- or peritoneal dialysis | \n",
"
\n",
" \n",
" 1 | \n",
" 1 | \n",
" NCT02593526 | \n",
" 24:43:treatment, | \n",
" Intention to change to peritoneal dialysis, or... | \n",
"
\n",
" \n",
" 2 | \n",
" 2 | \n",
" NCT02703272 | \n",
" 27:52:treatment,58:66:treatment | \n",
" Participants with ongoing anticoagulation trea... | \n",
"
\n",
" \n",
" 3 | \n",
" 3 | \n",
" NCT03006302 | \n",
" 8:16:treatment | \n",
" Use of warfarin | \n",
"
\n",
" \n",
" 4 | \n",
" 4 | \n",
" NCT02931110 | \n",
" 1:9:treatment | \n",
" warfarin | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Unnamed: 0 ID tags \\\n",
"0 0 NCT02361944 16:20:treatment,25:44:treatment \n",
"1 1 NCT02593526 24:43:treatment, \n",
"2 2 NCT02703272 27:52:treatment,58:66:treatment \n",
"3 3 NCT03006302 8:16:treatment \n",
"4 4 NCT02931110 1:9:treatment \n",
"\n",
" text \n",
"0 Current use of hemo- or peritoneal dialysis \n",
"1 Intention to change to peritoneal dialysis, or... \n",
"2 Participants with ongoing anticoagulation trea... \n",
"3 Use of warfarin \n",
"4 warfarin "
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df3.head()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "92afd862",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T03:27:37.249796Z",
"iopub.status.busy": "2024-10-19T03:27:37.249475Z",
"iopub.status.idle": "2024-10-19T03:27:40.749461Z",
"shell.execute_reply": "2024-10-19T03:27:40.748585Z"
},
"id": "wajmmeHTlo7d",
"outputId": "d6d32f14-ca2e-4f95-c456-fd03ac06289b",
"papermill": {
"duration": 3.525134,
"end_time": "2024-10-19T03:27:40.751577",
"exception": false,
"start_time": "2024-10-19T03:27:37.226443",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "e9fbb901478541afaa5e4331803f95a5",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"tokenizer_config.json: 0%| | 0.00/49.0 [00:00, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "db6042c77cbd4db0bca2331c558256d8",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"vocab.txt: 0%| | 0.00/213k [00:00, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "4df732b79c4d44f6ab297c7ebe4b8f7b",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"tokenizer.json: 0%| | 0.00/436k [00:00, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "06b337d1462e48cc95af610666b09666",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"config.json: 0%| | 0.00/570 [00:00, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/conda/lib/python3.10/site-packages/transformers/tokenization_utils_base.py:1617: FutureWarning: `clean_up_tokenization_spaces` was not set. It will be set to `True` by default. This behavior will be deprecated 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": "dc8efdeeb86448f1ab80d1d7ca7af5ca",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"model.safetensors: 0%| | 0.00/436M [00:00, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Some weights of BertForTokenClassification were not initialized from the model checkpoint at bert-base-cased and are newly initialized: ['classifier.bias', 'classifier.weight']\n",
"You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n"
]
}
],
"source": [
"# Define the label mapping\n",
"label_map = {\n",
" \"O\": 0,\n",
" \"B-treatment\": 1, \"I-treatment\": 2,\n",
" \"B-chronic_disease\": 3, \"I-chronic_disease\": 4,\n",
" \"B-cancer\": 5, \"I-cancer\": 6,\n",
" \"B-allergy_name\": 7, \"I-allergy_name\": 8\n",
"}\n",
"\n",
"num_labels = len(label_map)\n",
"max_sent_len = 256\n",
"\n",
"# Hyperparameters\n",
"batch_size = 16\n",
"learning_rate = 3e-5\n",
"num_epochs=5\n",
"\n",
"# Define device: Use GPU (cuda) if available, else use CPU\n",
"device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
"\n",
"# Initialize the tokenizer\n",
"# tokenizer = BertTokenizer.from_pretrained(\"bert-base-cased\")\n",
"tokenizer = BertTokenizerFast.from_pretrained('bert-base-cased')\n",
"model = BertForTokenClassification.from_pretrained(\"bert-base-cased\", num_labels=len(label_map))"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "487f1510",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T03:27:40.798381Z",
"iopub.status.busy": "2024-10-19T03:27:40.798066Z",
"iopub.status.idle": "2024-10-19T03:27:40.803487Z",
"shell.execute_reply": "2024-10-19T03:27:40.802663Z"
},
"id": "PDt6GgVVcNcd",
"papermill": {
"duration": 0.03074,
"end_time": "2024-10-19T03:27:40.805307",
"exception": false,
"start_time": "2024-10-19T03:27:40.774567",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"def drop_long_sequences(df, tokenizer, max_tokens=256):\n",
" def is_within_limit(text, max_tokens):\n",
" tokens = tokenizer.tokenize(text)\n",
" return len(tokens) <= max_tokens\n",
"\n",
" filtered_df = df[df['text'].apply(lambda x: is_within_limit(x, max_tokens))]\n",
"\n",
" print(f\"Dropped {len(df) - len(filtered_df)} rows with more than {max_tokens} tokens.\")\n",
" return filtered_df"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "fd6c78a9",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T03:27:40.852574Z",
"iopub.status.busy": "2024-10-19T03:27:40.851831Z",
"iopub.status.idle": "2024-10-19T03:27:43.203412Z",
"shell.execute_reply": "2024-10-19T03:27:43.202285Z"
},
"id": "PqnSXwPbcW-E",
"outputId": "b7aa8d2c-8477-42c8-cbc5-655184ecfdb5",
"papermill": {
"duration": 2.377186,
"end_time": "2024-10-19T03:27:43.205540",
"exception": false,
"start_time": "2024-10-19T03:27:40.828354",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Dropped 2 rows with more than 256 tokens.\n",
"Dropped 2 rows with more than 256 tokens.\n",
"Dropped 2 rows with more than 256 tokens.\n"
]
}
],
"source": [
"df = drop_long_sequences(df, tokenizer, max_tokens=256)\n",
"df2 = drop_long_sequences(df2, tokenizer, max_tokens=256)\n",
"df3 = drop_long_sequences(df3, tokenizer, max_tokens=256)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "b1939a46",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T03:27:43.253867Z",
"iopub.status.busy": "2024-10-19T03:27:43.253567Z",
"iopub.status.idle": "2024-10-19T03:27:43.260250Z",
"shell.execute_reply": "2024-10-19T03:27:43.259429Z"
},
"id": "5Dk0CW3Ilo7b",
"outputId": "d3e44387-7aed-4e53-997a-37e63bcc5a70",
"papermill": {
"duration": 0.033121,
"end_time": "2024-10-19T03:27:43.262089",
"exception": false,
"start_time": "2024-10-19T03:27:43.228968",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"(6452, 4)"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df2.shape"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "2d40ac5d",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T03:27:43.310003Z",
"iopub.status.busy": "2024-10-19T03:27:43.309699Z",
"iopub.status.idle": "2024-10-19T03:27:43.324765Z",
"shell.execute_reply": "2024-10-19T03:27:43.323724Z"
},
"id": "_okbZqOJlo7c",
"outputId": "a05c76d8-0259-45a7-88d1-5648187bed9a",
"papermill": {
"duration": 0.041527,
"end_time": "2024-10-19T03:27:43.326702",
"exception": false,
"start_time": "2024-10-19T03:27:43.285175",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training set size: 5883\n",
"Test set size: 1471\n"
]
}
],
"source": [
"from sklearn.model_selection import train_test_split\n",
"\n",
"# Split dataset into 80% train and 20% test\n",
"train_df1, test_df1 = train_test_split(df, test_size=0.2, random_state=42)\n",
"train_df2, test_df2 = train_test_split(df2, test_size=0.2, random_state=42)\n",
"train_df3, test_df3 = train_test_split(df3, test_size=0.2, random_state=42)\n",
"\n",
"# Display the sizes of the train and test sets\n",
"print(f\"Training set size: {len(train_df1)}\")\n",
"print(f\"Test set size: {len(test_df1)}\")"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "b158b8f8",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T03:27:43.376469Z",
"iopub.status.busy": "2024-10-19T03:27:43.376193Z",
"iopub.status.idle": "2024-10-19T03:27:43.382245Z",
"shell.execute_reply": "2024-10-19T03:27:43.381397Z"
},
"id": "3F2E9_7elo7e",
"papermill": {
"duration": 0.031938,
"end_time": "2024-10-19T03:27:43.384242",
"exception": false,
"start_time": "2024-10-19T03:27:43.352304",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"def extract_sentence_labels(tags):\n",
" \"\"\"\n",
" Extract multi-labels for the entire sentence based on the tags.\n",
" Multiple labels will be handled by creating a binary vector where 1 indicates the presence of a tag.\n",
" \"\"\"\n",
" label_vector = np.zeros(num_labels)\n",
"\n",
" if pd.isna(tags) or tags == \"\":\n",
" return label_vector # Return a vector of 0's if no tags are present\n",
"\n",
" tag_entries = tags.split(',')\n",
" for entry in tag_entries:\n",
" if entry:\n",
" _, _, tag_type = entry.split(':')\n",
" label_idx = label_map.get(tag_type)\n",
" if label_idx is not None:\n",
" label_vector[label_idx] = 1 # Set the corresponding label to 1\n",
"\n",
" return label_vector"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "6b8fec54",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T03:27:43.432466Z",
"iopub.status.busy": "2024-10-19T03:27:43.432186Z",
"iopub.status.idle": "2024-10-19T03:27:54.274957Z",
"shell.execute_reply": "2024-10-19T03:27:54.274180Z"
},
"id": "6Ge2bypClo7e",
"papermill": {
"duration": 10.869075,
"end_time": "2024-10-19T03:27:54.277259",
"exception": false,
"start_time": "2024-10-19T03:27:43.408184",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"def preprocess_data(df):\n",
"# max_len=float('-inf')\n",
" all_input_ids = []\n",
" all_attention_masks = []\n",
" all_labels = []\n",
"\n",
" for _, row in df.iterrows():\n",
" text = row['text']\n",
" entity = row['tags']\n",
"\n",
" if not pd.isna(entity) and not pd.isna(text):\n",
"\n",
" entity = entity.split(',')\n",
" # Remove all empty strings using filter\n",
" entities = list(filter(lambda x: x.strip(), entity))\n",
" # print(\"entities: \", entities)\n",
"\n",
" tokenized_input = tokenizer(text, truncation=True, padding='max_length', max_length=max_sent_len, return_offsets_mapping=True)\n",
" input_ids = tokenized_input['input_ids']\n",
" attention_mask = tokenized_input['attention_mask']\n",
" offset_mapping = tokenized_input['offset_mapping']\n",
"\n",
" labels = ['O'] * len(input_ids)\n",
"\n",
" for entity in entities:\n",
" start_idx, end_idx, label = entity.split(':')\n",
" start_idx, end_idx = int(start_idx)-1, int(end_idx)-1\n",
"\n",
" entity_started = False\n",
" for idx, (start, end) in enumerate(offset_mapping):\n",
" if start_idx <= start < end_idx and end != 0:\n",
" if not entity_started:\n",
" labels[idx] = f\"B-{label}\"\n",
" entity_started = True\n",
" else:\n",
" labels[idx] = f\"I-{label}\"\n",
" elif end < start_idx:\n",
" entity_started = False\n",
"\n",
" all_input_ids.append(input_ids)\n",
" all_attention_masks.append(attention_mask)\n",
" all_labels.append([label_map[label] for label in labels])\n",
"\n",
" # Get processed data\n",
" processed_data = {\n",
" \"tokens\": all_input_ids,\n",
" \"attention_mask\": all_attention_masks,\n",
" \"labels\": all_labels\n",
" }\n",
" return processed_data\n",
"\n",
"train_processed_data1 = preprocess_data(train_df1)\n",
"test_processed_data1 = preprocess_data(test_df1)\n",
"\n",
"train_processed_data2 = preprocess_data(train_df2)\n",
"test_processed_data2 = preprocess_data(test_df2)\n",
"\n",
"train_processed_data3 = preprocess_data(train_df3)\n",
"test_processed_data3 = preprocess_data(test_df3)\n",
"\n",
"# Display the sizes of the train and test sets\n",
"# print(f\"train_processed_data size: {train_processed_data1}\")\n",
"# print(f\"test_processed_data size: {test_processed_data1}\")"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "9ba4d8d0",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T03:27:54.326075Z",
"iopub.status.busy": "2024-10-19T03:27:54.325729Z",
"iopub.status.idle": "2024-10-19T03:27:54.332433Z",
"shell.execute_reply": "2024-10-19T03:27:54.331492Z"
},
"id": "ifdDc-t4lo7f",
"outputId": "15dc431e-0f6d-4731-cffb-01257ec01cbe",
"papermill": {
"duration": 0.033277,
"end_time": "2024-10-19T03:27:54.334431",
"exception": false,
"start_time": "2024-10-19T03:27:54.301154",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Tokens: ['[CLS]', 'In', '##vasive', 'cancer', 'in', 'the', 'con', '##tral', '##ater', '##al', 'breast', '[SEP]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]', '[PAD]']\n",
"Labels: [0, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n",
"Label names: ['O', 'B-cancer', 'I-cancer', 'I-cancer', 'I-cancer', 'I-cancer', 'I-cancer', 'I-cancer', 'I-cancer', 'I-cancer', 'I-cancer', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O']\n"
]
}
],
"source": [
"id2label = {v: k for k, v in label_map.items()}\n",
"\n",
"input_ids = train_processed_data1['tokens'][4]\n",
"print(\"Tokens:\", tokenizer.convert_ids_to_tokens(input_ids))\n",
"\n",
"labels = train_processed_data1['labels'][4]\n",
"print(\"Labels:\", labels)\n",
"print(\"Label names:\", [id2label[label] for label in labels])"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "66a1ac9f",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T03:27:54.385597Z",
"iopub.status.busy": "2024-10-19T03:27:54.384859Z",
"iopub.status.idle": "2024-10-19T03:27:54.390883Z",
"shell.execute_reply": "2024-10-19T03:27:54.390020Z"
},
"id": "ohVMaS7Vlo7g",
"outputId": "016f80f8-8149-4b76-a036-8b449ff5b550",
"papermill": {
"duration": 0.034669,
"end_time": "2024-10-19T03:27:54.392720",
"exception": false,
"start_time": "2024-10-19T03:27:54.358051",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"{0: 'O',\n",
" 1: 'B-treatment',\n",
" 2: 'I-treatment',\n",
" 3: 'B-chronic_disease',\n",
" 4: 'I-chronic_disease',\n",
" 5: 'B-cancer',\n",
" 6: 'I-cancer',\n",
" 7: 'B-allergy_name',\n",
" 8: 'I-allergy_name'}"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"id2label"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "c2ad9c0d",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T03:27:54.442258Z",
"iopub.status.busy": "2024-10-19T03:27:54.441982Z",
"iopub.status.idle": "2024-10-19T03:27:54.453664Z",
"shell.execute_reply": "2024-10-19T03:27:54.452705Z"
},
"id": "0LlOrM6Ylo7g",
"papermill": {
"duration": 0.039126,
"end_time": "2024-10-19T03:27:54.455630",
"exception": false,
"start_time": "2024-10-19T03:27:54.416504",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"from torch.utils.data import DataLoader, Dataset\n",
"\n",
"class NERDataset(Dataset):\n",
" def __init__(self, encodings, attention_masks, labels):\n",
" self.encodings = encodings\n",
" self.attention_masks = attention_masks\n",
" self.labels = labels\n",
"\n",
" def __getitem__(self, idx):\n",
" item={}\n",
" item['input_ids'] = torch.tensor(self.encodings[idx])\n",
" item['labels'] = torch.tensor(self.labels[idx])\n",
" item['attention_mask'] = torch.tensor(self.attention_masks[idx])\n",
"\n",
" return item\n",
"\n",
" def __len__(self):\n",
" return len(self.labels)\n",
"\n",
"# Create the train dataset1 and dataloader\n",
"ner_dataset = NERDataset(train_processed_data1[\"tokens\"], train_processed_data1[\"attention_mask\"], train_processed_data1[\"labels\"])\n",
"train_dataloader1 = DataLoader(ner_dataset, batch_size=batch_size, shuffle=True)\n",
"# Create the test dataset and dataloader\n",
"ner_dataset = NERDataset(test_processed_data1[\"tokens\"], test_processed_data1[\"attention_mask\"], test_processed_data1[\"labels\"])\n",
"test_dataloader1 = DataLoader(ner_dataset, batch_size=batch_size, shuffle=True)\n",
"\n",
"# Create the train dataset2 and dataloader\n",
"ner_dataset = NERDataset(train_processed_data2[\"tokens\"], train_processed_data2[\"attention_mask\"], train_processed_data2[\"labels\"])\n",
"train_dataloader2 = DataLoader(ner_dataset, batch_size=batch_size, shuffle=True)\n",
"# Create the test dataset and dataloader\n",
"ner_dataset = NERDataset(test_processed_data2[\"tokens\"], test_processed_data2[\"attention_mask\"], test_processed_data2[\"labels\"])\n",
"test_dataloader2 = DataLoader(ner_dataset, batch_size=batch_size, shuffle=True)\n",
"\n",
"# Create the train dataset3 and dataloader\n",
"ner_dataset = NERDataset(train_processed_data3[\"tokens\"], train_processed_data3[\"attention_mask\"], train_processed_data3[\"labels\"])\n",
"train_dataloader3 = DataLoader(ner_dataset, batch_size=batch_size, shuffle=True)\n",
"# Create the test dataset and dataloader\n",
"ner_dataset = NERDataset(test_processed_data3[\"tokens\"], test_processed_data3[\"attention_mask\"], test_processed_data3[\"labels\"])\n",
"test_dataloader3 = DataLoader(ner_dataset, batch_size=batch_size, shuffle=True)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "55a9064a",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T03:27:54.503203Z",
"iopub.status.busy": "2024-10-19T03:27:54.502877Z",
"iopub.status.idle": "2024-10-19T03:27:54.507328Z",
"shell.execute_reply": "2024-10-19T03:27:54.506570Z"
},
"id": "5YTVKKFelo7h",
"papermill": {
"duration": 0.030373,
"end_time": "2024-10-19T03:27:54.509242",
"exception": false,
"start_time": "2024-10-19T03:27:54.478869",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"# Create train dataloaders\n",
"train_dataloaders = {\n",
" \"T1\": train_dataloader1,\n",
" \"T2\": train_dataloader2,\n",
" \"T3\": train_dataloader3\n",
"}\n",
"\n",
"# Create test dataloaders\n",
"test_dataloaders = {\n",
" \"T1\": test_dataloader1,\n",
" \"T2\": test_dataloader2,\n",
" \"T3\": test_dataloader3\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "0db97df6",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T03:27:54.558325Z",
"iopub.status.busy": "2024-10-19T03:27:54.558017Z",
"iopub.status.idle": "2024-10-19T03:27:54.566817Z",
"shell.execute_reply": "2024-10-19T03:27:54.566013Z"
},
"id": "YoP8NH7_lo7h",
"papermill": {
"duration": 0.036128,
"end_time": "2024-10-19T03:27:54.568730",
"exception": false,
"start_time": "2024-10-19T03:27:54.532602",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"def train_model(model, dataloader, optimizer, model_save_path, ewc=None, epochs=3):\n",
"\n",
" model.to(device)\n",
"\n",
" loss_values=[]\n",
" min_loss = float('inf') # Set to infinity at the start\n",
"\n",
" model.train()\n",
" for epoch in range(epochs):\n",
" total_loss = 0\n",
" for batch in tqdm.tqdm(dataloader):\n",
" outputs = model(input_ids=batch['input_ids'].to(device),\n",
" attention_mask=batch['attention_mask'].to(device),\n",
" labels=batch['labels'].to(device))\n",
" loss = outputs.loss\n",
"\n",
" if ewc:\n",
" loss += ewc.penalty()\n",
"\n",
" total_loss += loss.item()\n",
" optimizer.zero_grad()\n",
" loss.backward()\n",
" optimizer.step()\n",
" # Append average loss of the epoch to the list\n",
" avg_loss = total_loss / len(dataloader)\n",
" loss_values.append(avg_loss)\n",
"\n",
" print(f\"Epoch {epoch + 1} - Loss: {total_loss / len(dataloader)}\")\n",
"\n",
" # Check if current loss is lower than the minimum loss\n",
" if avg_loss < min_loss:\n",
" print(f\"New minimum loss: {avg_loss:.4f}, saving model...\")\n",
" min_loss = avg_loss # Update the minimum loss\n",
" # Save the model's state_dict (weights)\n",
" torch.save(model.state_dict(), model_save_path)\n",
" return loss_values, model\n"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "c559ac48",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T03:27:54.618328Z",
"iopub.status.busy": "2024-10-19T03:27:54.617988Z",
"iopub.status.idle": "2024-10-19T03:48:39.354329Z",
"shell.execute_reply": "2024-10-19T03:48:39.353239Z"
},
"id": "oAVH5NbRlo7i",
"outputId": "29051985-5854-4f88-f62a-1f6d525a5517",
"papermill": {
"duration": 1244.764251,
"end_time": "2024-10-19T03:48:39.356796",
"exception": false,
"start_time": "2024-10-19T03:27:54.592545",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training on Task T1\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/conda/lib/python3.10/site-packages/transformers/optimization.py:591: FutureWarning: This implementation of AdamW is deprecated and will be removed in a future version. Use the PyTorch implementation torch.optim.AdamW instead, or set `no_deprecation_warning=True` to disable this warning\n",
" warnings.warn(\n",
"100%|██████████| 368/368 [03:56<00:00, 1.55it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1 - Loss: 0.08122424427774208\n",
"New minimum loss: 0.0812, saving model...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 368/368 [04:09<00:00, 1.48it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 2 - Loss: 0.025342956971144304\n",
"New minimum loss: 0.0253, saving model...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 368/368 [04:10<00:00, 1.47it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 3 - Loss: 0.016992725335749918\n",
"New minimum loss: 0.0170, saving model...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 368/368 [04:10<00:00, 1.47it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 4 - Loss: 0.011919787018838257\n",
"New minimum loss: 0.0119, saving model...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 368/368 [04:10<00:00, 1.47it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 5 - Loss: 0.009049752625920202\n",
"New minimum loss: 0.0090, saving model...\n"
]
}
],
"source": [
"# Task 1 training\n",
"print(\"Training on Task T1\")\n",
"# Optimizer\n",
"optimizer = AdamW(model.parameters(), lr=learning_rate)\n",
"loss_values, model = train_model(model, train_dataloaders[\"T1\"], optimizer, 'model_weights1.pth', epochs=num_epochs)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "bff88255",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T03:48:39.730515Z",
"iopub.status.busy": "2024-10-19T03:48:39.729790Z",
"iopub.status.idle": "2024-10-19T03:48:40.109164Z",
"shell.execute_reply": "2024-10-19T03:48:40.108226Z"
},
"id": "Wnfcrkkalo7i",
"papermill": {
"duration": 0.547607,
"end_time": "2024-10-19T03:48:40.111079",
"exception": false,
"start_time": "2024-10-19T03:48:39.563472",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"# Plotting the training loss\n",
"plt.plot(range(1, num_epochs + 1), loss_values, marker='o', label=\"Training Loss\")\n",
"plt.title(\"Training Loss over Epochs\")\n",
"plt.xlabel(\"Epochs\")\n",
"plt.ylabel(\"Loss\")\n",
"plt.legend()\n",
"plt.grid(True)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "d3d010fe",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T03:48:40.469949Z",
"iopub.status.busy": "2024-10-19T03:48:40.469176Z",
"iopub.status.idle": "2024-10-19T03:48:40.475905Z",
"shell.execute_reply": "2024-10-19T03:48:40.475030Z"
},
"id": "Eloe2CR8lo7j",
"papermill": {
"duration": 0.198187,
"end_time": "2024-10-19T03:48:40.477782",
"exception": false,
"start_time": "2024-10-19T03:48:40.279595",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"['O',\n",
" 'B-treatment',\n",
" 'I-treatment',\n",
" 'B-chronic_disease',\n",
" 'I-chronic_disease',\n",
" 'B-cancer',\n",
" 'I-cancer',\n",
" 'B-allergy_name',\n",
" 'I-allergy_name']"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"list(label_map.keys())"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "4368e762",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T03:48:40.815381Z",
"iopub.status.busy": "2024-10-19T03:48:40.814692Z",
"iopub.status.idle": "2024-10-19T03:48:40.832244Z",
"shell.execute_reply": "2024-10-19T03:48:40.831329Z"
},
"id": "gwsrnHeklo7j",
"papermill": {
"duration": 0.186816,
"end_time": "2024-10-19T03:48:40.834142",
"exception": false,
"start_time": "2024-10-19T03:48:40.647326",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"from sklearn.metrics import f1_score\n",
"import numpy as np\n",
"from seqeval.metrics import classification_report\n",
"\n",
"def evaluation(test_dataloaders, model):\n",
"\n",
" # Evaluation on test dataset\n",
" model.eval()\n",
"\n",
" correct_predictions = 0\n",
" total = 0\n",
"\n",
" y_true = []\n",
" y_pred = []\n",
"\n",
" with torch.no_grad():\n",
" for batch in tqdm.tqdm(test_dataloaders):\n",
" input_ids = batch['input_ids'].to(device)\n",
" labels = batch['labels'].to(device)\n",
"\n",
" outputs = model(input_ids)\n",
" # Get predictions by taking the argmax of the logits\n",
" predictions = torch.argmax(outputs.logits, dim=-1)\n",
"\n",
" # Convert to numpy arrays\n",
" labels = labels.cpu().numpy()\n",
" predictions = predictions.cpu().numpy()\n",
"\n",
"# print(\"labels: \", labels.shape)\n",
"# print(\"predictions: \", predictions.shape)\n",
"\n",
"# print(\"labels: \", labels)\n",
"# print(\"predictions: \", predictions)\n",
"# return\n",
"\n",
" for label, pred in zip(labels, predictions):\n",
" # Filter out -100 labels\n",
" y_true.append([id2label[l] for l in label if l != -100])\n",
" y_pred.append([id2label[p] for p, l in zip(pred, label) if l != -100])\n",
"\n",
" print(classification_report(y_true, y_pred))\n",
" print(\"*\"*40)\n",
"\n",
"# print(y_true)\n",
"# print(y_pred)\n",
"\n",
" report = classification_report(y_true, y_pred, output_dict=True)\n",
"\n",
" # Extracting F1 scores for each entity type\n",
" entity_f1_scores = {}\n",
" for label in ['treatment', 'chronic_disease', 'cancer', 'allergy_name']:\n",
" entity_f1_scores[label] = report[label]['f1-score']\n",
"\n",
" weighted_avg_f1 = report['weighted avg']['f1-score']\n",
"\n",
" print(\"Entity-wise F1 scores:\")\n",
" for entity, score in entity_f1_scores.items():\n",
" print(f\"{entity}: {score:.4f}\")\n",
" print(f\"Weighted Average F1 score: {weighted_avg_f1:.4f}\")\n",
"\n",
" return (entity_f1_scores, weighted_avg_f1)"
]
},
{
"cell_type": "markdown",
"id": "07db5b76",
"metadata": {
"id": "IGfSMxuPlo7k",
"papermill": {
"duration": 0.163507,
"end_time": "2024-10-19T03:48:41.163645",
"exception": false,
"start_time": "2024-10-19T03:48:41.000138",
"status": "completed"
},
"tags": []
},
"source": [
"### Task 2"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "e2e40190",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T03:48:41.497244Z",
"iopub.status.busy": "2024-10-19T03:48:41.496062Z",
"iopub.status.idle": "2024-10-19T03:48:41.507922Z",
"shell.execute_reply": "2024-10-19T03:48:41.506948Z"
},
"id": "CI9uE4_flo7m",
"papermill": {
"duration": 0.181607,
"end_time": "2024-10-19T03:48:41.509989",
"exception": false,
"start_time": "2024-10-19T03:48:41.328382",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"class EWC:\n",
" def __init__(self, model, dataloader, importance=1000):\n",
" self.model = model\n",
" self.importance = importance\n",
" self.params = {n: p for n, p in self.model.named_parameters() if p.requires_grad}\n",
" self._means = {}\n",
" self._fishers = {}\n",
" self.dataloader = dataloader\n",
" self.compute_fisher_information()\n",
"\n",
" def compute_fisher_information(self):\n",
" self.model.eval()\n",
" fisher_diagonals = {n: torch.zeros_like(p) for n, p in self.params.items()}\n",
"\n",
" for batch in self.dataloader:\n",
" outputs = self.model(input_ids=batch['input_ids'].to(device),\n",
" attention_mask=batch['attention_mask'].to(device),\n",
" labels=batch['labels'].to(device))\n",
" loss = outputs.loss\n",
" loss.backward()\n",
"\n",
" for n, p in self.params.items():\n",
" fisher_diagonals[n] += (p.grad ** 2) / len(self.dataloader)\n",
"\n",
" for n, p in fisher_diagonals.items():\n",
" self._fishers[n] = fisher_diagonals[n]\n",
" self._means[n] = self.params[n].detach().clone()\n",
"\n",
" def penalty(self):\n",
" loss = 0\n",
" for n, p in self.params.items():\n",
" fisher = self._fishers[n]\n",
" mean = self._means[n]\n",
" loss += (fisher * (p - mean) ** 2).sum()\n",
" return loss * self.importance\n"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "e1159fec",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T03:48:41.852631Z",
"iopub.status.busy": "2024-10-19T03:48:41.851811Z",
"iopub.status.idle": "2024-10-19T04:08:04.342631Z",
"shell.execute_reply": "2024-10-19T04:08:04.341791Z"
},
"id": "_Y6MYJzqlo7m",
"papermill": {
"duration": 1162.666952,
"end_time": "2024-10-19T04:08:04.345282",
"exception": false,
"start_time": "2024-10-19T03:48:41.678330",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training on Task T2\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 323/323 [03:50<00:00, 1.40it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1 - Loss: 0.029211484109146677\n",
"New minimum loss: 0.0292, saving model...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 323/323 [03:50<00:00, 1.40it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 2 - Loss: 0.018161326241693906\n",
"New minimum loss: 0.0182, saving model...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 323/323 [03:50<00:00, 1.40it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 3 - Loss: 0.012592665302918953\n",
"New minimum loss: 0.0126, saving model...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 323/323 [03:50<00:00, 1.40it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 4 - Loss: 0.008822424781664446\n",
"New minimum loss: 0.0088, saving model...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 323/323 [03:51<00:00, 1.40it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 5 - Loss: 0.006582645188127544\n",
"New minimum loss: 0.0066, saving model...\n"
]
}
],
"source": [
"import random\n",
"from torch.utils.data import Subset, ConcatDataset\n",
"\n",
"# Keep 100 examples from T1\n",
"replay_buffer_T1 = random.sample(range(len(train_dataloaders[\"T1\"].dataset)), 100)\n",
"sampled_dataset = Subset(train_dataloaders[\"T1\"].dataset, replay_buffer_T1)\n",
"replay_dataloader_T1 = DataLoader(sampled_dataset, batch_size=batch_size, shuffle=True)\n",
"\n",
"# Combine the two datasets\n",
"combined_dataset = ConcatDataset([train_dataloaders[\"T2\"].dataset, replay_dataloader_T1.dataset])\n",
"# Create a new DataLoader from the combined dataset\n",
"combined_loader = DataLoader(combined_dataset, batch_size=batch_size, shuffle=True)\n",
"\n",
"# Task 2 training with EWC\n",
"print(\"Training on Task T2\")\n",
"\n",
"# model = BertForTokenClassification.from_pretrained(\"bert-base-cased\", num_labels=len(label_map))\n",
"# model.load_state_dict(torch.load('model_weights1.pth', weights_only=True))\n",
"# model.to(device)\n",
"\n",
"# Elastic Weight Consolidation for Task 2\n",
"ewc_T2 = EWC(model, replay_dataloader_T1)\n",
"\n",
"loss_values, model = train_model(model, train_dataloaders[\"T2\"], optimizer, 'model_weights2.pth', ewc=ewc_T2, epochs=num_epochs)\n",
"# Assuming `model` is your trained model\n",
"# torch.save(multi_label_model.state_dict(), 'model_weights2.pth')"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "9756bb52",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T04:08:04.976483Z",
"iopub.status.busy": "2024-10-19T04:08:04.976123Z",
"iopub.status.idle": "2024-10-19T04:08:05.265154Z",
"shell.execute_reply": "2024-10-19T04:08:05.264237Z"
},
"id": "vphcmWcBlo7n",
"papermill": {
"duration": 0.619363,
"end_time": "2024-10-19T04:08:05.267369",
"exception": false,
"start_time": "2024-10-19T04:08:04.648006",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"# Plotting the training loss\n",
"plt.plot(range(1, num_epochs + 1), loss_values, marker='o', label=\"Training Loss\")\n",
"plt.title(\"Training Loss over Epochs\")\n",
"plt.xlabel(\"Epochs\")\n",
"plt.ylabel(\"Loss\")\n",
"plt.legend()\n",
"plt.grid(True)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "0ce612a1",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T04:08:05.848193Z",
"iopub.status.busy": "2024-10-19T04:08:05.847798Z",
"iopub.status.idle": "2024-10-19T04:27:01.520968Z",
"shell.execute_reply": "2024-10-19T04:27:01.520130Z"
},
"id": "mMJ9RdNFlo7n",
"papermill": {
"duration": 1135.965761,
"end_time": "2024-10-19T04:27:01.523469",
"exception": false,
"start_time": "2024-10-19T04:08:05.557708",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training on Task T3\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 314/314 [03:44<00:00, 1.40it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1 - Loss: 0.028447151246367937\n",
"New minimum loss: 0.0284, saving model...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 314/314 [03:44<00:00, 1.40it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 2 - Loss: 0.017575527700020153\n",
"New minimum loss: 0.0176, saving model...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 314/314 [03:44<00:00, 1.40it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 3 - Loss: 0.012083320739785814\n",
"New minimum loss: 0.0121, saving model...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 314/314 [03:44<00:00, 1.40it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 4 - Loss: 0.008300796071079317\n",
"New minimum loss: 0.0083, saving model...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 314/314 [03:44<00:00, 1.40it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 5 - Loss: 0.00641057728663692\n",
"New minimum loss: 0.0064, saving model...\n"
]
}
],
"source": [
"from torch.utils.data import ConcatDataset\n",
"\n",
"# Keep 100 examples from T1 and T2\n",
"replay_buffer_T1 = random.sample(range(len(train_dataloaders[\"T1\"].dataset)), 100)\n",
"sampled_dataset1 = Subset(train_dataloaders[\"T1\"].dataset, replay_buffer_T1)\n",
"replay_buffer_T2 = random.sample(range(len(train_dataloaders[\"T2\"].dataset)), 100)\n",
"sampled_dataset2 = Subset(train_dataloaders[\"T2\"].dataset, replay_buffer_T2)\n",
"combined_dataset = ConcatDataset([sampled_dataset1, sampled_dataset2])\n",
"replay_dataloader_T1_T2 = DataLoader(combined_dataset, batch_size=batch_size, shuffle=True)\n",
"\n",
"# Combine the two datasets\n",
"combined_dataset = ConcatDataset([train_dataloaders[\"T3\"].dataset, replay_dataloader_T1_T2.dataset])\n",
"# Create a new DataLoader from the combined dataset\n",
"combined_loader = DataLoader(combined_dataset, batch_size=batch_size, shuffle=True)\n",
"\n",
"# Task 2 training with EWC\n",
"print(\"Training on Task T3\")\n",
"\n",
"# model = BertForTokenClassification.from_pretrained(\"bert-base-cased\", num_labels=len(label_map))\n",
"# model.load_state_dict(torch.load('model_weights2.pth', weights_only=True))\n",
"# model.to(device)\n",
"\n",
"# Elastic Weight Consolidation for Task 1 and Task 2\n",
"ewc_T1_T2 = EWC(model, replay_dataloader_T1_T2)\n",
"\n",
"loss_values, model = train_model(model, train_dataloaders[\"T3\"], optimizer, 'model_weights3.pth', ewc=ewc_T1_T2, epochs=num_epochs)\n",
"# Assuming `model` is your trained model\n",
"# torch.save(multi_label_model.state_dict(), 'model_weights3.pth')"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "faf9a6ac",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T04:27:02.356894Z",
"iopub.status.busy": "2024-10-19T04:27:02.356252Z",
"iopub.status.idle": "2024-10-19T04:27:02.642888Z",
"shell.execute_reply": "2024-10-19T04:27:02.641948Z"
},
"id": "0YsWI0wClo7o",
"papermill": {
"duration": 0.703735,
"end_time": "2024-10-19T04:27:02.644889",
"exception": false,
"start_time": "2024-10-19T04:27:01.941154",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"image/png": "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bbV/DgwMLPVZYGAg4uLiAAAXL16Ev78/zM3NtZ8/99xz0Gg0SEhIgCAISE5ORq9evSqtwc/PT/tnc3NzWFlZIT09HQAwZcoUDBkyBDExMejbty9CQkLQpUuXavVKRHWLAYmI9Ja5uXm5Ka+aYmpqWqVxxsbGpd4LggCNRgMA6N+/PxITExEeHo6IiAj06tULU6dOxdKlS2u8XiKqWTwHiYgM1vHjx8u9b9myJQCgZcuWOHPmDPLz87WfR0ZGQiaToUWLFrC0tIS7uzv279//TDU4ODhg3Lhx+OWXX/DFF19g7dq1z7Q9IqobPIJERHqrqKgIqamppZYZGRlpT4TevHkzOnTogK5du+LXX3/FyZMn8f333wMARo8ejblz52LcuHGYN28e7t69i7fffhuvvvoqnJycAADz5s3Dm2++CUdHR/Tv3x+5ubmIjIzE22+/XaX65syZg/bt26NVq1YoKirCzp07tQGNiHQbAxIR6a3du3fDxcWl1LIWLVrg0qVLAB5dYbZhwwa89dZbcHFxwX//+1/4+PgAAMzMzLBnzx5MmzYNHTt2hJmZGYYMGYLly5drtzVu3DgUFhbi888/x/vvvw97e3sMHTq0yvWZmJhg1qxZuHnzJkxNTREUFIQNGzbUQOdEVNsEURRFqYsgIqppgiDg999/R0hIiNSlEJEe4jlIRERERGUwIBERERGVwXOQiMgg8ewBInoWPIJEREREVAYDEhEREVEZDEhEREREZTAgEREREZXBgERERERUBgMSERERURkMSERERERlMCARERERlcGARERERFTG/wO5GUzqiWKqBAAAAABJRU5ErkJggg==",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"# Plotting the training loss\n",
"plt.plot(range(1, num_epochs + 1), loss_values, marker='o', label=\"Training Loss\")\n",
"plt.title(\"Training Loss over Epochs\")\n",
"plt.xlabel(\"Epochs\")\n",
"plt.ylabel(\"Loss\")\n",
"plt.legend()\n",
"plt.grid(True)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "4011f2b4",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T04:27:03.519958Z",
"iopub.status.busy": "2024-10-19T04:27:03.519556Z",
"iopub.status.idle": "2024-10-19T05:24:17.930675Z",
"shell.execute_reply": "2024-10-19T05:24:17.929777Z"
},
"id": "CPeGbtV4lo7o",
"papermill": {
"duration": 3434.867153,
"end_time": "2024-10-19T05:24:17.933208",
"exception": false,
"start_time": "2024-10-19T04:27:03.066055",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training on G1+G2+G3 \n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Some weights of BertForTokenClassification were not initialized from the model checkpoint at bert-base-cased and are newly initialized: ['classifier.bias', 'classifier.weight']\n",
"You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n",
"100%|██████████| 1004/1004 [11:25<00:00, 1.46it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1 - Loss: 0.049782790117470395\n",
"New minimum loss: 0.0498, saving model...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 1004/1004 [11:25<00:00, 1.46it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 2 - Loss: 0.021665205914653332\n",
"New minimum loss: 0.0217, saving model...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 1004/1004 [11:25<00:00, 1.46it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 3 - Loss: 0.016814892424921693\n",
"New minimum loss: 0.0168, saving model...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 1004/1004 [11:26<00:00, 1.46it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 4 - Loss: 0.012903303460684601\n",
"New minimum loss: 0.0129, saving model...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 1004/1004 [11:27<00:00, 1.46it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 5 - Loss: 0.010335032426728032\n",
"New minimum loss: 0.0103, saving model...\n"
]
}
],
"source": [
"#Training on complete G1+G2+G3\n",
"# Combine the datasets\n",
"combined_train_dataset = ConcatDataset([train_dataloaders[\"T1\"].dataset, train_dataloaders[\"T2\"].dataset, train_dataloaders[\"T3\"].dataset])\n",
"combined_test_dataset = ConcatDataset([test_dataloaders[\"T1\"].dataset, test_dataloaders[\"T2\"].dataset, test_dataloaders[\"T3\"].dataset])\n",
"\n",
"# Create a new DataLoader from the combined dataset\n",
"combined_train_loader_123 = DataLoader(combined_train_dataset, batch_size=batch_size, shuffle=True)\n",
"combined_test_loader_123 = DataLoader(combined_test_dataset, batch_size=batch_size, shuffle=True)\n",
"\n",
"print(\"Training on G1+G2+G3 \")\n",
"model = BertForTokenClassification.from_pretrained(\"bert-base-cased\", num_labels=len(label_map))# Optimizer\n",
"optimizer = AdamW(model.parameters(), lr=learning_rate)\n",
"loss_values, _ = train_model(model, combined_train_loader_123, optimizer, 'model_weights4.pth', epochs=num_epochs)"
]
},
{
"cell_type": "markdown",
"id": "2642e21c",
"metadata": {
"id": "HIKlgZ-llo7p",
"papermill": {
"duration": 0.845308,
"end_time": "2024-10-19T05:24:19.581088",
"exception": false,
"start_time": "2024-10-19T05:24:18.735780",
"status": "completed"
},
"tags": []
},
"source": [
"## Evaluation"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "e0f13d48",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T05:24:21.255939Z",
"iopub.status.busy": "2024-10-19T05:24:21.255015Z",
"iopub.status.idle": "2024-10-19T05:24:57.894478Z",
"shell.execute_reply": "2024-10-19T05:24:57.893525Z"
},
"id": "PM9Iwib6lo7p",
"papermill": {
"duration": 38.318841,
"end_time": "2024-10-19T05:24:58.721275",
"exception": false,
"start_time": "2024-10-19T05:24:20.402434",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Task 1\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Some weights of BertForTokenClassification were not initialized from the model checkpoint at bert-base-cased and are newly initialized: ['classifier.bias', 'classifier.weight']\n",
"You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n",
" 0%| | 0/92 [00:00, ?it/s]We strongly recommend passing in an `attention_mask` since your input_ids may be padded. See https://huggingface.co/docs/transformers/troubleshooting#incorrect-output-when-padding-tokens-arent-masked.\n",
"100%|██████████| 92/92 [00:19<00:00, 4.68it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" allergy_name 0.06 0.02 0.03 51\n",
" cancer 0.56 0.59 0.58 387\n",
"chronic_disease 0.52 0.42 0.47 1118\n",
" treatment 0.49 0.60 0.54 1248\n",
"\n",
" micro avg 0.51 0.51 0.51 2804\n",
" macro avg 0.41 0.41 0.40 2804\n",
" weighted avg 0.51 0.51 0.51 2804\n",
"\n",
"****************************************\n",
"Entity-wise F1 scores:\n",
"treatment: 0.5415\n",
"chronic_disease: 0.4657\n",
"cancer: 0.5765\n",
"allergy_name: 0.0299\n",
"Weighted Average F1 score: 0.5068\n"
]
}
],
"source": [
"## Task 1\n",
"print(\"Task 1\")\n",
"\n",
"model = BertForTokenClassification.from_pretrained(\"bert-base-cased\", num_labels=len(label_map))\n",
"model.load_state_dict(torch.load('model_weights1.pth', weights_only=True))\n",
"model.to(device)\n",
"\n",
"T1_results = evaluation(test_dataloaders['T1'], model)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "6e135e6d",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T05:25:00.409497Z",
"iopub.status.busy": "2024-10-19T05:25:00.408607Z",
"iopub.status.idle": "2024-10-19T05:26:07.994354Z",
"shell.execute_reply": "2024-10-19T05:26:07.993364Z"
},
"id": "A9DCeiFmlo7p",
"papermill": {
"duration": 69.295494,
"end_time": "2024-10-19T05:26:08.823638",
"exception": false,
"start_time": "2024-10-19T05:24:59.528144",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Some weights of BertForTokenClassification were not initialized from the model checkpoint at bert-base-cased and are newly initialized: ['classifier.bias', 'classifier.weight']\n",
"You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Task 1, 2\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 173/173 [00:36<00:00, 4.76it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" allergy_name 0.49 0.45 0.47 105\n",
" cancer 0.59 0.58 0.59 759\n",
"chronic_disease 0.55 0.73 0.63 2207\n",
" treatment 0.58 0.65 0.61 2391\n",
"\n",
" micro avg 0.57 0.67 0.62 5462\n",
" macro avg 0.55 0.60 0.58 5462\n",
" weighted avg 0.57 0.67 0.61 5462\n",
"\n",
"****************************************\n",
"Entity-wise F1 scores:\n",
"treatment: 0.6140\n",
"chronic_disease: 0.6312\n",
"cancer: 0.5852\n",
"allergy_name: 0.4700\n",
"Weighted Average F1 score: 0.6142\n"
]
}
],
"source": [
"model = BertForTokenClassification.from_pretrained(\"bert-base-cased\", num_labels=len(label_map))\n",
"model.load_state_dict(torch.load('model_weights2.pth', weights_only=True))\n",
"model.to(device)\n",
"\n",
"# Combine the two datasets\n",
"combined_dataset = ConcatDataset([test_dataloaders[\"T1\"].dataset, test_dataloaders[\"T2\"].dataset])\n",
"# Create a new DataLoader from the combined dataset\n",
"combined_loader = DataLoader(combined_dataset, batch_size=batch_size, shuffle=True)\n",
"\n",
"## Task 1\n",
"print(\"Task 1, 2\")\n",
"T2_results = evaluation(combined_loader, model)"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "3b2b9885",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T05:26:10.536885Z",
"iopub.status.busy": "2024-10-19T05:26:10.536539Z",
"iopub.status.idle": "2024-10-19T05:27:46.811167Z",
"shell.execute_reply": "2024-10-19T05:27:46.810178Z"
},
"id": "Po4MRsUOlo7q",
"papermill": {
"duration": 97.127076,
"end_time": "2024-10-19T05:27:46.813299",
"exception": false,
"start_time": "2024-10-19T05:26:09.686223",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Some weights of BertForTokenClassification were not initialized from the model checkpoint at bert-base-cased and are newly initialized: ['classifier.bias', 'classifier.weight']\n",
"You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Task 1, 2 and 3\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 252/252 [00:51<00:00, 4.87it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" allergy_name 0.60 0.57 0.58 182\n",
" cancer 0.62 0.60 0.61 1091\n",
"chronic_disease 0.61 0.62 0.61 3242\n",
" treatment 0.56 0.71 0.63 3530\n",
"\n",
" micro avg 0.59 0.65 0.62 8045\n",
" macro avg 0.60 0.62 0.61 8045\n",
" weighted avg 0.59 0.65 0.62 8045\n",
"\n",
"****************************************\n",
"Entity-wise F1 scores:\n",
"treatment: 0.6263\n",
"chronic_disease: 0.6110\n",
"cancer: 0.6101\n",
"allergy_name: 0.5803\n",
"Weighted Average F1 score: 0.6169\n"
]
}
],
"source": [
"## Task 3\n",
"print(\"Task 1, 2 and 3\")\n",
"\n",
"model = BertForTokenClassification.from_pretrained(\"bert-base-cased\", num_labels=len(label_map))\n",
"model.load_state_dict(torch.load('model_weights3.pth', weights_only=True))\n",
"model.to(device)\n",
"\n",
"T3_results = evaluation(combined_test_loader_123, model)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "c2fbeac6",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T05:27:48.544865Z",
"iopub.status.busy": "2024-10-19T05:27:48.544000Z",
"iopub.status.idle": "2024-10-19T05:29:24.151053Z",
"shell.execute_reply": "2024-10-19T05:29:24.149945Z"
},
"id": "0ckKGcchlo7q",
"papermill": {
"duration": 96.45821,
"end_time": "2024-10-19T05:29:24.153095",
"exception": false,
"start_time": "2024-10-19T05:27:47.694885",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Some weights of BertForTokenClassification were not initialized from the model checkpoint at bert-base-cased and are newly initialized: ['classifier.bias', 'classifier.weight']\n",
"You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Task 4 - G1+G2+G3\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 252/252 [00:51<00:00, 4.93it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" allergy_name 0.46 0.34 0.39 182\n",
" cancer 0.62 0.64 0.63 1091\n",
"chronic_disease 0.59 0.57 0.58 3242\n",
" treatment 0.58 0.49 0.53 3530\n",
"\n",
" micro avg 0.59 0.54 0.56 8045\n",
" macro avg 0.56 0.51 0.53 8045\n",
" weighted avg 0.59 0.54 0.56 8045\n",
"\n",
"****************************************\n",
"Entity-wise F1 scores:\n",
"treatment: 0.5326\n",
"chronic_disease: 0.5763\n",
"cancer: 0.6279\n",
"allergy_name: 0.3861\n",
"Weighted Average F1 score: 0.5598\n"
]
}
],
"source": [
"## Task 3\n",
"print(\"Task 4 - G1+G2+G3\")\n",
"\n",
"model = BertForTokenClassification.from_pretrained(\"bert-base-cased\", num_labels=len(label_map))\n",
"model.load_state_dict(torch.load('model_weights4.pth', weights_only=True))\n",
"model.to(device)\n",
"\n",
"T4_results = evaluation(combined_test_loader_123, model)"
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "3ae6d10a",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T05:29:25.926295Z",
"iopub.status.busy": "2024-10-19T05:29:25.925448Z",
"iopub.status.idle": "2024-10-19T05:29:25.931491Z",
"shell.execute_reply": "2024-10-19T05:29:25.930640Z"
},
"id": "SCSe8E_CVPdW",
"papermill": {
"duration": 0.870674,
"end_time": "2024-10-19T05:29:25.933385",
"exception": false,
"start_time": "2024-10-19T05:29:25.062711",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"def get_all_scores(results):\n",
" score_dict = {'Weighted Average':[]}\n",
" for result in results:\n",
" for entity, score in result[0].items():\n",
" score_dict[entity] = score_dict.get(entity,[])\n",
" score_dict[entity].append(score)\n",
" score_dict['Weighted Average'].append(result[1])\n",
" score_df = pd.DataFrame(score_dict)\n",
" return score_df"
]
},
{
"cell_type": "code",
"execution_count": 34,
"id": "7606e6b5",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T05:29:27.703993Z",
"iopub.status.busy": "2024-10-19T05:29:27.703600Z",
"iopub.status.idle": "2024-10-19T05:29:27.717788Z",
"shell.execute_reply": "2024-10-19T05:29:27.716931Z"
},
"id": "VOX78HFplo7r",
"papermill": {
"duration": 0.880314,
"end_time": "2024-10-19T05:29:27.719798",
"exception": false,
"start_time": "2024-10-19T05:29:26.839484",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Performance on the test set of T1 | \n",
" Performance on the test set of T1 and T2. | \n",
" Performance on the test set of T1, T2 and T3. | \n",
" Performance on combined G1+G2+G3 | \n",
"
\n",
" \n",
" \n",
" \n",
" Weighted Average | \n",
" 0.506789 | \n",
" 0.614178 | \n",
" 0.616918 | \n",
" 0.559810 | \n",
"
\n",
" \n",
" treatment | \n",
" 0.541501 | \n",
" 0.613997 | \n",
" 0.626349 | \n",
" 0.532574 | \n",
"
\n",
" \n",
" chronic_disease | \n",
" 0.465672 | \n",
" 0.631210 | \n",
" 0.611009 | \n",
" 0.576314 | \n",
"
\n",
" \n",
" cancer | \n",
" 0.576485 | \n",
" 0.585170 | \n",
" 0.610075 | \n",
" 0.627876 | \n",
"
\n",
" \n",
" allergy_name | \n",
" 0.029851 | \n",
" 0.470000 | \n",
" 0.580282 | \n",
" 0.386076 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Performance on the test set of T1 \\\n",
"Weighted Average 0.506789 \n",
"treatment 0.541501 \n",
"chronic_disease 0.465672 \n",
"cancer 0.576485 \n",
"allergy_name 0.029851 \n",
"\n",
" Performance on the test set of T1 and T2. \\\n",
"Weighted Average 0.614178 \n",
"treatment 0.613997 \n",
"chronic_disease 0.631210 \n",
"cancer 0.585170 \n",
"allergy_name 0.470000 \n",
"\n",
" Performance on the test set of T1, T2 and T3. \\\n",
"Weighted Average 0.616918 \n",
"treatment 0.626349 \n",
"chronic_disease 0.611009 \n",
"cancer 0.610075 \n",
"allergy_name 0.580282 \n",
"\n",
" Performance on combined G1+G2+G3 \n",
"Weighted Average 0.559810 \n",
"treatment 0.532574 \n",
"chronic_disease 0.576314 \n",
"cancer 0.627876 \n",
"allergy_name 0.386076 "
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"all_scores_df = get_all_scores([T1_results, T2_results, T3_results, T4_results]).T\n",
"all_scores_df.columns = [\"Performance on the test set of T1\",\"Performance on the test set of T1 and T2.\",\"Performance on the test set of T1, T2 and T3.\",\"Performance on combined G1+G2+G3\"]\n",
"all_scores_df"
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "73b43a29",
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-19T05:29:29.496012Z",
"iopub.status.busy": "2024-10-19T05:29:29.495622Z",
"iopub.status.idle": "2024-10-19T05:29:29.504783Z",
"shell.execute_reply": "2024-10-19T05:29:29.503948Z"
},
"id": "enLklxLYYJ3f",
"papermill": {
"duration": 0.876876,
"end_time": "2024-10-19T05:29:29.506741",
"exception": false,
"start_time": "2024-10-19T05:29:28.629865",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"all_scores_df.to_csv('all_scores_df.csv')"
]
}
],
"metadata": {
"accelerator": "GPU",
"colab": {
"gpuType": "T4",
"provenance": []
},
"kaggle": {
"accelerator": "nvidiaTeslaT4",
"dataSources": [
{
"datasetId": 5886347,
"sourceId": 9639798,
"sourceType": "datasetVersion"
},
{
"datasetId": 5902909,
"sourceId": 9661596,
"sourceType": "datasetVersion"
}
],
"dockerImageVersionId": 30787,
"isGpuEnabled": true,
"isInternetEnabled": true,
"language": "python",
"sourceType": "notebook"
},
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.14"
},
"papermill": {
"default_parameters": {},
"duration": 7349.251517,
"end_time": "2024-10-19T05:29:33.328399",
"environment_variables": {},
"exception": null,
"input_path": "__notebook__.ipynb",
"output_path": "__notebook__.ipynb",
"parameters": {},
"start_time": "2024-10-19T03:27:04.076882",
"version": "2.6.0"
},
"widgets": {
"application/vnd.jupyter.widget-state+json": {
"state": {
"06302581b083456b9c3c8c963644a989": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"06b337d1462e48cc95af610666b09666": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "HBoxModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HBoxModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HBoxView",
"box_style": "",
"children": [
"IPY_MODEL_3017f343371943908ea25ee280c2e9bd",
"IPY_MODEL_62d2ee84b5744a04a3b748dfe732eded",
"IPY_MODEL_54ec13be30554926b7976e543d094425"
],
"layout": "IPY_MODEL_4f1072a412db40419f85a09ae42f2bb9"
}
},
"09f90ce81bd64eccb1a1518a1faff7e9": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"1493273896304bfd9899e71216b42ab7": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"18cf30eccdc84df3b4781cf1fbbb78a3": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "FloatProgressModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "FloatProgressModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "ProgressView",
"bar_style": "success",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_8153dad620e640b0a9b5604febd27d64",
"max": 435755784.0,
"min": 0.0,
"orientation": "horizontal",
"style": "IPY_MODEL_e4f6862c274747b39bf143bcf9fe97b0",
"value": 435755784.0
}
},
"1ac46f0a3b5f40beb8aeffc492755fdf": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "HTMLModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_3fa198b1bbd74d3ca808db47c6bcfb91",
"placeholder": "",
"style": "IPY_MODEL_d495045efcf744dca3d51dec98f0734e",
"value": " 436M/436M [00:02<00:00, 262MB/s]"
}
},
"231a5bb115b342c48e4c4fd2eeb44857": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "DescriptionStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"2b8d2f901ab243318b5cfbeff8f25eee": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"2b94730544a24657b6119ca3cd72860a": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "HTMLModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_c6b9c36b4d134c6f87726559c57d3ae1",
"placeholder": "",
"style": "IPY_MODEL_f52def1ec17b412cb60d44beef8080ee",
"value": "vocab.txt: 100%"
}
},
"2dc678e82fa64c48a790e3d819348391": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "ProgressStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "ProgressStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"bar_color": null,
"description_width": ""
}
},
"2e626c68a5ab4b91ac0c52cc2b81508e": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "DescriptionStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"3017f343371943908ea25ee280c2e9bd": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "HTMLModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_f1f1e7a622044ef68a1ce1a241e002ac",
"placeholder": "",
"style": "IPY_MODEL_2e626c68a5ab4b91ac0c52cc2b81508e",
"value": "config.json: 100%"
}
},
"3696fef0fada456b8cb387f1653215be": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"3fa198b1bbd74d3ca808db47c6bcfb91": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"4293c9517ab64783bb8dc7683e103b98": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "DescriptionStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"4b8b04381c264cd19a7217e3e5f2c6fb": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "HTMLModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_85a6f29eed654e609c714e833d490760",
"placeholder": "",
"style": "IPY_MODEL_9318bbe7299a4facb4089b2b3f03f7e4",
"value": "model.safetensors: 100%"
}
},
"4df732b79c4d44f6ab297c7ebe4b8f7b": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "HBoxModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HBoxModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HBoxView",
"box_style": "",
"children": [
"IPY_MODEL_ccc45da15caf4419851727e39bb5a547",
"IPY_MODEL_f9110544b8c4435bb3ee6320eb0c11ea",
"IPY_MODEL_caf8825fcd1f416e927d41b783f20e7d"
],
"layout": "IPY_MODEL_1493273896304bfd9899e71216b42ab7"
}
},
"4f1072a412db40419f85a09ae42f2bb9": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"54ec13be30554926b7976e543d094425": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "HTMLModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_2b8d2f901ab243318b5cfbeff8f25eee",
"placeholder": "",
"style": "IPY_MODEL_f3186d2a3d9f4c22be1d0f110c50efd0",
"value": " 570/570 [00:00<00:00, 49.8kB/s]"
}
},
"62d2ee84b5744a04a3b748dfe732eded": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "FloatProgressModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "FloatProgressModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "ProgressView",
"bar_style": "success",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_fd467c9c41be4d29995c699b75b81cd5",
"max": 570.0,
"min": 0.0,
"orientation": "horizontal",
"style": "IPY_MODEL_658373fa07ac408a89ed555b0a840a14",
"value": 570.0
}
},
"658373fa07ac408a89ed555b0a840a14": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "ProgressStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "ProgressStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"bar_color": null,
"description_width": ""
}
},
"74b541919b784641a8526b4ca1d0a404": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "DescriptionStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"7945c90c7d474b51abd266091f901952": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "DescriptionStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"81527808acc0472cbdd51e7c6420ce8a": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"8153dad620e640b0a9b5604febd27d64": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"85a6f29eed654e609c714e833d490760": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"87a61e94a64a4c488860663c7a17d964": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"9318bbe7299a4facb4089b2b3f03f7e4": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "DescriptionStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"a66f9039603d4070893769f603c55b88": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "ProgressStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "ProgressStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"bar_color": null,
"description_width": ""
}
},
"a89ad9a1b1164c17912bbfd6a1c671bf": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"ad070181b22f49c5a6c3ae0caa55d3b8": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "FloatProgressModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "FloatProgressModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "ProgressView",
"bar_style": "success",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_81527808acc0472cbdd51e7c6420ce8a",
"max": 213450.0,
"min": 0.0,
"orientation": "horizontal",
"style": "IPY_MODEL_2dc678e82fa64c48a790e3d819348391",
"value": 213450.0
}
},
"aeb890f8c9b6434ba3feda619ccd3b07": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "HTMLModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_a89ad9a1b1164c17912bbfd6a1c671bf",
"placeholder": "",
"style": "IPY_MODEL_7945c90c7d474b51abd266091f901952",
"value": "tokenizer_config.json: 100%"
}
},
"af620a1558ad48f0bf24a24e7b0d7e3c": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"b1a021dcde9240dcb0c2be5725a96c59": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"b659c0a2dd244c6d9313eeba2ec38298": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"c625e09aef47433894e0d121efcaa2e6": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"c6b9c36b4d134c6f87726559c57d3ae1": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"caf8825fcd1f416e927d41b783f20e7d": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "HTMLModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_09f90ce81bd64eccb1a1518a1faff7e9",
"placeholder": "",
"style": "IPY_MODEL_4293c9517ab64783bb8dc7683e103b98",
"value": " 436k/436k [00:00<00:00, 5.96MB/s]"
}
},
"cbe1d6d4f28b4db8b41c24c8d6ea7179": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"ccc45da15caf4419851727e39bb5a547": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "HTMLModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_c625e09aef47433894e0d121efcaa2e6",
"placeholder": "",
"style": "IPY_MODEL_231a5bb115b342c48e4c4fd2eeb44857",
"value": "tokenizer.json: 100%"
}
},
"ccf8ab04c1bf49c08a02749a5bf94090": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "DescriptionStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"d3e6ad5135884663b0d44b60f4981af4": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "FloatProgressModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "FloatProgressModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "ProgressView",
"bar_style": "success",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_cbe1d6d4f28b4db8b41c24c8d6ea7179",
"max": 49.0,
"min": 0.0,
"orientation": "horizontal",
"style": "IPY_MODEL_eb488c1b67674794a5b860fe2cc56dae",
"value": 49.0
}
},
"d495045efcf744dca3d51dec98f0734e": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "DescriptionStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"db6042c77cbd4db0bca2331c558256d8": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "HBoxModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HBoxModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HBoxView",
"box_style": "",
"children": [
"IPY_MODEL_2b94730544a24657b6119ca3cd72860a",
"IPY_MODEL_ad070181b22f49c5a6c3ae0caa55d3b8",
"IPY_MODEL_dd2b300b9e5a4a5e8d7d781fc66e1436"
],
"layout": "IPY_MODEL_af620a1558ad48f0bf24a24e7b0d7e3c"
}
},
"dc8efdeeb86448f1ab80d1d7ca7af5ca": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "HBoxModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HBoxModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HBoxView",
"box_style": "",
"children": [
"IPY_MODEL_4b8b04381c264cd19a7217e3e5f2c6fb",
"IPY_MODEL_18cf30eccdc84df3b4781cf1fbbb78a3",
"IPY_MODEL_1ac46f0a3b5f40beb8aeffc492755fdf"
],
"layout": "IPY_MODEL_b1a021dcde9240dcb0c2be5725a96c59"
}
},
"dd2b300b9e5a4a5e8d7d781fc66e1436": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "HTMLModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_06302581b083456b9c3c8c963644a989",
"placeholder": "",
"style": "IPY_MODEL_ccf8ab04c1bf49c08a02749a5bf94090",
"value": " 213k/213k [00:00<00:00, 4.07MB/s]"
}
},
"e4f6862c274747b39bf143bcf9fe97b0": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "ProgressStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "ProgressStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"bar_color": null,
"description_width": ""
}
},
"e6853cc7a3cb439ba6fb13a4e1d68825": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "HTMLModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_b659c0a2dd244c6d9313eeba2ec38298",
"placeholder": "",
"style": "IPY_MODEL_74b541919b784641a8526b4ca1d0a404",
"value": " 49.0/49.0 [00:00<00:00, 3.94kB/s]"
}
},
"e9fbb901478541afaa5e4331803f95a5": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "HBoxModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HBoxModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HBoxView",
"box_style": "",
"children": [
"IPY_MODEL_aeb890f8c9b6434ba3feda619ccd3b07",
"IPY_MODEL_d3e6ad5135884663b0d44b60f4981af4",
"IPY_MODEL_e6853cc7a3cb439ba6fb13a4e1d68825"
],
"layout": "IPY_MODEL_87a61e94a64a4c488860663c7a17d964"
}
},
"eb488c1b67674794a5b860fe2cc56dae": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "ProgressStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "ProgressStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"bar_color": null,
"description_width": ""
}
},
"f1f1e7a622044ef68a1ce1a241e002ac": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"f3186d2a3d9f4c22be1d0f110c50efd0": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "DescriptionStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"f52def1ec17b412cb60d44beef8080ee": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "DescriptionStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"f9110544b8c4435bb3ee6320eb0c11ea": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "FloatProgressModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "FloatProgressModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "ProgressView",
"bar_style": "success",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_3696fef0fada456b8cb387f1653215be",
"max": 435797.0,
"min": 0.0,
"orientation": "horizontal",
"style": "IPY_MODEL_a66f9039603d4070893769f603c55b88",
"value": 435797.0
}
},
"fd467c9c41be4d29995c699b75b81cd5": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
}
},
"version_major": 2,
"version_minor": 0
}
}
},
"nbformat": 4,
"nbformat_minor": 5
}