{
"cells": [
{
"cell_type": "code",
"source": [],
"metadata": {
"id": "HoacGdvoz75B"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [
"from google.colab import drive\n",
"drive.mount('/content/drive')"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "NpaIUZn6z8f7",
"outputId": "7fdc9611-07d6-459e-e59a-29487c32cd69"
},
"execution_count": 3,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Mounted at /content/drive\n"
]
}
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"id": "vw91dJb4zsG7"
},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import os, gc, re, warnings\n",
"warnings.filterwarnings(\"ignore\")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 424
},
"id": "A5ZMtUPEz7Fh",
"outputId": "253e374a-a83d-40f4-ea90-0ff5091d3e0c"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" Text Category\n",
"0 बिहार मे होबय वाला नगर निगम \\nचुनाव 2022 के नव... Politics\n",
"1 राज्य मे भूमि सँ जुड़ल भ्रष्टाचार \\nकेर मामिला ... Politics\n",
"2 गांधीनगर | राष्ट्रीय एकता दिवस पर \\nसोम दिन गु... Politics\n",
"3 गुजरात केर मोरबी मे रवि दिन सांझ भेल दर्दनाक द... Politics\n",
"4 गुजरातक मोरबी\\nकेर उक्त झुलैत पुल \\nलगभग 150 स... Politics\n",
"... ... ...\n",
"15465 । मांस काठमांडू।नेपालगुंज में लक्ष्मी अंतरसंचा... Economy\n",
"15466 । ३१ जुलाई काठमाण्डू।टाटा मोटर्स के आधिकारिक व... Economy\n",
"15467 । १३ अप्रैल काठमाण्डू।कोरियाई मोटर्स कंपनी ग्र... Economy\n",
"15468 । आसंजन काठमाण्डू।स्पोर्ट्स हैचबैक तसेया त्याट... Economy\n",
"15469 । ३ काठमाण्डू।आईएमएस मोटर्स काठमांडू के बैंक म... Economy\n",
"\n",
"[15470 rows x 2 columns]"
],
"text/html": [
"\n",
"
\n",
"
\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" Text \n",
" Category \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" बिहार मे होबय वाला नगर निगम \\nचुनाव 2022 के नव... \n",
" Politics \n",
" \n",
" \n",
" 1 \n",
" राज्य मे भूमि सँ जुड़ल भ्रष्टाचार \\nकेर मामिला ... \n",
" Politics \n",
" \n",
" \n",
" 2 \n",
" गांधीनगर | राष्ट्रीय एकता दिवस पर \\nसोम दिन गु... \n",
" Politics \n",
" \n",
" \n",
" 3 \n",
" गुजरात केर मोरबी मे रवि दिन सांझ भेल दर्दनाक द... \n",
" Politics \n",
" \n",
" \n",
" 4 \n",
" गुजरातक मोरबी\\nकेर उक्त झुलैत पुल \\nलगभग 150 स... \n",
" Politics \n",
" \n",
" \n",
" ... \n",
" ... \n",
" ... \n",
" \n",
" \n",
" 15465 \n",
" । मांस काठमांडू।नेपालगुंज में लक्ष्मी अंतरसंचा... \n",
" Economy \n",
" \n",
" \n",
" 15466 \n",
" । ३१ जुलाई काठमाण्डू।टाटा मोटर्स के आधिकारिक व... \n",
" Economy \n",
" \n",
" \n",
" 15467 \n",
" । १३ अप्रैल काठमाण्डू।कोरियाई मोटर्स कंपनी ग्र... \n",
" Economy \n",
" \n",
" \n",
" 15468 \n",
" । आसंजन काठमाण्डू।स्पोर्ट्स हैचबैक तसेया त्याट... \n",
" Economy \n",
" \n",
" \n",
" 15469 \n",
" । ३ काठमाण्डू।आईएमएस मोटर्स काठमांडू के बैंक म... \n",
" Economy \n",
" \n",
" \n",
"
\n",
"
15470 rows × 2 columns
\n",
"
\n",
"
\n",
"
\n"
]
},
"metadata": {},
"execution_count": 4
}
],
"source": [
"dftr = pd.read_csv(\"/content/drive/MyDrive/merged_data.csv\")\n",
"dftr = dftr.dropna()\n",
"dftr = dftr.reset_index(drop=True)\n",
"dftr"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "7czIovIJzRvF",
"outputId": "c2e7b66a-a58b-4ee8-ff25-771f41fe903c"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Culture 3192\n",
"Literature 2758\n",
"Politics 2594\n",
"Sports 2210\n",
"Entertainment 1078\n",
"Opinion 992\n",
"EduTech 784\n",
"Economy 693\n",
"Health 636\n",
"Interview 533\n",
"Name: Category, dtype: int64"
]
},
"metadata": {},
"execution_count": 5
}
],
"source": [
"dftr['Category'].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"id": "i1-80czNzRvG"
},
"outputs": [],
"source": [
"dftr.Text = dftr.Text.astype(str)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "GzYd_Boe3D9C",
"outputId": "47e14ba8-db0c-4cde-a8de-4e83dc461af6"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[K |████████████████████████████████| 5.5 MB 15.1 MB/s \n",
"\u001b[K |████████████████████████████████| 182 kB 67.1 MB/s \n",
"\u001b[K |████████████████████████████████| 7.6 MB 54.7 MB/s \n",
"\u001b[?25h"
]
}
],
"source": [
"! pip install transformers -q"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"id": "JskBUBgU0XY5"
},
"outputs": [],
"source": [
"from transformers import AutoModel,AutoTokenizer\n",
"import torch\n",
"import torch.nn.functional as F\n",
"from tqdm import tqdm"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"id": "htnqPsYk0YMd"
},
"outputs": [],
"source": [
"def mean_pooling(model_output, attention_mask):\n",
" token_embeddings = model_output.last_hidden_state.detach().cpu()\n",
" input_mask_expanded = (\n",
" attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()\n",
" )\n",
" return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(\n",
" input_mask_expanded.sum(1), min=1e-9\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"id": "4tpCHL360qu_"
},
"outputs": [],
"source": [
"BATCH_SIZE = 16\n",
"\n",
"class EmbedDataset(torch.utils.data.Dataset):\n",
" def __init__(self,df):\n",
" self.df = df.reset_index(drop=True)\n",
" def __len__(self):\n",
" return len(self.df)\n",
" def __getitem__(self,idx):\n",
" text = self.df.loc[idx,\"Text\"]\n",
" tokens = tokenizer(\n",
" text,\n",
" None,\n",
" add_special_tokens=True,\n",
" padding='max_length',\n",
" truncation=True,\n",
" max_length=MAX_LEN,return_tensors=\"pt\")\n",
" tokens = {k:v.squeeze(0) for k,v in tokens.items()}\n",
" return tokens\n",
"\n",
"ds_tr = EmbedDataset(dftr) # <-----------------------------------------> mind your head\n",
"#ds_tr = EmbedDataset(train) # for emoji makes sense\n",
"embed_dataloader_tr = torch.utils.data.DataLoader(ds_tr,\\\n",
" batch_size=BATCH_SIZE,\\\n",
" shuffle=False)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"id": "-pN9dF9P0wpA"
},
"outputs": [],
"source": [
"tokenizer = None\n",
"MAX_LEN = 640\n",
"\n",
"def get_embeddings(MODEL_NM='', MAX=640, BATCH_SIZE=4, verbose=True):\n",
" global tokenizer, MAX_LEN\n",
" DEVICE=\"cuda\"\n",
" model = AutoModel.from_pretrained( MODEL_NM,from_tf=True ) #TRue for TF.h5 model\n",
" tokenizer = AutoTokenizer.from_pretrained( MODEL_NM )\n",
" MAX_LEN = MAX\n",
"\n",
" model = model.to(DEVICE)\n",
" model.eval()\n",
" all_train_text_feats = []\n",
" for batch in tqdm(embed_dataloader_tr,total=len(embed_dataloader_tr)):\n",
" input_ids = batch[\"input_ids\"].to(DEVICE)\n",
" attention_mask = batch[\"attention_mask\"].to(DEVICE)\n",
" with torch.no_grad():\n",
" model_output = model(input_ids=input_ids,attention_mask=attention_mask)\n",
" sentence_embeddings = mean_pooling(model_output, attention_mask.detach().cpu())\n",
" #sentence_embeddings = max_pooling(model_output, attention_mask.detach().cpu()) #max pooling\n",
" # Normalize the embeddings\n",
" sentence_embeddings = F.normalize(sentence_embeddings, p=2, dim=1)\n",
" sentence_embeddings = sentence_embeddings.squeeze(0).detach().cpu().numpy()\n",
" all_train_text_feats.extend(sentence_embeddings)\n",
" all_train_text_feats = np.array(all_train_text_feats)\n",
" if verbose:\n",
" print('Train embeddings shape',all_train_text_feats.shape)\n",
"\n",
" return all_train_text_feats"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"id": "3KrBlZ732Qk9"
},
"outputs": [],
"source": [
"from transformers import AutoTokenizer, AutoModelForMaskedLM"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 237,
"referenced_widgets": [
"e96896658b654eed8b968404645d0ce2",
"18a4c50558434e0290dd7146a4fbfecf",
"84a98a576e0249a59849cc30c7224f20",
"e40536cd305045b0bb8aeecfd21cb956",
"1b15bace409c4f4089f40a856b6e1338",
"74e25a277d244040ae97abc9dde27f68",
"eba06679f61f457b8de2817c7450ef24",
"0b340f8a07e04471ac8ce7c17c61acba",
"4c87386df89a4157bf67851ad066bb94",
"f5ebefe5c7274db7b81dc329742a55e9",
"6fc5465c7f69419ebe26ac752133676f",
"4fcccd4ec6e54e608b823a93a59ac2b6",
"a5ca839581e6414fba8dc778b5cf2cb9",
"a6dbe20598484fcd9f13675e697dfc7b",
"74f5680b28364d34a98ab4261563fc12",
"cbdb3c1dcc984f67a5856137830afe9c",
"4633fec68037492c92effc18055964e2",
"3b1fbd3a31f3422aa249db2d1c933a65",
"bd2a23d5260345279fbf87befba2e5c8",
"6a2ed2b29770404a851a069f2a78c5da",
"bd8042817a254f35a6ff1c52c70cead2",
"f1a13f54dc4f48f8a613f522485755e1",
"c40ed648d38545e390bee2431c5a707a",
"ee7cfc940c804296894abe79e31ecbe6",
"bc50f92e9d0d48bba21f16541fc37ed9",
"fe96466bdfcb41739954dc0270571406",
"69a754c07e454149aaa42ea63971f249",
"1ca2e994552f43558ee18ea4f832d2ec",
"b15d86eff02147bea51624bc82f94a7d",
"ccc737848a20419684a47c4dff68dc8a",
"aad77fce445540cfbe295df700107b6a",
"d7bce53523fd4cafb20182edcd405533",
"b6b326e3fe1148b29c5570b742e8b8c6"
]
},
"id": "0MTqTCpZzRvO",
"outputId": "88d2aa13-88d2-4a11-b9a7-dd2f0fab696d"
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"config.json: 0%| | 0.00/652 [00:00, ?B/s]"
],
"application/vnd.jupyter.widget-view+json": {
"version_major": 2,
"version_minor": 0,
"model_id": "e96896658b654eed8b968404645d0ce2"
}
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"tf_model.h5: 0%| | 0.00/534M [00:00, ?B/s]"
],
"application/vnd.jupyter.widget-view+json": {
"version_major": 2,
"version_minor": 0,
"model_id": "4fcccd4ec6e54e608b823a93a59ac2b6"
}
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"All TF 2.0 model weights were used when initializing BertModel.\n",
"\n",
"All the weights of BertModel were initialized from the TF 2.0 model.\n",
"If your task is similar to the task the model of the checkpoint was trained on, you can already use BertModel for predictions without further training.\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"vocab.txt: 0%| | 0.00/547k [00:00, ?B/s]"
],
"application/vnd.jupyter.widget-view+json": {
"version_major": 2,
"version_minor": 0,
"model_id": "c40ed648d38545e390bee2431c5a707a"
}
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"100%|██████████| 967/967 [17:21<00:00, 1.08s/it]\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"Train embeddings shape (15470, 768)\n"
]
}
],
"source": [
"MODEL_NM = 'NepBERTa/NepBERTa'\n",
"all_train_text_feats = get_embeddings(MODEL_NM, MAX=512)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"id": "E8yPCU5G04hq"
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "vmSeX8WN1ry_",
"outputId": "d245bd98-7d63-427f-ec36-f89012ae5c87"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(15470, 768)"
]
},
"metadata": {},
"execution_count": 13
}
],
"source": [
"all_train_text_feats.shape"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "LeMhjb2F9q_w",
"outputId": "caba3635-13d6-41f6-b135-aa4e31c3ce78"
},
"outputs": [
{
"data": {
"text/plain": [
"-0.028025214"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#all_train_text_feats[12999]"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"id": "voKcCn3k14ST"
},
"outputs": [],
"source": [
"len(all_train_text_feats)\n",
"X_train = all_train_text_feats"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "qF6rs8VS7bHg",
"outputId": "decc601d-02b8-46e6-9177-1e27da5caf28"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(15470, 768)"
]
},
"metadata": {},
"execution_count": 18
}
],
"source": [
"X_train.shape"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"id": "VdvRXyPNAZt7"
},
"outputs": [],
"source": [
"del all_train_text_feats"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "m-z0aMQOBhai"
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "Cverw_6bBpZs"
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "AtbLAHZc8Blt",
"outputId": "1c07aed2-dfb0-41a9-89d0-bc3574d512a1"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(15470,)"
]
},
"metadata": {},
"execution_count": 15
}
],
"source": [
"y_train = dftr['Category']\n",
"y_train.shape"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"id": "0oDPFqEk8sE0"
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"id": "6_VI6HH_8-1n"
},
"outputs": [],
"source": [
"#y_train = y_train[:12240]\n",
"#y_train.shape"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"id": "0nByk9Fw0up8"
},
"outputs": [],
"source": [
"Y_train = y_train\n",
"del y_train"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"id": "W4gcGuhS-YQ8"
},
"outputs": [],
"source": [
"from sklearn.model_selection import train_test_split\n",
"\n",
"x_train, x_test, y_train, y_test = train_test_split(X_train,Y_train,test_size=0.2,random_state=42)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "CI1suRpH-w8V",
"outputId": "c3f24f19-99b7-4f91-d903-d48de3cf68b1"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"((12376, 768), (12376,))"
]
},
"metadata": {},
"execution_count": 22
}
],
"source": [
"x_train.shape, y_train.shape"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "RPOs6N7BA84A",
"outputId": "d0c94b27-6888-4157-ee2e-15e4c69329c5"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"F1 Score : 0.7307692307692306\n"
]
}
],
"source": [
"from sklearn.svm import LinearSVC\n",
"from sklearn.metrics import f1_score\n",
"from sklearn.metrics import confusion_matrix\n",
"from sklearn.multioutput import MultiOutputClassifier\n",
"clf=LinearSVC(penalty='l2')\n",
"clf.fit(x_train, y_train) # training model on train data\n",
"\n",
"clfval = clf.predict(x_test) # predicting test data\n",
"print('F1 Score : {}'.format(f1_score(y_test, clfval, average='micro'))) # printing F1 score\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "5RfaiI3O82CX"
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"id": "uy8HXUK2A9qd",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "d31cabd2-2af7-4544-a5ce-d9f525390e1b"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"F1 Score : 0.7960568842921784\n"
]
}
],
"source": [
"from sklearn.svm import SVC\n",
"\n",
"clf=SVC(kernel='rbf',gamma = 15,degree = 3, random_state=0)\n",
"clf.fit(x_train, y_train) # training model on train data\n",
"\n",
"clfval = clf.predict(x_test) # predicting test data\n",
"print('F1 Score : {}'.format(f1_score(y_test, clfval, average='micro'))) # printing F1 score\n"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "EcehuVHICpNF",
"outputId": "4a6e0690-8f27-498f-97a4-b2b9cc061a26"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"F1 Score : 0.7773109243697479\n"
]
}
],
"source": [
"from sklearn.linear_model import LogisticRegression\n",
"lrr=LogisticRegression(solver='saga', n_jobs=1, C=1e5)\n",
"lrr.fit(x_train, y_train)\n",
"lrrval = lrr.predict(x_test)\n",
"print('F1 Score : {}'.format(f1_score(y_test, lrrval, average='micro')))"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "AV82YWVUCxzt",
"outputId": "1e72c563-097b-4191-b274-2e09bfd29485"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"F1 Score : 0.04880413703943116\n"
]
}
],
"source": [
"from sklearn.linear_model import Perceptron\n",
"\n",
"percept = Perceptron(alpha=1000, tol=1e-6, penalty='l2', random_state=1, max_iter=3000)\n",
"percept = percept.fit(x_train, y_train)\n",
"\n",
"cpfval = percept.predict(x_test)\n",
"print('F1 Score : {}'.format(f1_score(y_test, cpfval, average='micro')))"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "qK4ynXBlCp0f",
"outputId": "e3db1c98-33e9-4a57-edb6-b6f8a9c3ef02"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"F1 Score : 0.7020038784744667\n"
]
}
],
"source": [
"from sklearn.ensemble import RandomForestClassifier\n",
"\n",
"clf = RandomForestClassifier(random_state=2,max_features='sqrt',class_weight='balanced')\n",
"clf.fit(x_train, y_train)\n",
"\n",
"pred=clf.predict(x_test)\n",
"print('F1 Score : {}'.format(f1_score(y_test, pred, average='micro')))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "y9wYb8D5DA4O"
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "rKiAyl36DB4h",
"outputId": "a1800be3-5448-460d-cbd0-57f43d46c175"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"[LightGBM] [Info] Auto-choosing col-wise multi-threading, the overhead of testing was 0.223792 seconds.\n",
"You can set `force_col_wise=true` to remove the overhead.\n",
"[LightGBM] [Info] Total Bins 195840\n",
"[LightGBM] [Info] Number of data points in the train set: 12376, number of used features: 768\n",
"[LightGBM] [Info] Start training from score -1.586355\n",
"[LightGBM] [Info] Start training from score -3.128248\n",
"[LightGBM] [Info] Start training from score -2.985763\n",
"[LightGBM] [Info] Start training from score -2.673583\n",
"[LightGBM] [Info] Start training from score -3.158213\n",
"[LightGBM] [Info] Start training from score -3.332205\n",
"[LightGBM] [Info] Start training from score -1.743339\n",
"[LightGBM] [Info] Start training from score -2.722783\n",
"[LightGBM] [Info] Start training from score -1.783391\n",
"[LightGBM] [Info] Start training from score -1.930197\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
"[LightGBM] [Warning] Stopped training because there are no more leaves that meet the split requirements\n",
"F1 Score : 0.31221719457013575\n"
]
}
],
"source": [
"from lightgbm import LGBMClassifier\n",
"\n",
"model = LGBMClassifier(n_estimators = 150,learning_rate=0.5)\n",
"model.fit(x_train, y_train)\n",
"\n",
"pred=model.predict(x_test)\n",
"print('F1 Score : {}'.format(f1_score(y_test, pred, average='micro')))"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 947
},
"id": "G7kKf9gFL4N0",
"outputId": "affa0de7-a0d0-4232-b0de-7c6ac717b43d"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
" precision recall f1-score support\n",
"\n",
" Culture 0.28 0.80 0.42 659\n",
" Economy 0.36 0.33 0.34 151\n",
" EduTech 0.20 0.03 0.04 159\n",
"Entertainment 0.25 0.41 0.31 224\n",
" Health 0.09 0.05 0.06 110\n",
" Interview 0.12 0.08 0.09 91\n",
" Literature 0.28 0.01 0.02 593\n",
" Opinion 0.24 0.10 0.14 179\n",
" Politics 0.59 0.24 0.34 514\n",
" Sports 0.47 0.33 0.39 414\n",
"\n",
" accuracy 0.31 3094\n",
" macro avg 0.29 0.24 0.22 3094\n",
" weighted avg 0.34 0.31 0.26 3094\n",
"\n"
]
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
""
]
},
"metadata": {},
"execution_count": 29
},
{
"output_type": "display_data",
"data": {
"text/plain": [
""
],
"image/png": "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GWlzTGhoqBo3biwvLy8FBgZqyJAhSklJSVMWCikAAAAAACBD27x5s/r27audO3dq3bp1Sk5OVv369RUfH289ZuDAgVq+fLkWLlyozZs369KlS2revLl1/+3bt9W4cWMlJSVp+/btmjVrlmbOnKkRI0akKQuz9gAAAAAAAKdLTExUYmKizTYPDw95eHjcc+zq1attXs+cOVOBgYEKCQlRjRo1FBMTo+nTp2vevHmqXbu2JGnGjBkqUaKEdu7cqcqVK2vt2rU6cuSIfvvtNwUFBalMmTL68MMPNXToUI0aNUru7u525WZECgAAAAAAJmZ0C88/LcHBwfL397dZgoOD7fo7xcTESJJy5MghSQoJCVFycrLq1q1rPaZ48eIqUKCAduzYIUnasWOHnnnmGQUFBVmPadCggWJjY3X48GG7/lyJESkAAAAAAMAAw4YN06BBg2y23W80yv+XmpqqN998U1WrVlWpUqUkSREREXJ3d1f27Nltjg0KClJERIT1mLuLKH/t/2ufvSikAAAAAAAAp/unNp4H6du3r/78809t3bo1HVI9GK09AAAAAACYmMUlYy4Po1+/flqxYoU2btyofPnyWbfnzp1bSUlJun79us3xkZGRyp07t/WY/z+Lz1+v/zrGHhRSAAAAAABAhmaxWNSvXz8tXbpUGzZsUOHChW32lytXTm5ublq/fr112/HjxxUaGqoqVapIkqpUqaJDhw4pKirKesy6devk5+enkiVL2p2F1h4AAAAAAJCh9e3bV/PmzdMvv/wiX19f6zNN/P39lS1bNvn7+6tr164aNGiQcuTIIT8/P/Xv319VqlRR5cqVJUn169dXyZIl1aFDB40fP14RERF677331Ldv3zS1GFFIAQAAAADAxFKNDuAA06ZNkyS98MILNttnzJih119/XZI0adIkZcmSRS1atFBiYqIaNGigL7/80nps1qxZtWLFCvXu3VtVqlSRt7e3OnXqpA8++CBNWSikAAAAAACADM1isTzwGE9PT02dOlVTp079x2MKFiyoVatW/acsPCMFAAAAAADAToxIAQAAAADAxMzQ2pORMCIFAAAAAADAThRSAAAAAAAA7ERrDwAAAAAAJvbgx7QiLRiRAgAAAAAAYCcKKQAAAAAAAHaitQcAAAAAABNLdTE6gbkwIgUAAAAAAMBOFFIAAAAAAADsRGsPAAAAAAAmlmp0AJNhRAoAAAAAAICdKKQ8wPe/hajMm1M1fskW67auny9VmTen2ixjFmyy7j9+MVrvzFqrBqNmqdKQr/TK2Hmau/mAAenNo2ePjtobsk5Xoo/pSvQxbfl9mRo0qGV0LFM7fny7EhPC7lkmfzbG6Gim1GtAZ52J3qf3xwyWJOXNn0dnovfdd2nYrK7Bac2Da0v6e75qBc1f+K2On9qh2Pgzatykns1+b28vTfxklI6e2KbI6CPatWeNunRtZ1Bac+J6nr4GDOqh1RsX6vSFEB0+tU0z536hIkUL2xxTsHB+zZjzuQ6f3q5TYXv0zcxJypUrp0GJzaFatYpavPh7nTmzWwkJoWratP49x4wYMUhnz+7RtWsntGrVPBUpUsj5QU3kQdfz2Pgz910GvNndoMRA+qG151/8GRqpRdsPq9jj937RNa9SUn0aVrS+9nR3s64fDYvSY77Z9FH7usqd3UcHzkXow/mblDWLi9pUL+2U7GZz4WK43h0erFOnzsrFxUUdOrTSksXfq0LFBjpy5ITR8UypatUmypo1q/X1008/pV9X/ajFS1YYmMqcSj9XUm07tdDRP/8+l8MvRqpiSduCSduOLdS9X0dtXr/N2RFNi2tL+vP29tKfh45q9g8LNe+nr+7ZP3bccNWsWUXduw5S6PkLql2nuj797AOFh0fq11XrDUhsPlzP01eVqhU049t52r/3kLK6ZtW7IwZq/tLvVKNSE928eUteXtm0YOl0Hf7zmFo2fV2SNHT4AM2eP00N67wqi8Vi7F/gEeXl5aVDh45o1qz5WrDg23v2v/VWb/Xp01ndug3SuXNhGjlysFasmKMyZeooMTHRgMSPvgddz4s+UdHmdb36L2jql+O07OfVzoqIf0Frj2NRSPkHNxOT9O7sdRrxai19u3bPPfs93VwV4Od93/e+XLmkzet8Af46cC5C6w+eoZDykFauXGfzesSIj9WzRwdVqliWf+ykk+joqzavhwzuo9Onz+n333calMicvLyzadJXY/XuwA/V961u1u2pqamKjrpic2z9RrW06ud1uhl/y9kxTYtrS/pbt3az1q3d/I/7K1Uuq3lzl2jrlj8kSTNn/KTOXduqfPlnKaQ4CNfz9NW2he1v29/oPUxHzuxQ6TJPa+f2PapQuazyF8irOtVfUdyNeElS/97v6MT5Xapes7J+37TDiNiPvLVrN2nt2k3/uL9fv64aN+5zrVhx5zrftetAhYaGqFmz+lq4cLmTUprLg67nUZHRNq8bN66r33/fqXPnwtI7GuB0tPb8g7GLflf1koVU+an8993/a8gJvTB8ulqM+1FTlu/QraTkf/15cbeS5O/lmR5RM50sWbKodetm8vb20s4/QoyOkym4ubmpbdvmmjlrvtFRTGf0x8O0cd0Wbfv9j389rtSzJfR06eJaMPdn5wTLhLi2GOOPnXvVqHFd5ckTJEmqXqOyihYtrPXrtzzgnXgYXM/Tn6+/ryTp+rUYSZKHu7ssFouSEpOsxyQmJCo1NVUVK5czJKPZFS5cQHnyBGrDhq3WbbGxN7R7935VqsRn7gy5AgPU4MVamj1rgdFRgHSRphEpe/fu1WOPPabChe/0fc6ePVtfffWVQkNDVbBgQfXr109t2rR54M9JTEy8Z0idh4eHPDw80hIn3azee1LHLlzW3EGt7ru/YblievwxX+Xy99aJS9GavHyHzl2+rk+7NLzv8fvPhmvtvlOa0qNxesY2vVKlimvL78vk6emhuLh4tWzVTUePnjQ6VqbQrFkDZc/up9mzFxodxVSavNJApUoX10v12j/w2NavvayTx89o726et+RoXFuMNeSt0ZryxUc6fmqHkpOTlZqaqgH93tX2bbuNjmZKXM/Tl4uLi8YEv6s/doTo2P+uIyG79+tm/C29P3qwxn4wSS4uLnpv1FtydXVVUO5cBic2p6CgO59rVJTtCInIyGjrPqSvdq81V9yNeC37hbaejIImQsdK04iUzp076/Tp05Kk7777Tj179lT58uU1fPhwVahQQd27d9f333//wJ8THBwsf39/myU4OPjh/gYOFnHthsYv2aKxHerJw+3+daaWzz+t50sU0JOP51Tj8k9pzGt1teHgGYVFx9xz7KnwKxr43Sr1fLGCni9eIL3jm9rx46dVvkJ9Va3aRF9/84O+n/6ZSpR40uhYmULn19tozZqNCg+PNDqKaeR5PEgjPhqigb2G2/yW8n48PD3UrEVDRqOkE64txurZu6MqVHhOrVt2U41qL2n4sLGa+OlovVCrqtHRTInrefoa98kIPVXiSfXsMsi67cqVa+r2+puq37CWzlzaq5Nhu+Xn76sD+w8rNZWnFsCcOnRopQXzf1HiA+5xgEdVmkaknDx5Uk8+eefm8ssvv9TkyZPVvfvffaEVKlTQRx99pC5duvzrzxk2bJgGDRpksy2jjEY5EnZZV+Nuqe3Ev4eh3U61aO+ZS5q/9ZB2TeylrFls60/PFLwzHDnscozyB/hbt5+OuKoeU39R8+efVvf65Z3zFzCx5ORknT59TpK0d98hlS9XRv37dVOfvkONDWZyBQrkVe3a1fTqqz2MjmIqpZ4toYDAnFq2YZ51m6urqypWKasO3V5V8ccrWW+wGzatK89snlo6nwdDpgeuLcbx9PTQyFGD9Vqb3lqzZqMk6fCfx/RM6ZIa8EY3bdrIg5Udiet5+ho74X3Va/CCXm7UXuGXbAtVmzdsU6Uy9ZUjR3al3L6t2JgbOnRii37m2RHpIjLysiQpMDBAERFR1u1BQQE6cOCIUbEyjSrPV1Cxp4ro9U79jY4CpJs0FVK8vLwUHR2tggUL6uLFi6pY0fbJzJUqVdLZs2cf+HMyUhvP/1epWD4tGmrbnjRi3gYVDsquznXK3lNEkaRjF+8MGwzw97JuOxV+RT2m/qKmFYurf+PK6Rs6k8qSJYs8PNyNjmF6HTu2VlRUtFb9ykMfHWn7ll16sVpLm23jPx+t0yfP6uspM21+S9m6/ctav3qzrl655uyYmRLXFudxc3OTu7u7Ui22v5W/ffu2stzn+xb/Ddfz9DN2wvtq1KSuXmncUaHnL/7jcVevXpckVatRSQG5cmrNqo1OSpi5nD0bqvDwKNWqVVUHD94pnPj6+qhChTL65pvZBqczv46dWmnv3kP689Axo6PgLqkuRicwlzQVUho2bKhp06bpu+++U82aNbVo0SI9++yz1v0LFixQ0aJFHR7Smbw93VU0j+10x9ncXeXv5amieXIqLDpGv4acULWSBeXv5amT4Vc0celWlSvyuIo9HiDpThGl+9Rf9Hzx/OrwwrOKjr3zhPYsWbIoh082p/+dzGDMmHe0evVGhYVdlK+vj9q0eVk1a1ZRo8btjI5mai4uLurYsbXmzFmk27dvGx3HVOLjburEsdM2227evKXrV2NsthcsnF8Vq5RVlzb8Vic9cG1Jf97eXnqiSEHr60KF8uuZ0iV07WqMLly4pC2/79SHH72jW7cSFBZ6UVWrV1Lbds317jsfGZjafLiep59xn4xQ85ZN1KldX8XFxStX4J37wRuxN5SQcOeZgG1ea66Tx08r+spVla9QRmM+Hq6vp87S6VMP/gUk7s/b20tFihSyvi5UKL9Kly6pa9euKyzskr74YrreeWeATp06p3PnQjVy5GCFh0dp2bK1xoV+xD3oei7dKVi9/EojDR821qiYgFOkqZDy8ccfq2rVqqpZs6bKly+vTz75RJs2bVKJEiV0/Phx7dy5U0uXLk2vrBmCW9Ys+uPEBc3dfEC3klIUlN1HdZ4tYtO6s27/aV2Lu6WVe05o5Z6/p8/M85ivfh3Z0YjYj7zAXAGa8f1k5ckTqJiYGzp06KgaNW7HrA7prE6d6ipYIJ9mMbuDYVq1e0kRlyK1ZSPTY6YHri3p77myz2jV6h+tr4M/fk+SNHfOIvXu+bY6vz5Ao0a/re++n6THHsuusNCL+mD0J5r+3VyjIpsS1/P007nbncLrz6tsRzoM6D1M8+fduS8u+mQhDR85UNkf81dY6CV9NvErfT11prOjmkq5cqW1du3frfgTJoyUJM2evVDdu7+lTz6ZJm/vbJo6NVjZs/tp+/Y9atq0wz0TXsB+D7qeS1KLlk3k4uKiRUwxDZNzsVgsaXqA7/Xr1zVu3DgtX75cZ86cUWpqqvLkyaOqVatq4MCBKl/+vz0L5NavU/7T+2GfbA0HWNfd3PMamCTzSE76e6ivh+f9p9WGYyUm/N17/kTAcwYmyTzORO+zrnNtcY67ry1+3k8YmCTziI0/Y13neu4cd1/Pg/yLG5gk84iM+bstw9OTCROcISEh1LrO9dw57r6em924gg+eJdII75yfY3SEh5KmESmSlD17do0bN07jxo1LjzwAAAAAAAAZFk9yAwAAAAAAsFOaR6QAAAAAAIBHR5qe54EHYkQKAAAAAACAnSikAAAAAAAA2InWHgAAAAAATCyV5h6HYkQKAAAAAACAnSikAAAAAAAA2InWHgAAAAAATCzV6AAmw4gUAAAAAAAAO1FIAQAAAAAAsBOtPQAAAAAAmBhz9jgWI1IAAAAAAADsRCEFAAAAAADATrT2AAAAAABgYsza41iMSAEAAAAAALAThRQAAAAAAAA70doDAAAAAICJpboYncBcGJECAAAAAABgJwopAAAAAAAAdqK1BwAAAAAAE0uVxegIpsKIFAAAAAAAADtRSAEAAAAAALATrT0AAAAAAJgYjT2OxYgUAAAAAAAAO1FIAQAAAAAAsBOtPQAAAAAAmFiq0QFMhhEpAAAAAAAAdqKQAgAAAAAAYCdaewAAAAAAMLFU5u1xKEakAAAAAAAA2MnFYrFQmgIAAAAAwKSGFmprdIT7+vjcj0ZHeCi09gAAAAAAYGKMnnAsWnsAAAAAAADslOFGpHQu1MLoCJnCjHOLretu7nkNTJJ5JCddtK678pk7Rcpdn7mnZwEDk2QeCQmh1nXOc+e4+zx398hnYJLMIynxgnWd89w57j7P/byfMDBJ5hEbf8a6zr2ic9x9r+jhmd/AJJlHYkKY0RHwiMpwhRQAAAAAAOA4qUYHMBlaewAAAAAAAOxEIQUAAAAAAMBOtPYAAAAAAGBiqczb41CMSAEAAAAAALAThRQAAAAAAAA70doDAAAAAICJ0djjWIxIAQAAAAAAsBOFFAAAAAAAADvR2gMAAAAAgImlGh3AZBiRAgAAAAAAYCcKKQAAAAAAAHaitQcAAAAAABOzMG+PQzEiBQAAAAAAwE4UUgAAAAAAAOxEaw8AAAAAACbGrD2OxYgUAAAAAAAAO1FIAQAAAAAAsBOtPQAAAAAAmFgqs/Y4FCNSAAAAAAAA7EQhBQAAAAAAwE609gAAAAAAYGI09jgWI1IAAAAAAADsRCEFAAAAAADATrT2AAAAAABgYsza41iMSAEAAAAAALAThRQAAAAAAAA70doDAAAAAICJpRodwGQYkQIAAAAAAGAnCikAAAAAAAB2orUHAAAAAAATszBrj0MxIuU+ilUsqTe+G6ZP//hWM84t1nP1K9rsf+nN1hq7foq+OjJXXxyYpcFzRuqJMk/aHOPt76Men72hLw/N1tSDP6jzx33k4eXpzL+GqfTs0VF7Q9bpSvQxXYk+pi2/L1ODBrWMjmVq1atV0s9LZyr0XIhSki6qWbMGRkcynWrVKmrx4u915sxuJSSEqmnT+vccM2LEIJ09u0fXrp3QqlXzVKRIIecHzQR69+qkUyd2Ki72tLZvXa4K5csYHcnUHn88t2bOmKLwS4cUc/2U9ob8prJlSxsdy7S4nqe/56tW0PyF3+r4qR2KjT+jxk3q2ez39vbSxE9G6eiJbYqMPqJde9aoS9d2BqU1J+4Vne/48e1KTAi7Z5n82RijowHpjkLKfXh4eSjs6DnNGfHtffdHnrmkOSO+0/sNBmlsy/d05UKU3vrhffnm8LMe02PyG8pbLL8mdvhAn3UZq6cqltTrwb2c9VcwnQsXw/Xu8GBVqtxQlas00sZN27Rk8fcqWbKY0dFMy9vbSwcPHlH/N4YbHcW0vLy8dOjQEb355nv33f/WW73Vp09n9e8/TNWrN1N8/E2tWDFHHh4eTk5qbq1aNdPECSP14ZhPVaHSizpw8IhWrZyrXLlyGh3NlLJn99emjUuVnJysps066NkytfT20A90/XqM0dFMi+t5+vP29tKfh47qrYEj77t/7Ljhqluvhrp3HaQKZevpy6kzNPHTUWrYqI6Tk5oX94rOV7VqExUoWNa6NGzUVpK0eMkKg5MB6Y/Wnvs4tGmfDm3a94/7dy7bavP6xzEzVaNNXeUrXlBHtx9SniJ5VfqFshrd9G2dO3RakjRn1HcaOGO45n80S9ejrqVrfjNauXKdzesRIz5Wzx4dVKliWR05csKgVOa2es1GrV6z0egYprZ27SatXbvpH/f369dV48Z9rhUr7pz/XbsOVGhoiJo1q6+FC5c7KaX5DXyju76bPk+zflggSerT9x01alhHnV9vo/ETphqcznyGDO6jCxcuqXuPt6zbzp0LMzCR+XE9T3/r1m7WurWb/3F/pcplNW/uEm3d8ockaeaMn9S5a1uVL/+sfl213lkxTY17ReeLjr5q83rI4D46ffqcfv99p0GJ8G+YtcexGJHyH2V1c9ULbevpZmy8wo6ekyQVLfuU4mPirEUUSTqy9aAsqRY98dyT//CTYK8sWbKodetm8vb20s4/QoyOA6SLwoULKE+eQG3Y8HfhNjb2hnbv3q9KlcoZmMxc3NzcVLZsaa3fsMW6zWKxaP2Grapcmc85PTRpUk8hew/qx3lf6ULYfu36Y7W6dKHFAeb2x869atS4rvLkCZIkVa9RWUWLFtb69Vse8E48DO4Vnc/NzU1t2zbXzFnzjY4COEWaRqT0799frVu3VvXq1f/TH5qYmKjExESbbR4eHo/UcPVna5dTr88Hyj2bh2Kirmli+9GKu3ZDkuSXK7tio22HKKfeTlX89Tj553rMiLimUKpUcW35fZk8PT0UFxevlq266ejRk0bHAtJFUFAuSVJUVLTN9sjIaOs+/HcBATnk6uqqqEjbzzkq6rKKP1XEoFTmVrhwAfXs0UGTJ3+rjz/+XOXKl9GkTz9QclKSZs9ZZHQ8IF0MeWu0pnzxkY6f2qHk5GSlpqZqQL93tX3bbqOjmQr3isZp1qyBsmf30+zZC42OAjhFmkakTJ06VS+88IKKFSumjz/+WBEREQ/1hwYHB8vf399mCQ4OfqifZZSjO/7UyEaD9VGLd3Vo8371nvqWfHP6PfiNeGjHj59W+Qr1VbVqE339zQ/6fvpnKlGCET4A8CjJkiWL9u37U++P+Fj7DxzW9OlzNf37eerevYPR0YB007N3R1Wo8Jxat+ymGtVe0vBhYzXx09F6oVZVo6OZCveKxun8ehutWbNR4eGRRkfBP7Bk0P89qtLc2rN27Vo1atRIEydOVIECBfTSSy9pxYoVSk21v+tq2LBhiomJsVmGDRuW1iiGSrqVqKjzETqz76RmDP1SqSmpqvHqnQeGxV6+Lr8Af5vjs2TNIu/sPoq5zPNRHlZycrJOnz6nvfsO6b33xt15cF6/bkbHAtJFZORlSVLg/7V352FRlf//x18DyCKCSwqKG7iUu+ZGqC0aaWou5ZKpaallqZV7rriHW2YumZZbLqlpWh8rTc21XEBz3xXFFTQFAQWU4feH3yb5aTUazIHD83Fdc10z9zlMrznNdTvznnvxyZ+m3dc3v+0Y/rurV6/pzp078vFNe519fAroMtc5Q1y6FH3fL8RHj55Q0aKFDUoEZCx3dzcNG95XgwaM0ZqfftGhg0c1a+YCfbviB73/AZ9j0hOfFY1RrFhh1atXR3PnLjE6CuAwD11IqVixoiZPnqyLFy9q4cKFSkpKUvPmzVW0aFENHjxYJ0+e/NfncHNzk7e3d5pbVprW8yAWJ4tcXHNIkk7uOSbP3LlUvEIJ2/GytSrK4mTR6d8ZXphenJyc5ObmanQMIENERETq0qVo1b3n10ovr1yqUaOKdjLfO93cvn1be/bsV726dWxtFotF9erW0Y4dXOeMsH17uB5/vESattKlSygy8rxBiYCMlSNHDrm6usqamvZHx5SUFDk5sVxhRuKzomN06NBa0dFX9eNPLJyM7OORd+3JkSOHWrdurdatWysyMlJz5szRvHnzNHbsWKWkpKRnRodzy+kuH/+CtscFivqoaDl/JcTEK/56nJr0aKHf14cpNjpGufJ66fkOLypvwXwK+2G7JOnSqQvav2mP3hz7ruYPnilnF2e1H9FFu/73Kzv2PKLRowdozZqNOnfugry8cqlNm+Z69tkgNWrMAoUZxdMzp0qVCrA9DvAvpsqVy+vates6d+6igcnMw9Mzp0qW9Lc99vcvqkqVyun69RidO3dR06bN1oAB7+vkyTM6cyZSw4b11aVL0fr++5+NC21Cn3z6hebO/kS79+xXWNjvev+9t+Tp6cGCeRnk0ylfaMvmVfqwfw8tX7FaNapXUZfO7dSt24dGRzMt+vOM5+mZUyVKFrc99vcvqoqVyur6tVidP39RW7fs0KgxA3TrVqLORV5Q7acD9VrbVzRowBgDU5sLnxWNYbFY1KFDay1cuDzLfwc0O3btSV+W1NRUuycmOTk56fLly/Lx8Xng8dTUVK1fv14vvPDCIwd607/FI/9tenniqfIasGTkfe3blm/U/MEz9c6nPVWiSmnlyuut+Jg4ndl/Uv+bulwR+//apcczdy61H9lFlZ+vrlSrVbvX7NCi4XOUdDPRkS/lb809s8J2P4dr5h9OPWvmRNWtW0eFCvkoNjZOBw4c0YSJ07PUave3ky/Y7rtkgWv+7DNB2rD+/oUf53+1TJ279DIg0cO7c881d3cvZmCSB3vmmaf088/L7mtfsOAbvfXW3a1hQ0J6q1OntsqTx1u//Rau998frJMnIxwd1W6JiZG2+1nhff6nbu++oT6931XBggW0b98h9ewVol1hvxsdyy73vs9d3YoYmMR+jRo9r9GjBqpUKX+dOXNOkz/9QnPmLDY6lt2Sk/4aPZMV3udm68+9PUv8w5nGqPN0oH5c8/V97YsWLte7XfvLxze/ho/or3rP11HevHl0LvKC5s5doulTZxuQ1j43Ek7b7vNZ0THu/azo5l7UwCT2Cw5+Rj+sXqQKFZ7RiUz8+eTvJCWeMzqCw3TMBN+zH2T+Pd9Ls5KHKqQEBAQoPDxcjz32WIYFygyFlOwgqxVSzCCrFVLMILMXUswoqxZSsrKsWEjJ6rJaIcUMMnshxYyyWiHFDLJiISWro5BivKxaSHmoqT0REVmvyggAAAAAQHZmtX/8BOzAClcAAAAAAAB2opACAAAAAABgp0fetQcAAAAAAGR+TOxJX4xIAQAAAAAAsBOFFAAAAAAAADsxtQcAAAAAABOzMrknXTEiBQAAAAAAwE4UUgAAAAAAAOzE1B4AAAAAAEwslak96YoRKQAAAAAAAHaikAIAAAAAAGAnpvYAAAAAAGBiVqMDmAwjUgAAAAAAAOxEIQUAAAAAAMBOTO0BAAAAAMDErOzak64YkQIAAAAAAGAnCikAAAAAAAB2YmoPAAAAAAAmlsrUnnTFiBQAAAAAAAA7UUgBAAAAAACwE1N7AAAAAAAwMavRAUyGESkAAAAAAAB2opACAAAAAABgJ6b2AAAAAABgYqmp7NqTnhiRAgAAAAAAYCcKKQAAAAAAAHZiag8AAAAAACZmFVN70hMjUgAAAAAAAOxEIQUAAAAAAMBOTO0BAAAAAMDErEYHMBlLKvsgAQAAAABgWk2KvWR0hAf6X+RqoyM8Eqb2AAAAAAAA2ImpPQAAAAAAmFgqu/akq0xXSDlZroHREbKFUofX2u7n8yptYJLs41rcCdt9F9fCBibJPu4kX7Ddd3cvZmCS7CMxMdJ2n77FMe7tW1zdihiYJPtITjpvu09/7hj39uc5uOYOcfuea962+MsGJsk+Fp9dabtfJF8FA5NkH+evHTQ6ArIopvYAAAAAAADYiUIKAAAAAAAmZlVqprw9rC1btqhJkyby8/OTxWLRqlWr0hxPTU1VSEiIChUqJA8PDwUHB+vEiRNpzrl27ZratWsnb29v5cmTR507d1Z8fPxD5aCQAgAAAAAAMr2EhARVrlxZ06dPf+Dx8ePHa8qUKfr888+1c+dOeXp6qkGDBkpMTLSd065dOx06dEjr1q3T6tWrtWXLFr399tsPlSPTrZECAAAAAADMLykpSUlJSWna3Nzc5Obm9sDzGzZsqIYNGz7wWGpqqiZPnqwhQ4aoWbNmkqSvvvpKvr6+WrVqldq0aaMjR45ozZo1CgsLU/Xq1SVJU6dOVaNGjTRx4kT5+fnZlZsRKQAAAAAAmFhqamqmvIWGhip37txpbqGhoY/0GiMiInT58mUFBwfb2nLnzq3AwEBt375dkrR9+3blyZPHVkSRpODgYDk5OWnnzp12/7cYkQIAAAAAABxu4MCB6t27d5q2vxuN8m8uX74sSfL19U3T7uvrazt2+fJl+fj4pDnu4uKifPny2c6xB4UUAAAAAADgcP80jSczY2oPAAAAAAAmZs2kt/RUsGBBSVJUVFSa9qioKNuxggULKjo6Os3xO3fu6Nq1a7Zz7EEhBQAAAAAAZGkBAQEqWLCgNmzYYGu7ceOGdu7cqaCgIElSUFCQYmJitHv3bts5v/zyi6xWqwIDA+3+bzG1BwAAAAAAZHrx8fE6efKk7XFERIT27t2rfPnyqVixYurZs6dGjx6t0qVLKyAgQEOHDpWfn5+aN28uSSpbtqxefPFFvfXWW/r88891+/Zt9ejRQ23atLF7xx6JQgoAAAAAAKaWqlSjI6SL8PBw1a1b1/b4z4VqO3bsqHnz5ql///5KSEjQ22+/rZiYGNWpU0dr1qyRu7u77W8WLVqkHj166Pnnn5eTk5NatGihKVOmPFQOCikAAAAAACDTe+6555Sa+vdFIYvFopEjR2rkyJF/e06+fPm0ePHi/5SDNVIAAAAAAADsxIgUAAAAAABMzGqSqT2ZBSNSAAAAAAAA7EQhBQAAAAAAwE5M7QEAAAAAwMT+aYFWPDxGpAAAAAAAANiJQgoAAAAAAICdmNoDAAAAAICJsWtP+mJECgAAAAAAgJ0opAAAAAAAANiJqT0AAAAAAJhYKlN70hUjUgAAAAAAAOxEIQUAAAAAAMBOTO0BAAAAAMDErKlM7UlPjEgBAAAAAACwE4UUAAAAAAAAOzG1BwAAAAAAE2NiT/piRAoAAAAAAICdKKQAAAAAAADYiULK/yfvW6+qyNIpKhG2Uv5bl6rg1GHK4V8kzTnO+fPKZ2w/+W/5WiXCv1OR5dPk+UId23GPGpVU6vDaB97cKjzu6JeU5fTs01XrN63Q2Yu/69jpHVrw9WcqVTrgb89ftuJLXYs7oUYvBTswpfk9XSdQq1bOU+SZ3bqTfEFNmzYwOpLp1KlTUytWzNHp02FKTIxUkyb17zsnJKS3IiLCdf36cf3442KVLOnv+KAmYU/fMunTUdq9b4MuRB/Q8YidWrhkhko/XsKgxOY0dEhvJSedT3M7sH+T0bFMjf7c8bq+3UF7dq/TH1eP6o+rR7V1y/dq0KCu0bGytDI1y6nv7EGavmu2Fp9dqer1a9qOObs4q82A1zV27WTNOfK1pu+arXcnva88Pnlt5+QvUkBvje+uyds+17xjS/TJlhlq0auNnHOw0oE9Xn/zVa3b+q2OnN2hI2d36Lu1C1U3+K/vPwV8HtOnM0K158gmHT+3Sz9tXKZGTfhsnplYlZopb1kVhZT/j3v1Sor9+n86/1pPXewyUBYXZ/l9+ZEsHm62c3xD+8nVv6gudR+uyOZdlbDuVxWcNEiuZUtKkm7tPayIZ9qkucV+85Nun7ukpIPHjXppWUbt2jU1+4tFalCvlV5p+oZy5MihFavmKmdOj/vOfbf7G0plK68M4emZU/v3H9Z7Hww2Oopp5cyZUwcOHFbPnkMeeLxPn3fVrdubeu+9gXr66aZKSLip1asXys3N7YHn45/Z07fs23tQPboN0FPVX1TL5m/KYrFoxaq5cnLin8v0dOjQURUt9qTt9lzdl42OZGr05453/sIlDRocqsCnGuqpoEbauOlXfbtijsqV4we1R+WW011nj5zR3KGz7jvm6uGmgAoltHLKMg1u3EefdB2nQiUKq+/sQbZz/EoWkZPFotkDZ6h/8AdaMHKOgts10Kv92znyZWRZly5eVuiIT9Sobms1qveqft2yS7MXTtXjZe5+/5k8I1QlS/mrU7seCq7zin5avV4z5nys8hXLGJwcyBiUYP8/l7qm/ZARNehjlfh1mdzKlVbi7oOSJPcny+nKiKlKOnBMknR95tfK0/EVuZcrreQjp6Tbd5Ry9fpfT+LiLM96QYpd9J3DXkdW1uqVzmked3/nQ52I2KnKT1bQ9l/DbO0VKpZV9/c6q94zL+voqe2Ojml6a9Zu1Jq1G42OYWo//7xJP/+86W+P9+jRWWPHTtXq1eskSZ0791Jk5G41bVpf33zzPwelNA97+pb5c5fajp+LvKAxIz/Rth2rVax4EZ2JiHRoXjO7cydFUVFXjI6RbdCfO94PP6xL8zgkZJy6vv26AmtW1eHD/Kj2KPZt2qN9m/Y88NituJsKbT8iTdu8kC80+n8T9Jhffv1x8ar2b/5d+zf/bjsefS5KP3zxnYLbN9DiMfMzNLsZrF+7Oc3j8WOmqEOnV1W1emUdP3pK1WtU0aC+o7R3z93vS1M+nqW33u2gSlXK69CBo0ZEBjIUP7H9C2cvT0mSNTbO1pb4+2HlavisnHJ7SRaLcjV8VhZXV90K2//A5/CsGyTnPF66sfJnh2Q2G2/vXJKkmGsxtjYPD3d9MWeS+vUZrujoqwYlAzJOQEAxFSrko19+2WZru3EjTmFhexUYWM3AZObxoL7lXjlzeqhd+xY6E3FOF85fcmAy8ytVKkBnIsJ19Oivmj9vqooW9TM6EpBhnJyc1Lp1U3l65tSOnbuNjpNt5PTKKavVqps3Ev72HA+vnIqPiXdgKnNwcnJS01cayiOnh3aH7ZUkhYftVZOXX1SePN6yWCxq+kpDubm5avu2XcaGhY3RU3jMNrXnoUekTJs2Tbt27VKjRo3Upk0bLViwQKGhobJarXrllVc0cuRIubj889MmJSUpKSkpTZubm1vmG65usSj/gHd0a/dBJZ88a2u+3HuMCn48SCW2L1fq7TuyJibp0vsjdDvy4gOfxrtFA938dbdSovjC/7AsFos+GjdEO7aH68iRE7b2MWMHa9fOPfrphw0GpgMyjq9vAUm6r1AYFXXVdgyP7u/6Fknq1KWtho/qr1y5PHX8+Cm90uwN3b5926Ck5rMr7Hd16dJLx4+fVsFCPhoyuJd+2fCtnqz6vOLj//4LD5DVVKhQRlu3fC93dzfFxyeoZasu9/U3yBg53HLotYEdtP37rboVf+uB5/gWL6gGHRtpEaNR7FambGl9t3aR3NxdlZBwU2+9/oFOHDstSXr3zT76bM5EHTz9m27fvq1btxLVpUNPnYk4Z3BqIGM81IiU0aNHa9CgQbp586Z69eqlcePGqVevXmrXrp06duyoL7/8UqNGjfrX5wkNDVXu3LnT3EJDQx/5RWSUAkN7yLV0cV3umzZbvvc7ysk7ly50+lDnWr+nmPkrVHDSYLmW9r/vOZx98ytn7Wq6sWKtg1Kby4RJw1W2bGl1eaOXre3FRvX09DNPadCHYwxMBiAre1Df8qdvln2v5+o0U+MX2+rUyTOaM/9Tubm5GpDSnNau3agV3/6gAwePaN26zWrarIPy5PFWy5ZNjI4GpKtjx06peo36ql37Jc2c9ZXmzJ6ssmVLGx3L9JxdnPX+9L6SRZozeOYDz8nrm08ffhWinT/+po1L1j3wHNzv1MkINXi2hZq80FYL5izTJ5+NUekn7i7I3m9QD+XO7aVXm3dWo3pt9MVnX2nGnIkqw3seJvVQI1LmzZunefPm6ZVXXtG+fftUrVo1zZ8/X+3a3V2kqUyZMurfv79GjBjxj88zcOBA9e7dO01bZhuNkn9wd+V8NlAXOvRJM5LEpWgh5WnXTJFN37aNUkk+dloe1Soqd9umujJiSprn8X65vlJi4pSwkTU8Hta4iSFq8GJdNX6xrS5evGxrf+aZIAWUKKaI82mHx85fOE3bfwtX00btHR0VSHd/rh/h45Nfly9H29p9ffNr377DRsUyhb/rW/4UdyNecTfidfrUWYXv2qvT58LVuEl9fbt8tQFpzS829oZOnDitUuxIBZO5ffu2Tp06I0na8/sBVa9WRe/16KJu3T80NpiJ/VlEyV+4gMa8NuyBo1Hy+OTVkCWjdGL3UX05YIYBKbOu27fv2EaYHNh3WJWfLK/OXdtrxpS5evPtdqpXq5mOHz0lSTpy6JhqPlVVHbu8poF9RhoZG/+HDTrS10MVUi5evKjq1atLkipXriwnJydVqVLFdrxq1aq6ePHB01vulSmn8dwj/+DuyhVcSxfe6Kc7F6LSHHNyv5s71WpN+0cpKZLFct9zeb9cX3Hfr5fupGRYXjMaNzFEjZu8oKaN2ivy7Pk0xyZPmqkF85elaft1148aPOAjrfnpF0fGBDJMRESkLl2KVt26tbV//93CiZdXLtWoUUWzZi0wOF3W9U99y4NYLBZZLBZGpGQgT8+cKlHCX4sWf2t0FCBDOTk50ZdkoD+LKAUD/DS6zVDFx8Tdd05e33wasmSUIg6c0ud9p/HF8j9ycnKSq6urPDzcJUlWa9rrmWK1ysnp/u9HgBk8VCGlYMGCOnz4sIoVK6YTJ04oJSVFhw8fVvny5SVJhw4dko+PT4YEdZQCQ3soV+O6utRjuKwJt+Sc/+7+89a4BKUmJSs54pySz16Qz/APdHXCF0qJuaFcz9eSR62qiukWkua5PJ6qohxFC+nG8jVGvJQsa8Kk4WrZqonatXlX8XEJ8vHJL+nuQpuJiUmKjr76wAVmz5+/aNcXI9jH0zOnSpUKsD0O8C+mypXL69q16zp37t8Lpvh3np45VfKeX+H9/YuqUqVyun49RufOXdS0abM1YMD7OnnyjM6cidSwYX116VK0vv+ehasfxb/1LcX9i+rlFo20ccM2Xb16TYULF9QHvbsqMTFR69ZuMja8iYwdO0Q//LBekZHnVaiQr0JC+iglJUVLl64yOppp0Z873ujRA7RmzUadO3dBXl651KZNcz37bJAaNW5rdLQsyy2nuwr6F7Q9LlDUV8XL+Ss+Jl4x0df1wYz+CqhQQhM6jZGTs5NyF8gjSYqPiVfK7TvK65tPQ5eO0tULV7RozDx5P+Zte67YKzEOfjVZz4ChPbVx/VZdOH9JuXJ5qnnLxgqqU0PtWnbVyRMRijh1VmMnhWh0yERdvxarBo3r6ZnngvRGm+5GRwcyxEMVUtq1a6cOHTqoWbNm2rBhg/r376++ffvqjz/+kMVi0ZgxY9SyZcuMyuoQuV+7O0e7yFcT07RHDZqouFXrpDspuvTOED3Wq7MKTR8hp5weuh15UdEDJ+rmlrA0f+P9you6teeQbrPI0kPp/NbdqWKr1yxK0979nQ/19SJ+sXSU6tUqa8P65bbHH08cLkma/9Uyde5y/7oSeHjVqlXSzz//NbpqwoRhkqQFC77RW2/10ccfz5Cnp4emTw9Vnjze+u23cDVp8vp9i3XDPv/WtyQlJikoqLre6faG8uTx1pXoP/Tbr2F6MfhVXb16zYjIplSkcCEt+GqaHnssr65cuabfftulp59pyjXOQPTnjudTIL/mzvlUhQr5KDY2TgcOHFGjxm21YcNWo6NlWSUqldTQpaNtj18P6SRJ2vzNL1oxeYmq168pSRq75pM0fzfq1SE6suOQKj5dWQUD/FQwwE/Td81Oc07b4i9ncPqsL3+BfJo84yP5+BZQ3I04HTl0XO1adtXWTXeXL+jw6rsaOKyX5i6eLk9PD52JOKde3Qbrl/W85zOLrLxDTmZkSX2IMW1Wq1Vjx47V9u3bVatWLQ0YMEBLly5V//79dfPmTTVp0kTTpk2Tp6fnIwc6Wa7BI/8t7Ffq8F+L3+bzYhEoR7gW99dK/S6uhQ1Mkn3cSb5gu+/uXszAJNlHYmKk7T59i2Pc27e4uhUxMEn2kZz01+hH+nPHuLc/z8E1d4jb91xzCg2OsfjsStv9IvkqGJgk+zh/7aDRERympt+zRkd4oF0XNxsd4ZE81IgUJycnDRo0KE1bmzZt1KZNm3QNBQAAAAAAkBk9VCEFAAAAAABkLalM7UlXTkYHAAAAAAAAyCoopAAAAAAAANiJqT0AAAAAAJjYQ+wxAzswIgUAAAAAAMBOFFIAAAAAAADsxNQeAAAAAABMzMquPemKESkAAAAAAAB2opACAAAAAABgJ6b2AAAAAABgYuzak74YkQIAAAAAAGAnCikAAAAAAAB2YmoPAAAAAAAmxq496YsRKQAAAAAAAHaikAIAAAAAAGAnpvYAAAAAAGBiqUztSVeMSAEAAAAAALAThRQAAAAAAAA7MbUHAAAAAAATs6YytSc9MSIFAAAAAADAThRSAAAAAAAA7MTUHgAAAAAATIxde9IXI1IAAAAAAADsRCEFAAAAAADATkztAQAAAADAxNi1J30xIgUAAAAAAMBOFFIAAAAAAADsxNQeAAAAAABMjF170hcjUgAAAAAAAOxEIQUAAAAAAMBOltRUlu8FAAAAAMCsHi9Q3egID3T8SrjRER4JI1IAAAAAAADsRCEFAAAAAADATplu156O/i2MjpAtzD+zwnY/b65SBibJPq7Hn7Tdd3EtbGCS7ONO8gXb/WbFXjIwSfbxXeRq2/0cvM8d4vY973P6Fse4wzV3uHuvOX2LY9zbt7i7FzMwSfaRmBhpu9/Vv5WBSbKPmWe+MTqCw7BrT/piRAoAAAAAAICdKKQAAAAAAADYKdNN7QEAAAAAAOnHyma96YoRKQAAAAAAAHaikAIAAAAAAGAnpvYAAAAAAGBi7NqTvhiRAgAAAAAAYCcKKQAAAAAAAHZiag8AAAAAACaWmmo1OoKpMCIFAAAAAADAThRSAAAAAAAA7MTUHgAAAAAATMzKrj3pihEpAAAAAAAAdqKQAgAAAAAAYCem9gAAAAAAYGKpqUztSU+MSAEAAAAAALAThRQAAAAAAAA7MbUHAAAAAAATY9ee9MWIFAAAAAAAADtRSAEAAAAAALATU3sAAAAAADAxdu1JX4xIAQAAAAAAsBOFFAAAAAAAADsxtQcAAAAAABOzMrUnXTEiBQAAAAAAwE4UUgAAAAAAAOzE1B4AAAAAAEwsVUztSU+MSAEAAAAAALAThRQAAAAAAAA7MbUHAAAAAAATS2XXnnTFiBQAAAAAAAA7UUh5gCdqllPPLwdq8s4vNP/MClWtX9N2zNnFWa0HtNfoNZM06/AiTd75hd7++D3l8cmb5jl8Awrpgy8+1LQ9c/X5gQUa/M1olQmq4OiXkiX16vOONmz+VpGX9up4xE4t/HqGSpUOsB3Pkze3xk0M0a49P+vilYM6cGSLxk4YKm/vXAamNp+n6wRq1cp5ijyzW3eSL6hp0wZGR8ryytUsr8FzQjQ3bL6+i1ytwPpP3XdO297tNDf8Ky07vkIjF49WIX+/NMf9Avw06MshWrB3kb4+tEyhK8apYlBFR70E0+n6dgft2b1Of1w9qj+uHtXWLd+rQYO6RsfKFt59p6NOHt+h+Bun9Nu2/6lG9SpGRzIt+nPj9evXXbeTL+jjiSOMjmJquXJ5asKEYTp+/Dddv35cGzd+q2rVKhkdK8sqXbOsun/5ocbtnKmZZ75R5fo10hx/qWcrjdgwWVMOL9CkfXPVc+FQ+VcpleYcn4BCeveL/vp4z2xNPjBf/b4ZpceDyjvyZQAZgkLKA7jldNO5I2e0IOSL+465eripePkS+n7qcoW81E9T3xmvgiX91PPLAWnO6z17kJycnTWu7XANa9JfkUfOqPfsgcpdII+DXkXWVatOTX05a6Hq12ulV5p0VI4cLvr2u3nKmdNDklSokI8KFvJRyOCxqlWzkbq901/PBz+jKZ+NNTi5uXh65tT+/Yf13geDjY5iGu453XXm8GnNHPL5A4+/8m4LNX6ziWYMnK5+Tfso8Waihi8cqRxuOWznDJk7TM7OzhrSZrB6N+6pM4cjNGTuMOWhb3kk5y9c0qDBoQp8qqGeCmqkjZt+1bcr5qhcuceNjmZqrVo11cQJwzRq9CTVCHxR+/Yf1o8/LFKBAo8ZHc2U6M+NVb1aZb3Vpb327z9sdBTTmzFjvJ5//ml16tRT1aq9oA0bturHHxfLz8/X6GhZkmtON50/clZfh8x+4PGo05f0dchsjWzQRxNaDtUf56+o51dDlSuft+2cHrMHyNnZWZPajtBHTT7U+SNn1GP2AHnzucXhrErNlLesijVSHmD/pt+1f9PvDzx2K+6mJrw+Mk3bgpAvNfz78crnl1/XLl5VrrxeKljCT7M//Eznjp6VJH0zbqGCOzRU4ceLKfZKTEa/hCyt1cud0jzu9s6HOnlml6o8WUG//RqmI4dPqGO7HrbjZyIiNXrkJM388mM5OzsrJSXF0ZFNac3ajVqzdqPRMUxlz6bd2rNp998eb9K5mb6ZulS71u2UJE3uNUnzdy/UU/WDtPV/W+SV11uFSxTWtP5TdPboGUnSV2Pnq1HHl1T8ieKKoW95aD/8sC7N45CQcer69usKrFlVhw8fNyiV+fX64C19OXux5n+1TJLUrfsANWr4vN58o43GT5hucDrzoT83jqdnTs3/apreebe/Bg183+g4pubu7qaXX26oli27aNu2XZKk0aM/UaNGwXr77dc1fPhEgxNmPYc27dWhTXv/9njY99vSPP5m9HzVafO8ipQppqO/HZRnXi/5lvDTVx/O0IWjkZKkb8ct0nMdXpTf40V1g88tyMIeekTKpUuXFBISonr16qls2bIqX768mjRpotmzZ2fbL7AeXp6yWq26eSNBkhR/PU4XT11Q7VeelauHm5ycnVS3bX3FXonRmQOnDE6b9Xh7e0mSrl+P+cdz4uLis+17EFmfbzFf5fPJp33b9trabsbd1PG9x/REtTKSpLjrN3T+5DnVbVFPbv/XtzRo96JirlzXyQMnDUpuHk5OTmrduqk8PXNqx86/L3jhv8mRI4eqVq2kDb9stbWlpqZqwy/b9NRT1QxMBqS/qVM+0k8/btAv97zfkTFcXFzk4uKipKSkNO2JiYmqVavG3/wV0otzDhc9/Vqwbt5I0Lkjd39ITrgep8unLuipe74TPdP2Bd24EqPIA6cNTgz8Nw81IiU8PFzBwcEqVaqUPDw8dOLECbVt21bJycnq27ev5syZozVr1sjLy+sfnycpKem+Ts7NzU1ubm4P/woMlsMth14d0F47vt+mxPhbtvbx7Ybrg1kfauahhUq1purGH7Ga+MZoW7EF9rFYLAodN1g7fgvXkcMnHnhOvsfyqt+H3TV/7hIHpwPST94Cd9dZirkak6Y95mqM8t4z/DWk7RAN+nKIlhz5RqnWVMX+EaPhHYYpIZa+5VFVqFBGW7d8L3d3N8XHJ6hlqy46cuTB/Q3+u/z588nFxUXRUVfTtEdHX1GZJ0oalApIf61bN9WTT1bQU0GNjY6SLcTHJ2j79nANHPi+jh49qaioK3r11WYKDKyqU6fOGB3PtCrWq6ouU3vJ1cNVsdExmtx+lBKux9mOf9JupLrN6q9PD32lVGuq4v6I1ZQ3xvCdyADs2pO+HmpESs+ePdWrVy+Fh4dr69atmjdvno4fP64lS5bo9OnTunnzpoYMGfKvzxMaGqrcuXOnuYWGhj7yizCKs4uzuk/rI1ksmj9kVppjHUa9pRt/3NBHrYZoRLMPtefnXer1JWukPKyJnwxX2XKPq/MbPR943Msrl5Yu/0LHjp7U2DFTHBsOMEDX0e8q5mqsBrb8UH2b9taOtTs0ZE6I8v5/C17DfseOnVL1GvVVu/ZLmjnrK82ZPVlly5Y2OhaALKxIET9N+nikOnR8774fD5FxOnfuJYvFooiIMN24cVLdur2pZcu+k9VqNTqaaR3bfkijG/XT+BZDdGjzXr09vbe8HvtrjZTXRnW5+4NyqxCFNhuovT+HqfuXrJGCrO+hCil79uzR66+/bnvctm1b7dmzR1FRUcqbN6/Gjx+v5cuX/+vzDBw4ULGxsWluAwcOfPj0BnJ2cVb36X30WJECGt9+RJrRKOVqVVSVetX02XuTdGL3MZ09FKGvhn6h5MRk1WnJbhD2Gv/xMDV4sZ6aNGqvixcv33c8Vy5PLV85R/HxCWr/2ru6c+eOASmB9HH9ynVJUp78edK058mfR9f/bw5xpdqVVf35GprYY5yOhh/R6YOnNHPIDCUnJqtey+cdnNg8bt++rVOnzmjP7wc0ZMjYu4ty9uhidCzTunr1mu7cuSMf3/xp2n18Cuhy1BWDUgHpq2rVivL1LaBdO9fo1s2zunXzrJ59tpZ69OikWzfPysmJ/R4ywunTZ/XCC62VL98TKlXqKT39dFO5uORQRESk0dFMK/lWkq6cvayI309owYczlHInRbVfrSdJKlOrgirVq6Yv35usU7uP6dyhCH099EslJyYrqOVzxgYH/qOH6sV9fHx06dIl2+OoqCjduXNH3t53q46lS5fWtWvX/vV53Nzc5O3tneaWlab1/FlE8fUvpPHtRighJj7NcVePu68l1Zp2+FSq1SqLxeKwnFnZ+I+HqXGTF9S0cXtFnj1/33Evr1xa8d08Jd++rbatuyopKdmAlED6iYqM0rXoa6pUu4qtzSOXhx6v8oSO7T4qSXKjb3EIJycnubm5Gh3DtG7fvq09e/arXt06tjaLxaJ6detoxw7WpoE5/PLLNlV5sp6q16hvu4WH79XXX69U9Rr1GSGRwW7evKXLl6OVJ09uvfDCM1q9et2//xHShZOTRS6ud3cb/PvvRKly4nOLw1lTUzPlLat6qDVSmjdvrnfeeUcTJkyQm5ubRo0apWeffVYeHne3pT127JgKFy6cIUEdyS2nu3z9C9oeFyjqo2Ll/BUfE6/Y6OvqMaOvipcvoU86fyQnZyfbdJ34mHil3L6jk3uOKSE2QW99/J6+m7JMyYnJeq7NCypQ1Ef7NvIh8d9M/GSEWrZqorZt3lF8XIJ8fO7+annjRpwSE5NsRZScOd3VtUsfeXnlkpdXLkl3f+nkw0n68PTMqVKlAmyPA/yLqXLl8rp27brOnbtoYLKsyz2nuwr5F7I99i3qq4ByAYqLidfVi1f0v9nfqfX7r+rSmQuKioxS277tdS36mnb8vF2SdHT3USXExuuDSb209NMlSk5MUv3XGsinqK/Cfwk36mVlaaNHD9CaNRt17twFeXnlUps2zfXss0Fq1Lit0dFM7ZNPv9Dc2Z9o9579Cgv7Xe+/95Y8PT00b/5So6OZEv2548XHJ+jQoWNp2hISbuqPP67f1470Exz8jCwWi06cOK2SJf310UeDdOzYKc2fv8zoaFmSW053FbjnO1H+oj4qUs5fCTHxSrgep0Y9XtG+9eGKjb6uXHm99VyHBspTMJ92/3D3c8upPcd1MzZeb3zcXT9MWa7kxGQ93SZY+Yv66MDGPUa9LCBdWFIfYtWZ+Ph4de7cWd9++61SUlIUFBSkhQsXKiDg7j/OP//8s2JjY9WqVatHDtTRv8Uj/216KfNUeQ1cMvK+9q3LN2rV5KX6eNvnD/y70DYhOrrjkCTJv2JJtezXVgEVS8rZxVkXTpzTd1O++dttlR1t/pkVtvt5c5UyMMn9rsc/ePeRbl376+tF36r204Fa/dOiB55TqdyzOhd5ISPjPbJ7X5eLa+YvOD77TJA2rL9/qt78r5apc5deBiR6eHeS/3ovNCv2koFJ7qrwVEWNWXb/elAbvlmvKX0mS5La9m6n+m1flKe3p46EH9bngz/TxYi/vuiUqlRK7ft1UMlKpeTi4qLI45Fa+unX/7itsiN9F7nadj9HFnifz5o5UXXr1lGhQj6KjY3TgQNHNGHidG3YkHV22Lh9z/s8K/Qtf+r27hvq0/tdFSxYQPv2HVLPXiHaFZY5/o38N3ey2DU3W3+eFfqWB1m/7hvt23dYffoOMzqKXe7tW9zdixmYxH4tWrykUaM+VOHCBXXtWqxWrfpRw4ZN0I0bcf/+x5lAYuJfU5C6+j/696n08vhT5dRnyYj72n9bvkmLBs9Sl08/kH+V0sqV10sJMXE6s/+Ufpy6Qmf3/7VLafGKJdSs32sq/n/fiS6dOK/VU775x22VHWnmmW+MjuAw+bwy5/pv1+Ky5gL/D1VI+VNiYqLu3LmjXLlypXugzFBIyQ4ycyHFrLJaIcUMMlshJTvIaoUUM8iqhZSsLKsVUszADIWUrCYrFlKyusxWSMkOslMhJbN+5/u7H9Ezu4ea2vMnd3f39M4BAAAAAACQ6bFkOAAAAAAAgJ0eaUQKAAAAAADIGqzKujvkZEaMSAEAAAAAALAThRQAAAAAAAA7MbUHAAAAAAATe4TNevEPGJECAAAAAABgJwopAAAAAAAAdmJqDwAAAAAAJmZlak+6YkQKAAAAAACAnSikAAAAAAAA2ImpPQAAAAAAmFiqmNqTnhiRAgAAAAAAYCcKKQAAAAAAAHZiag8AAAAAACbGrj3pixEpAAAAAAAAdqKQAgAAAAAAYCem9gAAAAAAYGKpTO1JV4xIAQAAAAAAsBOFFAAAAAAAADsxtQcAAAAAABNLFVN70hMjUgAAAAAAAOxEIQUAAAAAAMBOTO0BAAAAAMDE2LUnfTEiBQAAAAAAwE4UUgAAAAAAAOzE1B4AAAAAAEyMqT3pixEpAAAAAAAAdqKQAgAAAAAAYCcKKQAAAAAAmFhqJr09iunTp8vf31/u7u4KDAzUrl27HvGZHh2FFAAAAAAAkOktXbpUvXv31rBhw7Rnzx5VrlxZDRo0UHR0tENzWFJZdQYAAAAAANNycS1sdIQHSog7raSkpDRtbm5ucnNze+D5gYGBqlGjhqZNmyZJslqtKlq0qN577z0NGDAgw/P+iREp/0FSUpKGDx9+3/94ZByuueNxzR2Pa+54XHPH45o7Htfc8bjmjsc1dzyuedZwJ/lCpryFhoYqd+7caW6hoaEPfA3JycnavXu3goODbW1OTk4KDg7W9u3bHXUpJTEi5T+5ceOGcufOrdjYWHl7exsdJ1vgmjse19zxuOaOxzV3PK6543HNHY9r7nhcc8fjmuO/SEpKsntEysWLF1W4cGH99ttvCgoKsrX3799fmzdv1s6dOzM8759cHPZfAgAAAAAA+D//NI0nM2NqDwAAAAAAyNTy588vZ2dnRUVFpWmPiopSwYIFHZqFQgoAAAAAAMjUXF1dVa1aNW3YsMHWZrVatWHDhjRTfRyBqT3/gZubm4YNG5YlhyJlVVxzx+OaOx7X3PG45o7HNXc8rrnjcc0dj2vueFxzOFLv3r3VsWNHVa9eXTVr1tTkyZOVkJCgN99806E5WGwWAAAAAABkCdOmTdOECRN0+fJlValSRVOmTFFgYKBDM1BIAQAAAAAAsBNrpAAAAAAAANiJQgoAAAAAAICdKKQAAAAAAADYiUIKAAAAAACAnSik/AfTp0+Xv7+/3N3dFRgYqF27dhkdybS2bNmiJk2ayM/PTxaLRatWrTI6kumFhoaqRo0a8vLyko+Pj5o3b65jx44ZHcvUZsyYoUqVKsnb21ve3t4KCgrSTz/9ZHSsbGXs2LGyWCzq2bOn0VFMa/jw4bJYLGluZcqUMTqW6V24cEHt27fXY489Jg8PD1WsWFHh4eFGxzItf3//+97nFotF3bt3NzqaaaWkpGjo0KEKCAiQh4eHSpYsqVGjRol9NTJWXFycevbsqeLFi8vDw0O1atVSWFiY0bGADEch5REtXbpUvXv31rBhw7Rnzx5VrlxZDRo0UHR0tNHRTCkhIUGVK1fW9OnTjY6SbWzevFndu3fXjh07tG7dOt2+fVv169dXQkKC0dFMq0iRIho7dqx2796t8PBw1atXT82aNdOhQ4eMjpYthIWFaebMmapUqZLRUUyvfPnyunTpku22bds2oyOZ2vXr11W7dm3lyJFDP/30kw4fPqyPP/5YefPmNTqaaYWFhaV5j69bt06S1KpVK4OTmde4ceM0Y8YMTZs2TUeOHNG4ceM0fvx4TZ061ehoptalSxetW7dOCxYs0IEDB1S/fn0FBwfrwoULRkcDMhTbHz+iwMBA1ahRQ9OmTZMkWa1WFS1aVO+9954GDBhgcDpzs1gsWrlypZo3b250lGzlypUr8vHx0ebNm/XMM88YHSfbyJcvnyZMmKDOnTsbHcXU4uPjVbVqVX322WcaPXq0qlSposmTJxsdy5SGDx+uVatWae/evUZHyTYGDBigX3/9VVu3bjU6SrbVs2dPrV69WidOnJDFYjE6jim99NJL8vX11ezZs21tLVq0kIeHhxYuXGhgMvO6deuWvLy89N1336lx48a29mrVqqlhw4YaPXq0gemAjMWIlEeQnJys3bt3Kzg42Nbm5OSk4OBgbd++3cBkQMaJjY2VdPeLPTJeSkqKlixZooSEBAUFBRkdx/S6d++uxo0bp+nXkXFOnDghPz8/lShRQu3atVNkZKTRkUzt+++/V/Xq1dWqVSv5+PjoySef1BdffGF0rGwjOTlZCxcuVKdOnSiiZKBatWppw4YNOn78uCRp37592rZtmxo2bGhwMvO6c+eOUlJS5O7unqbdw8ODkYYwPRejA2RFV69eVUpKinx9fdO0+/r66ujRowalAjKO1WpVz549Vbt2bVWoUMHoOKZ24MABBQUFKTExUbly5dLKlStVrlw5o2OZ2pIlS7Rnzx7mdDtIYGCg5s2bpyeeeEKXLl3SiBEj9PTTT+vgwYPy8vIyOp4pnT59WjNmzFDv3r01aNAghYWF6f3335erq6s6duxodDzTW7VqlWJiYvTGG28YHcXUBgwYoBs3bqhMmTJydnZWSkqKxowZo3bt2hkdzbS8vLwUFBSkUaNGqWzZsvL19dXXX3+t7du3q1SpUkbHAzIUhRQA/6p79+46ePAgvy44wBNPPKG9e/cqNjZWy5cvV8eOHbV582aKKRnk3Llz+uCDD7Ru3br7flFDxrj31+FKlSopMDBQxYsX17Jly5jClkGsVquqV6+ujz76SJL05JNP6uDBg/r8888ppDjA7Nmz1bBhQ/n5+RkdxdSWLVumRYsWafHixSpfvrz27t2rnj17ys/Pj/d5BlqwYIE6deqkwoULy9nZWVWrVtVrr72m3bt3Gx0NyFAUUh5B/vz55ezsrKioqDTtUVFRKliwoEGpgIzRo0cPrV69Wlu2bFGRIkWMjmN6rq6utl9xqlWrprCwMH366aeaOXOmwcnMaffu3YqOjlbVqlVtbSkpKdqyZYumTZumpKQkOTs7G5jQ/PLkyaPHH39cJ0+eNDqKaRUqVOi+YmzZsmW1YsUKgxJlH2fPntX69ev17bffGh3F9Pr166cBAwaoTZs2kqSKFSvq7NmzCg0NpZCSgUqWLKnNmzcrISFBN27cUKFChfTqq6+qRIkSRkcDMhRrpDwCV1dXVatWTRs2bLC1Wa1WbdiwgbUMYBqpqanq0aOHVq5cqV9++UUBAQFGR8qWrFarkpKSjI5hWs8//7wOHDigvXv32m7Vq1dXu3bttHfvXoooDhAfH69Tp06pUKFCRkcxrdq1a9+3ff3x48dVvHhxgxJlH3PnzpWPj0+ahTiRMW7evCknp7RfbZydnWW1Wg1KlL14enqqUKFCun79utauXatmzZoZHQnIUIxIeUS9e/dWx44dVb16ddWsWVOTJ09WQkKC3nzzTaOjmVJ8fHyaXysjIiK0d+9e5cuXT8WKFTMwmXl1795dixcv1nfffScvLy9dvnxZkpQ7d255eHgYnM6cBg4cqIYNG6pYsWKKi4vT4sWLtWnTJq1du9boaKbl5eV137o/np6eeuyxx1gPKIP07dtXTZo0UfHixXXx4kUNGzZMzs7Oeu2114yOZlq9evVSrVq19NFHH6l169batWuXZs2apVmzZhkdzdSsVqvmzp2rjh07ysWFj9wZrUmTJhozZoyKFSum8uXL6/fff9ekSZPUqVMno6OZ2tq1a5WamqonnnhCJ0+eVL9+/VSmTBm+E8H06NUf0auvvqorV64oJCREly9fVpUqVbRmzZr7FqBF+ggPD1fdunVtj3v37i1J6tixo+bNm2dQKnObMWOGJOm5555L0z537lwWzMsg0dHR6tChgy5duqTcuXOrUqVKWrt2rV544QWjowHp5vz583rttdf0xx9/qECBAqpTp4527NihAgUKGB3NtGrUqKGVK1dq4MCBGjlypAICAjR58mQW4cxg69evV2RkJF/kHWTq1KkaOnSounXrpujoaPn5+alr164KCQkxOpqpxcbGauDAgTp//rzy5cunFi1aaMyYMcqRI4fR0YAMZUlNTU01OgQAAAAAAEBWwBopAAAAAAAAdqKQAgAAAAAAYCcKKQAAAAAAAHaikAIAAAAAAGAnCikAAAAAAAB2opACAAAAAABgJwopAAAAAAAAdqKQAgAAAAAAYCcKKQAAAAAAAHaikAIAAAAAAGAnCikAAAAAAAB2+n94KPyV2IYT9gAAAABJRU5ErkJggg==\n"
},
"metadata": {}
}
],
"source": [
"from sklearn.metrics import classification_report\n",
"print(classification_report(y_test, pred))\n",
"import matplotlib.pyplot as plt\n",
"#countvector\n",
"import seaborn as sns\n",
"from sklearn.metrics import confusion_matrix\n",
"cf_matrix = confusion_matrix(y_test, pred)\n",
"fig, ax = plt.subplots(figsize=(15,10))\n",
"sns.heatmap(cf_matrix, linewidths=1, annot=True, ax=ax, fmt='g')"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "SNjAyQGcMJt0",
"outputId": "a5a8600b-3b38-46b3-9638-675fc0ec6369"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"F1 Score : 0.8093083387201034\n"
]
}
],
"source": [
"from sklearn.svm import SVC\n",
"clf=SVC(kernel='rbf',gamma = 10,C = 10, random_state=42)\n",
"clf.fit(x_train, y_train) # training model on train data\n",
"\n",
"clfval = clf.predict(x_test) # predicting test data\n",
"print('F1 Score : {}'.format(f1_score(y_test, clfval, average='micro'))) # printing F1 score"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 947
},
"id": "wF3oPRpHQy-1",
"outputId": "10784375-2781-44d1-f380-2e7c7187e615"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
" precision recall f1-score support\n",
"\n",
" Culture 0.79 0.78 0.78 659\n",
" Economy 0.83 0.90 0.86 151\n",
" EduTech 0.56 0.48 0.52 159\n",
"Entertainment 0.81 0.72 0.76 224\n",
" Health 0.75 0.71 0.73 110\n",
" Interview 0.90 0.80 0.85 91\n",
" Literature 0.80 0.82 0.81 593\n",
" Opinion 0.87 0.80 0.84 179\n",
" Politics 0.86 0.89 0.88 514\n",
" Sports 0.84 0.91 0.88 414\n",
"\n",
" accuracy 0.81 3094\n",
" macro avg 0.80 0.78 0.79 3094\n",
" weighted avg 0.81 0.81 0.81 3094\n",
"\n"
]
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
""
]
},
"metadata": {},
"execution_count": 31
},
{
"output_type": "display_data",
"data": {
"text/plain": [
""
],
"image/png": "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\n"
},
"metadata": {}
}
],
"source": [
"from sklearn.metrics import classification_report\n",
"print(classification_report(y_test, clfval))\n",
"import matplotlib.pyplot as plt\n",
"#countvector\n",
"import seaborn as sns\n",
"from sklearn.metrics import confusion_matrix\n",
"cf_matrix = confusion_matrix(y_test, clfval)\n",
"fig, ax = plt.subplots(figsize=(15,10))\n",
"sns.heatmap(cf_matrix, linewidths=1, annot=True, ax=ax, fmt='g')"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"id": "tMnrK8XpzRvY"
},
"outputs": [],
"source": [
"from sklearn.model_selection import KFold"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "OJdjIRNBXyur",
"outputId": "e0ff21e8-ef3a-45e5-dd9e-4a635c6cea66"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"F1 Score : 0.8093083387201034\n",
" precision recall f1-score support\n",
"\n",
" Culture 0.79 0.78 0.78 659\n",
" Economy 0.83 0.90 0.86 151\n",
" EduTech 0.56 0.48 0.52 159\n",
"Entertainment 0.81 0.72 0.76 224\n",
" Health 0.75 0.71 0.73 110\n",
" Interview 0.90 0.80 0.85 91\n",
" Literature 0.80 0.82 0.81 593\n",
" Opinion 0.87 0.80 0.84 179\n",
" Politics 0.86 0.89 0.88 514\n",
" Sports 0.84 0.91 0.88 414\n",
"\n",
" accuracy 0.81 3094\n",
" macro avg 0.80 0.78 0.79 3094\n",
" weighted avg 0.81 0.81 0.81 3094\n",
"\n",
"F1 Score : 0.826115061409179\n",
" precision recall f1-score support\n",
"\n",
" Culture 0.79 0.84 0.81 637\n",
" Economy 0.77 0.80 0.78 137\n",
" EduTech 0.66 0.56 0.60 153\n",
"Entertainment 0.82 0.75 0.78 221\n",
" Health 0.75 0.69 0.72 133\n",
" Interview 0.85 0.83 0.84 99\n",
" Literature 0.81 0.82 0.82 549\n",
" Opinion 0.95 0.79 0.86 206\n",
" Politics 0.88 0.92 0.90 496\n",
" Sports 0.86 0.91 0.89 463\n",
"\n",
" accuracy 0.83 3094\n",
" macro avg 0.82 0.79 0.80 3094\n",
" weighted avg 0.83 0.83 0.82 3094\n",
"\n",
"F1 Score : 0.8306399482870072\n",
" precision recall f1-score support\n",
"\n",
" Culture 0.81 0.81 0.81 649\n",
" Economy 0.84 0.83 0.83 141\n",
" EduTech 0.61 0.51 0.56 162\n",
"Entertainment 0.81 0.73 0.77 183\n",
" Health 0.75 0.69 0.72 118\n",
" Interview 0.90 0.81 0.85 110\n",
" Literature 0.80 0.83 0.82 539\n",
" Opinion 0.92 0.87 0.90 212\n",
" Politics 0.88 0.92 0.90 550\n",
" Sports 0.88 0.93 0.91 430\n",
"\n",
" accuracy 0.83 3094\n",
" macro avg 0.82 0.79 0.81 3094\n",
" weighted avg 0.83 0.83 0.83 3094\n",
"\n",
"F1 Score : 0.8180349062702004\n",
" precision recall f1-score support\n",
"\n",
" Culture 0.78 0.83 0.81 620\n",
" Economy 0.82 0.86 0.84 124\n",
" EduTech 0.58 0.47 0.52 152\n",
"Entertainment 0.80 0.74 0.77 211\n",
" Health 0.76 0.64 0.69 138\n",
" Interview 0.87 0.77 0.82 122\n",
" Literature 0.81 0.80 0.81 541\n",
" Opinion 0.89 0.80 0.84 207\n",
" Politics 0.86 0.92 0.89 535\n",
" Sports 0.86 0.91 0.88 444\n",
"\n",
" accuracy 0.82 3094\n",
" macro avg 0.80 0.78 0.79 3094\n",
" weighted avg 0.82 0.82 0.82 3094\n",
"\n",
"F1 Score : 0.8112475759534583\n",
" precision recall f1-score support\n",
"\n",
" Culture 0.78 0.79 0.79 627\n",
" Economy 0.87 0.80 0.83 140\n",
" EduTech 0.61 0.47 0.54 158\n",
"Entertainment 0.85 0.77 0.81 239\n",
" Health 0.81 0.64 0.71 137\n",
" Interview 0.90 0.80 0.85 111\n",
" Literature 0.78 0.81 0.79 536\n",
" Opinion 0.85 0.83 0.84 188\n",
" Politics 0.82 0.91 0.86 499\n",
" Sports 0.86 0.93 0.89 459\n",
"\n",
" accuracy 0.81 3094\n",
" macro avg 0.81 0.77 0.79 3094\n",
" weighted avg 0.81 0.81 0.81 3094\n",
"\n",
"F1 MEAN Score : 0.8190691661279896\n"
]
}
],
"source": [
"kfold = KFold(n_splits=5, shuffle=True, random_state=42)\n",
"\n",
"f1 = []\n",
"\n",
"for train_index, test_index in kfold.split(X_train):\n",
"\n",
" x_train, x_test = X_train[train_index], X_train[test_index]\n",
" y_train, y_test = Y_train[train_index], Y_train[test_index]\n",
" #print(x_train.shape, x_test.shape, y_train.shape, y_test.shape)\n",
" clf=SVC(kernel='rbf',gamma = 10,C = 10, random_state=42)\n",
" clf.fit(x_train, y_train)\n",
" clfval = clf.predict(x_test) # predicting test data\n",
" print('F1 Score : {}'.format(f1_score(y_test, clfval, average='micro')))\n",
" print(classification_report(y_test, clfval))\n",
" f1.append(f1_score(y_test, clfval, average='micro'))\n",
"print('F1 MEAN Score : {}'.format(np.mean(f1)))"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "xOK4rYxjiM4M",
"outputId": "9a4bc1ae-4a6c-4051-dba1-6303cba334b0"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"F1 Score : 0.8112475759534583\n"
]
}
],
"source": [
"from sklearn.svm import SVC\n",
"clf=SVC(kernel='rbf',gamma = 10,C = 10, random_state=42)\n",
"clf.fit(x_train, y_train) # training model on train data\n",
"\n",
"clfval = clf.predict(x_test) # predicting test data\n",
"print('F1 Score : {}'.format(f1_score(y_test, clfval, average='micro'))) # printing F1 score"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "HXZ7CJtSiVQw",
"outputId": "efa743ee-255c-4beb-f977-371412bc804c"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"F1 Score : 0.779896574014221\n"
]
}
],
"source": [
"from sklearn.linear_model import LogisticRegression\n",
"lrr=LogisticRegression(solver='saga', n_jobs=1, C=1e5)\n",
"lrr.fit(x_train, y_train)\n",
"lrrval = lrr.predict(x_test)\n",
"print('F1 Score : {}'.format(f1_score(y_test, lrrval, average='micro')))"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "yfDOHX5fitEa",
"outputId": "75625486-6b76-4cd0-863d-acd66b4ed156"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"F1 Score : 0.7776341305753071\n",
" precision recall f1-score support\n",
"\n",
" Culture 0.76 0.74 0.75 659\n",
" Economy 0.81 0.85 0.83 151\n",
" EduTech 0.51 0.40 0.45 159\n",
"Entertainment 0.76 0.75 0.76 224\n",
" Health 0.71 0.67 0.69 110\n",
" Interview 0.78 0.74 0.76 91\n",
" Literature 0.76 0.80 0.78 593\n",
" Opinion 0.76 0.73 0.75 179\n",
" Politics 0.86 0.89 0.87 514\n",
" Sports 0.83 0.86 0.84 414\n",
"\n",
" accuracy 0.78 3094\n",
" macro avg 0.75 0.74 0.75 3094\n",
" weighted avg 0.77 0.78 0.78 3094\n",
"\n",
"F1 Score : 0.8002585649644475\n",
" precision recall f1-score support\n",
"\n",
" Culture 0.78 0.80 0.79 637\n",
" Economy 0.73 0.80 0.76 137\n",
" EduTech 0.61 0.47 0.53 153\n",
"Entertainment 0.78 0.74 0.76 221\n",
" Health 0.75 0.67 0.71 133\n",
" Interview 0.75 0.73 0.74 99\n",
" Literature 0.77 0.80 0.78 549\n",
" Opinion 0.89 0.74 0.81 206\n",
" Politics 0.87 0.92 0.89 496\n",
" Sports 0.85 0.89 0.87 463\n",
"\n",
" accuracy 0.80 3094\n",
" macro avg 0.78 0.76 0.77 3094\n",
" weighted avg 0.80 0.80 0.80 3094\n",
"\n",
"F1 Score : 0.7892695539754362\n",
" precision recall f1-score support\n",
"\n",
" Culture 0.78 0.75 0.76 649\n",
" Economy 0.82 0.83 0.83 141\n",
" EduTech 0.58 0.40 0.47 162\n",
"Entertainment 0.71 0.73 0.72 183\n",
" Health 0.73 0.64 0.68 118\n",
" Interview 0.80 0.75 0.77 110\n",
" Literature 0.73 0.81 0.76 539\n",
" Opinion 0.88 0.77 0.82 212\n",
" Politics 0.85 0.91 0.88 550\n",
" Sports 0.85 0.91 0.88 430\n",
"\n",
" accuracy 0.79 3094\n",
" macro avg 0.77 0.75 0.76 3094\n",
" weighted avg 0.79 0.79 0.79 3094\n",
"\n",
"F1 Score : 0.7805429864253394\n",
" precision recall f1-score support\n",
"\n",
" Culture 0.75 0.79 0.77 620\n",
" Economy 0.77 0.80 0.79 124\n",
" EduTech 0.50 0.35 0.41 152\n",
"Entertainment 0.76 0.72 0.74 211\n",
" Health 0.73 0.57 0.64 138\n",
" Interview 0.88 0.71 0.79 122\n",
" Literature 0.74 0.77 0.76 541\n",
" Opinion 0.79 0.74 0.77 207\n",
" Politics 0.85 0.90 0.88 535\n",
" Sports 0.84 0.91 0.87 444\n",
"\n",
" accuracy 0.78 3094\n",
" macro avg 0.76 0.73 0.74 3094\n",
" weighted avg 0.78 0.78 0.78 3094\n",
"\n",
"F1 Score : 0.7802197802197802\n",
" precision recall f1-score support\n",
"\n",
" Culture 0.77 0.74 0.76 627\n",
" Economy 0.79 0.74 0.76 140\n",
" EduTech 0.52 0.36 0.43 158\n",
"Entertainment 0.78 0.76 0.77 239\n",
" Health 0.78 0.61 0.69 137\n",
" Interview 0.88 0.78 0.83 111\n",
" Literature 0.73 0.79 0.76 536\n",
" Opinion 0.82 0.81 0.81 188\n",
" Politics 0.81 0.89 0.85 499\n",
" Sports 0.84 0.90 0.87 459\n",
"\n",
" accuracy 0.78 3094\n",
" macro avg 0.77 0.74 0.75 3094\n",
" weighted avg 0.78 0.78 0.78 3094\n",
"\n",
"F1 MEAN Score : 0.785585003232062\n"
]
}
],
"source": [
"kfold = KFold(n_splits=5, shuffle=True, random_state=42)\n",
"\n",
"f1 = []\n",
"\n",
"for train_index, test_index in kfold.split(X_train):\n",
"\n",
" x_train, x_test = X_train[train_index], X_train[test_index]\n",
" y_train, y_test = Y_train[train_index], Y_train[test_index]\n",
" #print(x_train.shape, x_test.shape, y_train.shape, y_test.shape)\n",
" clf=LogisticRegression(solver='saga', n_jobs=1, C=1e5)\n",
" clf.fit(x_train, y_train)\n",
" clfval = clf.predict(x_test) # predicting test data\n",
" print('F1 Score : {}'.format(f1_score(y_test, clfval, average='micro')))\n",
" print(classification_report(y_test, clfval))\n",
" f1.append(f1_score(y_test, clfval, average='micro'))\n",
"print('F1 MEAN Score : {}'.format(np.mean(f1)))"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 652
},
"id": "wTSCOpD9kXYA",
"outputId": "aaf2cace-68c9-4a0d-c344-a3d104782321"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
""
]
},
"metadata": {},
"execution_count": 37
},
{
"output_type": "display_data",
"data": {
"text/plain": [
""
],
"image/png": "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ol27dmn79u2OIygoSD179tT27dsporhAcnKyjhw5In9/f7OjWFZoaOhN29cfPHhQVapUMSlRwTFnzhz5+flluRAncseVK1fk7p71o02hQoVks9lMSlSweHl5yd/fX5cuXdKaNWvUoUMHsyMBuYoZKTkUHh6usLAwBQUF6b777tOUKVOUkpKi3r17mx3NkpKTk7N8W/nbb79p+/btKlWqlCpXrmxiMuvq37+/Fi5cqC+//FLe3t46e/asJMnHx0eenp4mp7OmYcOGqVWrVqpcubIuX76shQsX6scff9SaNWvMjmZZ3t7eN133x8vLS6VLl+Z6QLlk8ODBateunapUqaIzZ85o1KhRKlSokLp37252NMsaNGiQmjZtqrfeektdu3bV1q1bNWPGDM2YMcPsaJZms9k0Z84chYWFqXBh3nLntnbt2mncuHGqXLmy6tatq19//VXvvPOO+vTpY3Y0S1uzZo3sdrtq1qypw4cP67XXXlOtWrX4TATL4696Dj355JM6d+6cRo4cqbNnz6pBgwZavXr1TReghXNs27ZNzZo1c9wODw+XJIWFhWnu3LkmpbK26dOnS5IefvjhLO1z5szhgnm5JCEhQb169VJcXJx8fHxUr149rVmzRo8++qjZ0QCnOXXqlLp3764LFy7I19dX999/v37++Wf5+vqaHc2yGjdurOXLl2vYsGH6z3/+o6pVq2rKlClchDOXff/99zpx4gQf5F3k/fff14gRI/Tiiy8qISFB5cuX13PPPaeRI0eaHc3SEhMTNWzYMJ06dUqlSpVSp06dNG7cOBUpUsTsaECucrPb7XazQwAAAAAAAOQHXCMFAAAAAADAIAopAAAAAAAABlFIAQAAAAAAMIhCCgAAAAAAgEEUUgAAAAAAAAyikAIAAAAAAGAQhRQAAAAAAACDKKQAAAAAAAAYRCEFAAAAAADAIAopAAAAAAAABlFIAQAAAAAAMOj/ARp3Kt3zhSE6AAAAAElFTkSuQmCC\n"
},
"metadata": {}
}
],
"source": [
"import seaborn as sns\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.metrics import confusion_matrix\n",
"cf_matrix = confusion_matrix(y_test, clfval)\n",
"fig, ax = plt.subplots(figsize=(15,10))\n",
"sns.heatmap(cf_matrix, linewidths=1, annot=True, ax=ax, fmt='g')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "iM8dSpKqZV-h"
},
"outputs": [],
"source": [
"# nepali BERT"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 255,
"referenced_widgets": [
"dd083e9312f34cfe8712574bd16c2520",
"54891ad613ed4f27bb3aa9be849132b1",
"007304dd7fb74a1b9d3b390f13e73a03",
"4298e20b35474077a0f872ddbc6db987",
"076956eb941c4cd6a402c1335aa3bba1",
"4b7ba118f59646e59cec9056ffcbcaa3",
"525d941c1e3541919bacb96f9adfdd91",
"821aa443392a4ac99d1adb7cc9138840",
"888b6d0488a649f7a4469b93f1bc7bc6",
"20b7ae08f2de4b86bda6c5f94054eb75",
"879f999eba754a20861a37fcb275c7e0",
"fe72571856854a17bf5df0b4ff3ff604",
"d7c45455a8e8445c929c8c83ab1f9fa1",
"748462ab70364e168c082c7573b52238",
"67fdea3f80f54b849854ec829e37d80b",
"7a1044e4ca444ae990d163dff600a113",
"f58360c8802b490fb23cb4a17a81911e",
"a42f03dc2a5849beb94666ff1648ff5b",
"020a891f78e14676b691abd046356725",
"0550c59aa57f40e094beae25cc5b0dc3",
"118705ff5aa84e59801ce43e13bf782f",
"23531ca8f9e14e7dbc8f1ab522131142",
"4528dd10b894401e98dcaf0dd547bf13",
"d7892059dc6048b0bfa8e18998125727",
"8664160808b0488bba20727074611c9f",
"e9f2d971371a4c5cac7c9eab4ec30d89",
"511fdf809305494ca560dd7a84e8f904",
"802d3e98e6b94a6881d3eb2f11ddb235",
"a360588788c34e59869144df00b459ec",
"a8395f7eabf54ffc8329dfed96cc400a",
"2f56fa2517b2460a8d432ea866b657dd",
"5253b2271568488da290f23826fa8979",
"ae16930d4b7e498e888c0b1a26ca9ecc"
]
},
"id": "UlN39Ni9ZVxc",
"outputId": "9076dee9-3bde-4651-b872-09487e2e77fc"
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "dd083e9312f34cfe8712574bd16c2520",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Downloading: 0%| | 0.00/589 [00:00, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "fe72571856854a17bf5df0b4ff3ff604",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Downloading: 0%| | 0.00/438M [00:00, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Some weights of the model checkpoint at Shushant/nepaliBERT were not used when initializing BertModel: ['cls.predictions.bias', 'cls.predictions.transform.LayerNorm.weight', 'cls.predictions.decoder.bias', 'cls.predictions.transform.LayerNorm.bias', 'cls.predictions.transform.dense.bias', 'cls.predictions.transform.dense.weight', 'cls.predictions.decoder.weight']\n",
"- This IS expected if you are initializing BertModel from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).\n",
"- This IS NOT expected if you are initializing BertModel from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\n",
"Some weights of BertModel were not initialized from the model checkpoint at Shushant/nepaliBERT and are newly initialized: ['bert.pooler.dense.weight', 'bert.pooler.dense.bias']\n",
"You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "4528dd10b894401e98dcaf0dd547bf13",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Downloading: 0%| | 0.00/529k [00:00, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 1531/1531 [07:06<00:00, 3.59it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train embeddings shape (13008,)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"MODEL_NM = 'Shushant/nepaliBERT'\n",
"all_train_text_feats = get_embeddings(MODEL_NM, MAX=512)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "uTZHO-YKZZz8",
"outputId": "2e5f0141-83f9-47ad-c14c-879e24b7fe77"
},
"outputs": [
{
"data": {
"text/plain": [
"(12240, 768)"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X_train = all_train_text_feats[:12240]\n",
"\n",
"X_tr = []\n",
"for arr in X_train:\n",
" X_tr.append(arr.reshape(768))\n",
"\n",
"X_train = np.array(X_tr)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "t9Ghp97gbaRH",
"outputId": "54576dfa-4def-4bec-db48-aaafdb33d299"
},
"outputs": [
{
"data": {
"text/plain": [
"((12240, 768), (12240,))"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Y_train = y_train\n",
"X_train.shape, Y_train.shape"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "53kSPyWPbmGC",
"outputId": "37d6bfec-eda2-4a0d-8e1d-d0713e98bca0"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"F1 Score : 0.5870098039215687\n",
" precision recall f1-score support\n",
"\n",
" 0 0.70 0.61 0.65 604\n",
" 1 0.52 0.97 0.68 809\n",
" 2 0.15 0.05 0.08 173\n",
" 3 0.64 0.34 0.44 219\n",
" 4 0.89 0.56 0.68 234\n",
" 5 0.61 0.14 0.22 148\n",
" 6 0.58 0.06 0.11 118\n",
" 7 0.87 0.34 0.48 143\n",
"\n",
" accuracy 0.59 2448\n",
" macro avg 0.62 0.38 0.42 2448\n",
"weighted avg 0.61 0.59 0.54 2448\n",
"\n",
"F1 Score : 0.6491013071895425\n",
" precision recall f1-score support\n",
"\n",
" 0 0.71 0.82 0.76 604\n",
" 1 0.61 0.98 0.75 809\n",
" 2 0.68 0.16 0.25 174\n",
" 3 0.62 0.38 0.47 218\n",
" 4 0.80 0.56 0.66 234\n",
" 5 0.38 0.08 0.13 148\n",
" 6 0.29 0.05 0.09 118\n",
" 7 0.77 0.34 0.47 143\n",
"\n",
" accuracy 0.65 2448\n",
" macro avg 0.61 0.42 0.45 2448\n",
"weighted avg 0.64 0.65 0.60 2448\n",
"\n",
"F1 Score : 0.6580882352941176\n",
" precision recall f1-score support\n",
"\n",
" 0 0.74 0.80 0.77 604\n",
" 1 0.61 0.97 0.75 808\n",
" 2 0.55 0.13 0.21 174\n",
" 3 0.64 0.47 0.54 218\n",
" 4 0.77 0.55 0.64 234\n",
" 5 0.50 0.14 0.22 149\n",
" 6 0.83 0.17 0.28 118\n",
" 7 0.71 0.33 0.45 143\n",
"\n",
" accuracy 0.66 2448\n",
" macro avg 0.67 0.45 0.48 2448\n",
"weighted avg 0.66 0.66 0.61 2448\n",
"\n",
"F1 Score : 0.6070261437908496\n",
" precision recall f1-score support\n",
"\n",
" 0 0.75 0.62 0.68 604\n",
" 1 0.56 0.95 0.71 808\n",
" 2 0.34 0.09 0.15 173\n",
" 3 0.58 0.47 0.52 219\n",
" 4 0.67 0.62 0.64 233\n",
" 5 0.50 0.17 0.25 149\n",
" 6 0.29 0.06 0.10 119\n",
" 7 0.75 0.29 0.42 143\n",
"\n",
" accuracy 0.61 2448\n",
" macro avg 0.55 0.41 0.43 2448\n",
"weighted avg 0.60 0.61 0.56 2448\n",
"\n",
"F1 Score : 0.5812908496732027\n",
" precision recall f1-score support\n",
"\n",
" 0 0.79 0.50 0.61 604\n",
" 1 0.51 0.98 0.67 808\n",
" 2 0.57 0.15 0.24 173\n",
" 3 0.57 0.41 0.47 219\n",
" 4 0.81 0.50 0.62 233\n",
" 5 0.46 0.17 0.25 149\n",
" 6 0.52 0.09 0.16 118\n",
" 7 0.61 0.42 0.49 144\n",
"\n",
" accuracy 0.58 2448\n",
" macro avg 0.61 0.40 0.44 2448\n",
"weighted avg 0.62 0.58 0.54 2448\n",
"\n",
"F1 MEAN Score : 0.6165032679738562\n"
]
}
],
"source": [
"import seaborn as sns\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.metrics import confusion_matrix\n",
"from sklearn.model_selection import StratifiedKFold\n",
"kfold = StratifiedKFold(n_splits=5)\n",
"\n",
"f1 = []\n",
"\n",
"for train_index, test_index in kfold.split(X_train, Y_train):\n",
"\n",
" x_train, x_test = X_train[train_index], X_train[test_index]\n",
" y_train, y_test = Y_train[train_index], Y_train[test_index]\n",
" #print(x_train.shape, x_test.shape, y_train.shape, y_test.shape)\n",
" clf=SVC(kernel='rbf',gamma = 10,C = 10, random_state=42)\n",
" clf.fit(x_train, y_train)\n",
" clfval = clf.predict(x_test) # predicting test data\n",
" print('F1 Score : {}'.format(f1_score(y_test, clfval, average='micro')))\n",
" print(classification_report(y_test, clfval))\n",
" f1.append(f1_score(y_test, clfval, average='micro'))\n",
"print('F1 MEAN Score : {}'.format(np.mean(f1)))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "MItgmLuTb-Im",
"outputId": "f310d14a-ee29-4962-8226-e590aafb2929"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"F1 Score : 0.6327614379084967\n",
" precision recall f1-score support\n",
"\n",
" 0 0.64 0.73 0.68 604\n",
" 1 0.61 0.95 0.74 809\n",
" 2 0.12 0.03 0.05 173\n",
" 3 0.61 0.47 0.53 219\n",
" 4 0.87 0.66 0.75 234\n",
" 5 0.50 0.07 0.13 148\n",
" 6 0.71 0.08 0.15 118\n",
" 7 0.79 0.36 0.50 143\n",
"\n",
" accuracy 0.63 2448\n",
" macro avg 0.61 0.42 0.44 2448\n",
"weighted avg 0.62 0.63 0.58 2448\n",
"\n",
"F1 Score : 0.6736111111111112\n",
" precision recall f1-score support\n",
"\n",
" 0 0.68 0.87 0.76 604\n",
" 1 0.67 0.98 0.80 809\n",
" 2 0.62 0.07 0.13 174\n",
" 3 0.58 0.49 0.53 218\n",
" 4 0.79 0.71 0.75 234\n",
" 5 0.25 0.03 0.06 148\n",
" 6 0.44 0.06 0.10 118\n",
" 7 0.71 0.28 0.40 143\n",
"\n",
" accuracy 0.67 2448\n",
" macro avg 0.59 0.44 0.44 2448\n",
"weighted avg 0.64 0.67 0.61 2448\n",
"\n",
"F1 Score : 0.6858660130718954\n",
" precision recall f1-score support\n",
"\n",
" 0 0.70 0.83 0.76 604\n",
" 1 0.67 0.96 0.79 808\n",
" 2 0.27 0.04 0.07 174\n",
" 3 0.62 0.60 0.61 218\n",
" 4 0.79 0.75 0.77 234\n",
" 5 0.62 0.11 0.18 149\n",
" 6 0.84 0.18 0.29 118\n",
" 7 0.75 0.36 0.48 143\n",
"\n",
" accuracy 0.69 2448\n",
" macro avg 0.66 0.48 0.49 2448\n",
"weighted avg 0.67 0.69 0.63 2448\n",
"\n",
"F1 Score : 0.6462418300653595\n",
" precision recall f1-score support\n",
"\n",
" 0 0.71 0.69 0.70 604\n",
" 1 0.65 0.96 0.78 808\n",
" 2 0.50 0.09 0.16 173\n",
" 3 0.47 0.52 0.50 219\n",
" 4 0.66 0.82 0.73 233\n",
" 5 0.54 0.13 0.21 149\n",
" 6 0.46 0.09 0.15 119\n",
" 7 0.73 0.31 0.43 143\n",
"\n",
" accuracy 0.65 2448\n",
" macro avg 0.59 0.45 0.46 2448\n",
"weighted avg 0.63 0.65 0.60 2448\n",
"\n",
"F1 Score : 0.6029411764705882\n",
" precision recall f1-score support\n",
"\n",
" 0 0.76 0.58 0.66 604\n",
" 1 0.56 0.97 0.71 808\n",
" 2 0.31 0.03 0.05 173\n",
" 3 0.46 0.45 0.46 219\n",
" 4 0.82 0.62 0.70 233\n",
" 5 0.47 0.10 0.17 149\n",
" 6 0.50 0.08 0.13 118\n",
" 7 0.57 0.47 0.52 144\n",
"\n",
" accuracy 0.60 2448\n",
" macro avg 0.56 0.41 0.42 2448\n",
"weighted avg 0.60 0.60 0.55 2448\n",
"\n",
"F1 MEAN Score : 0.6482843137254902\n"
]
}
],
"source": [
"from sklearn.ensemble import RandomForestClassifier\n",
"\n",
"f1 = []\n",
"\n",
"for train_index, test_index in kfold.split(X_train, Y_train):\n",
"\n",
" x_train, x_test = X_train[train_index], X_train[test_index]\n",
" y_train, y_test = Y_train[train_index], Y_train[test_index]\n",
" #print(x_train.shape, x_test.shape, y_train.shape, y_test.shape)\n",
" clf=RandomForestClassifier()\n",
" clf.fit(x_train, y_train)\n",
" clfval = clf.predict(x_test) # predicting test data\n",
" print('F1 Score : {}'.format(f1_score(y_test, clfval, average='micro')))\n",
" print(classification_report(y_test, clfval))\n",
" f1.append(f1_score(y_test, clfval, average='micro'))\n",
"print('F1 MEAN Score : {}'.format(np.mean(f1)))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "70f5YoVogSl2",
"outputId": "1e35e0fd-6329-4545-b568-5b994ff285cc"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"F1 Score : 0.6907679738562091\n"
]
}
],
"source": [
"from sklearn.linear_model import LogisticRegression\n",
"lrr=LogisticRegression(solver='saga', n_jobs=1, C=1e5)\n",
"lrr.fit(x_train, y_train)\n",
"lrrval = lrr.predict(x_test)\n",
"print('F1 Score : {}'.format(f1_score(y_test, lrrval, average='micro')))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "rgmTL-nLfjtF",
"outputId": "738fcaf9-acf8-4747-9ac7-801c27dbe5ea"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"F1 Score : 0.6895424836601307\n",
" precision recall f1-score support\n",
"\n",
" 0 0.68 0.72 0.70 604\n",
" 1 0.86 0.89 0.88 809\n",
" 2 0.41 0.51 0.45 173\n",
" 3 0.62 0.53 0.57 219\n",
" 4 0.84 0.70 0.76 234\n",
" 5 0.37 0.33 0.35 148\n",
" 6 0.26 0.26 0.26 118\n",
" 7 0.70 0.61 0.65 143\n",
"\n",
" accuracy 0.69 2448\n",
" macro avg 0.59 0.57 0.58 2448\n",
"weighted avg 0.69 0.69 0.69 2448\n",
"\n",
"F1 Score : 0.7258986928104575\n",
" precision recall f1-score support\n",
"\n",
" 0 0.71 0.82 0.76 604\n",
" 1 0.90 0.92 0.91 809\n",
" 2 0.41 0.38 0.40 174\n",
" 3 0.62 0.54 0.57 218\n",
" 4 0.79 0.80 0.80 234\n",
" 5 0.40 0.33 0.36 148\n",
" 6 0.37 0.31 0.33 118\n",
" 7 0.66 0.57 0.61 143\n",
"\n",
" accuracy 0.73 2448\n",
" macro avg 0.61 0.58 0.59 2448\n",
"weighted avg 0.72 0.73 0.72 2448\n",
"\n",
"F1 Score : 0.7475490196078431\n",
" precision recall f1-score support\n",
"\n",
" 0 0.75 0.84 0.79 604\n",
" 1 0.91 0.91 0.91 808\n",
" 2 0.43 0.35 0.39 174\n",
" 3 0.65 0.70 0.67 218\n",
" 4 0.81 0.78 0.79 234\n",
" 5 0.46 0.38 0.41 149\n",
" 6 0.50 0.39 0.44 118\n",
" 7 0.64 0.64 0.64 143\n",
"\n",
" accuracy 0.75 2448\n",
" macro avg 0.64 0.62 0.63 2448\n",
"weighted avg 0.74 0.75 0.74 2448\n",
"\n",
"F1 Score : 0.6895424836601307\n",
" precision recall f1-score support\n",
"\n",
" 0 0.81 0.71 0.76 604\n",
" 1 0.90 0.85 0.87 808\n",
" 2 0.36 0.29 0.32 173\n",
" 3 0.50 0.61 0.55 219\n",
" 4 0.63 0.83 0.72 233\n",
" 5 0.35 0.38 0.37 149\n",
" 6 0.37 0.46 0.41 119\n",
" 7 0.63 0.55 0.59 143\n",
"\n",
" accuracy 0.69 2448\n",
" macro avg 0.57 0.59 0.57 2448\n",
"weighted avg 0.70 0.69 0.69 2448\n",
"\n",
"F1 Score : 0.6646241830065359\n",
" precision recall f1-score support\n",
"\n",
" 0 0.78 0.51 0.62 604\n",
" 1 0.85 0.90 0.88 808\n",
" 2 0.37 0.40 0.38 173\n",
" 3 0.47 0.60 0.53 219\n",
" 4 0.79 0.72 0.75 233\n",
" 5 0.36 0.42 0.39 149\n",
" 6 0.43 0.36 0.40 118\n",
" 7 0.47 0.78 0.59 144\n",
"\n",
" accuracy 0.66 2448\n",
" macro avg 0.57 0.59 0.57 2448\n",
"weighted avg 0.69 0.66 0.67 2448\n",
"\n",
"F1 MEAN Score : 0.7034313725490197\n"
]
}
],
"source": [
"f1 = []\n",
"\n",
"for train_index, test_index in kfold.split(X_train, Y_train):\n",
"\n",
" x_train, x_test = X_train[train_index], X_train[test_index]\n",
" y_train, y_test = Y_train[train_index], Y_train[test_index]\n",
" #print(x_train.shape, x_test.shape, y_train.shape, y_test.shape)\n",
" clf=LogisticRegression(solver='saga', n_jobs=1, C=1e5)\n",
" clf.fit(x_train, y_train)\n",
" clfval = clf.predict(x_test) # predicting test data\n",
" print('F1 Score : {}'.format(f1_score(y_test, clfval, average='micro')))\n",
" print(classification_report(y_test, clfval))\n",
" f1.append(f1_score(y_test, clfval, average='micro'))\n",
"print('F1 MEAN Score : {}'.format(np.mean(f1)))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "I3A9KryRgOAE",
"outputId": "79ff225e-5de8-4bbe-b97a-2d33e276b2ad"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"F1 Score : 0.6997549019607843\n"
]
}
],
"source": [
"from sklearn.svm import SVC\n",
"clf=SVC(kernel='rbf',degree = 3, random_state=0,max_iter=10000)\n",
"clf.fit(x_train, y_train) # training model on train data\n",
"\n",
"clfval = clf.predict(x_test) # predicting test data\n",
"print('F1 Score : {}'.format(f1_score(y_test, clfval, average='micro'))) # printing F1 score\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "8_Vqzbq6jZTM",
"outputId": "da452467-029e-4268-a344-5f966e0782ac"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"F1 Score : 0.6703431372549019\n"
]
}
],
"source": [
"from lightgbm import LGBMClassifier\n",
"\n",
"model = LGBMClassifier()\n",
"model.fit(x_train, y_train)\n",
"\n",
"pred=model.predict(x_test)\n",
"print('F1 Score : {}'.format(f1_score(y_test, pred, average='micro')))"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "uTGtfyMelC-Y"
},
"source": [
"# deberta base nepali"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 284,
"referenced_widgets": [
"b1715cd48f6741088b3bf7b22f21030f",
"3d7fc90750fc4fd28b2b6bef0ca6e601",
"fcd6ab186c394b4fab091e2ec64cf7d2",
"70d42517af9f49e38cf99b7c97b05239",
"8445fd819a6a46fcbf75e99cbb18b4ce",
"0ddf0870774544bc9122761b7968c2ec",
"68e41c648aef493ab2290e9bd95ab244",
"95400b69037c4c3b8ce7ada698d046ce",
"d0979c33cdc54526b5dd002b2c23bef6",
"d3b1b8f83ae34e7d90ab862e23d2d5d9",
"9afec31fa2c542edbc191282ee03df73",
"4d8556c2c15046f481701f853e13b126",
"8c3c9b20a3154dceb842acbf88160743",
"7dc6e325b5454fe294d3fe960fa8f2f0",
"363c84ef86a34e6a93f4db2723a3c9f4",
"d96a8fd5fb1540a0902e1fac49912602",
"18c49519429c41f195d703bed69a4443",
"36620b6e478042989fe2ce175b627125",
"708178f346da4f1597853c0218a73e03",
"c792e1ae15ce4fa29ccac9e75780bdd1",
"768426a2c2ee437389cdded02f3f0c48",
"44323c2a91184648aa0af06e91ab980d",
"a2b590b036264886835d76ebae8de084",
"5d7a2ed7e1eb431ca509ede35d4e562f",
"714bdef5435d45ac8dbb7666c0e7232e",
"32293f1a4a3e4b49b27f4be3fe5c3b1a",
"0766b7d42af943d0b4d37cab4bddf569",
"0c31a369e5db4e0bbf689734f4dcd415",
"ec44446c5ce541e4a23d601aaa581a69",
"7ceed10a595343168a068bebf9746bca",
"67c61a63e12e48dda06d76fd11a0d7e5",
"bc565a24c7fb4bb799eb45d251cc9a57",
"14feea72286044c3ac19c79bdb4a5d15",
"c100b12a53de481ea1e5bce81995319c",
"499f1d9965704b1a9601ca6701e886de",
"662f45e53d6d45f49c249cabc6f1dc91",
"51bbf362fa7a49d0802a970b5443b01d",
"1a602627ce7742e7bf9af421ab365430",
"9541cd9ae94e469f8c0ed5ce66a0b01d",
"c4dbec2e026a4722bbf17bef4ad5741b",
"a79e620eb592460e986ea5c305ebeaec",
"39a62a0780dc4911bd30d366ac81b6f3",
"f183c27d35414a5facef4bed84aded9b",
"3367b5295e4b44d5a3aee0aaf5fbd73a",
"dca828d0f4824d5a80125caf02b1bd18",
"3cdaa669bed14105a18bb904190b43a6",
"9dfcb1560dcd483ab5c000d6e43771f3",
"91b65e18dfae4ee08c23d8d70436f3d2",
"a054cd75df6a40a1a8a23cb82c73e73d",
"c9a5a153a6d8456fb867a2bbeee2368d",
"7d940db073774c888ab9a98316fbc3ae",
"b5422f0f1b65405ea399b64dd602c2a4",
"93fa5389c5e844d98eb849c08c035c1d",
"6ebab858b53d466a96db54ced3956fd0",
"1967dfefa2e24c76a680a450dfa66e6f"
]
},
"id": "mpZVagj6jgJf",
"outputId": "45f9e81f-c0d1-4ffd-891f-dea9455b06eb"
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "b1715cd48f6741088b3bf7b22f21030f",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Downloading: 0%| | 0.00/773 [00:00, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "4d8556c2c15046f481701f853e13b126",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Downloading: 0%| | 0.00/557M [00:00, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Some weights of the model checkpoint at Sakonii/deberta-base-nepali were not used when initializing DebertaModel: ['cls.predictions.bias', 'cls.predictions.transform.LayerNorm.weight', 'cls.predictions.decoder.bias', 'cls.predictions.transform.LayerNorm.bias', 'cls.predictions.transform.dense.bias', 'cls.predictions.transform.dense.weight', 'cls.predictions.decoder.weight']\n",
"- This IS expected if you are initializing DebertaModel from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).\n",
"- This IS NOT expected if you are initializing DebertaModel from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "a2b590b036264886835d76ebae8de084",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Downloading: 0%| | 0.00/413 [00:00, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "c100b12a53de481ea1e5bce81995319c",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Downloading: 0%| | 0.00/2.13M [00:00, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "dca828d0f4824d5a80125caf02b1bd18",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Downloading: 0%| | 0.00/239 [00:00, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 1531/1531 [10:41<00:00, 2.38it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train embeddings shape (13008,)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"MODEL_NM = 'Sakonii/deberta-base-nepali'\n",
"all_train_text_feats = get_embeddings(MODEL_NM, MAX=512)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "WZf17q46lKf1"
},
"outputs": [],
"source": [
"X_train = all_train_text_feats[:12240]\n",
"\n",
"X_tr = []\n",
"for arr in X_train:\n",
" X_tr.append(arr.reshape(768))\n",
"\n",
"X_train = np.array(X_tr)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "C8cvYO5Unsq_",
"outputId": "7ff8a0ed-7f42-4d16-93fa-088f669c1c4d"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"F1 Score : 0.6429738562091504\n",
" precision recall f1-score support\n",
"\n",
" 0 0.61 0.72 0.66 604\n",
" 1 0.67 0.93 0.78 809\n",
" 2 0.24 0.17 0.20 173\n",
" 3 0.69 0.58 0.63 219\n",
" 4 0.87 0.53 0.66 234\n",
" 5 0.50 0.26 0.34 148\n",
" 6 0.44 0.13 0.20 118\n",
" 7 0.81 0.43 0.56 143\n",
"\n",
" accuracy 0.64 2448\n",
" macro avg 0.60 0.47 0.50 2448\n",
"weighted avg 0.63 0.64 0.62 2448\n",
"\n",
"F1 Score : 0.6879084967320261\n",
" precision recall f1-score support\n",
"\n",
" 0 0.64 0.86 0.74 604\n",
" 1 0.78 0.93 0.84 809\n",
" 2 0.45 0.17 0.25 174\n",
" 3 0.59 0.57 0.58 218\n",
" 4 0.84 0.67 0.75 234\n",
" 5 0.39 0.24 0.30 148\n",
" 6 0.31 0.09 0.14 118\n",
" 7 0.66 0.39 0.49 143\n",
"\n",
" accuracy 0.69 2448\n",
" macro avg 0.58 0.49 0.51 2448\n",
"weighted avg 0.66 0.69 0.66 2448\n",
"\n",
"F1 Score : 0.7156862745098039\n",
" precision recall f1-score support\n",
"\n",
" 0 0.70 0.85 0.77 604\n",
" 1 0.78 0.93 0.85 808\n",
" 2 0.55 0.25 0.35 174\n",
" 3 0.62 0.71 0.66 218\n",
" 4 0.79 0.69 0.73 234\n",
" 5 0.51 0.32 0.39 149\n",
" 6 0.67 0.24 0.35 118\n",
" 7 0.68 0.40 0.50 143\n",
"\n",
" accuracy 0.72 2448\n",
" macro avg 0.66 0.55 0.57 2448\n",
"weighted avg 0.70 0.72 0.69 2448\n",
"\n",
"F1 Score : 0.6544117647058824\n",
" precision recall f1-score support\n",
"\n",
" 0 0.69 0.67 0.68 604\n",
" 1 0.72 0.90 0.80 808\n",
" 2 0.35 0.17 0.23 173\n",
" 3 0.57 0.61 0.59 219\n",
" 4 0.63 0.79 0.70 233\n",
" 5 0.48 0.39 0.43 149\n",
" 6 0.46 0.18 0.26 119\n",
" 7 0.60 0.31 0.41 143\n",
"\n",
" accuracy 0.65 2448\n",
" macro avg 0.56 0.50 0.51 2448\n",
"weighted avg 0.63 0.65 0.63 2448\n",
"\n",
"F1 Score : 0.6625816993464052\n",
" precision recall f1-score support\n",
"\n",
" 0 0.74 0.59 0.65 604\n",
" 1 0.71 0.93 0.80 808\n",
" 2 0.48 0.31 0.37 173\n",
" 3 0.53 0.71 0.61 219\n",
" 4 0.85 0.61 0.71 233\n",
" 5 0.42 0.34 0.37 149\n",
" 6 0.45 0.14 0.22 118\n",
" 7 0.56 0.69 0.62 144\n",
"\n",
" accuracy 0.66 2448\n",
" macro avg 0.59 0.54 0.54 2448\n",
"weighted avg 0.66 0.66 0.64 2448\n",
"\n",
"F1 MEAN Score : 0.6727124183006536\n"
]
}
],
"source": [
"f1 = []\n",
"\n",
"for train_index, test_index in kfold.split(X_train, Y_train):\n",
"\n",
" x_train, x_test = X_train[train_index], X_train[test_index]\n",
" y_train, y_test = Y_train[train_index], Y_train[test_index]\n",
" #print(x_train.shape, x_test.shape, y_train.shape, y_test.shape)\n",
" clf=SVC(kernel='rbf',gamma = 10,C = 10, random_state=42)\n",
" clf.fit(x_train, y_train)\n",
" clfval = clf.predict(x_test) # predicting test data\n",
" print('F1 Score : {}'.format(f1_score(y_test, clfval, average='micro')))\n",
" print(classification_report(y_test, clfval))\n",
" f1.append(f1_score(y_test, clfval, average='micro'))\n",
"print('F1 MEAN Score : {}'.format(np.mean(f1)))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "BJ3aiISAnxhh",
"outputId": "f9cfba70-ff90-4f0f-9ca6-7eedaf89114e"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"F1 Score : 0.6478758169934641\n",
" precision recall f1-score support\n",
"\n",
" 0 0.65 0.69 0.67 604\n",
" 1 0.80 0.88 0.84 809\n",
" 2 0.31 0.41 0.35 173\n",
" 3 0.62 0.48 0.54 219\n",
" 4 0.79 0.59 0.68 234\n",
" 5 0.34 0.26 0.30 148\n",
" 6 0.28 0.27 0.27 118\n",
" 7 0.65 0.49 0.56 143\n",
"\n",
" accuracy 0.65 2448\n",
" macro avg 0.55 0.51 0.53 2448\n",
"weighted avg 0.65 0.65 0.64 2448\n",
"\n",
"F1 Score : 0.6968954248366013\n",
" precision recall f1-score support\n",
"\n",
" 0 0.69 0.82 0.75 604\n",
" 1 0.87 0.89 0.88 809\n",
" 2 0.40 0.37 0.38 174\n",
" 3 0.59 0.54 0.56 218\n",
" 4 0.74 0.72 0.73 234\n",
" 5 0.41 0.31 0.35 148\n",
" 6 0.33 0.24 0.27 118\n",
" 7 0.61 0.50 0.55 143\n",
"\n",
" accuracy 0.70 2448\n",
" macro avg 0.58 0.55 0.56 2448\n",
"weighted avg 0.68 0.70 0.69 2448\n",
"\n",
"F1 Score : 0.7246732026143791\n",
" precision recall f1-score support\n",
"\n",
" 0 0.74 0.82 0.78 604\n",
" 1 0.89 0.88 0.88 808\n",
" 2 0.42 0.30 0.35 174\n",
" 3 0.63 0.69 0.66 218\n",
" 4 0.74 0.77 0.76 234\n",
" 5 0.42 0.38 0.40 149\n",
" 6 0.43 0.36 0.39 118\n",
" 7 0.62 0.59 0.60 143\n",
"\n",
" accuracy 0.72 2448\n",
" macro avg 0.61 0.60 0.60 2448\n",
"weighted avg 0.71 0.72 0.72 2448\n",
"\n",
"F1 Score : 0.6548202614379085\n",
" precision recall f1-score support\n",
"\n",
" 0 0.74 0.65 0.69 604\n",
" 1 0.86 0.82 0.84 808\n",
" 2 0.25 0.20 0.22 173\n",
" 3 0.51 0.55 0.53 219\n",
" 4 0.61 0.85 0.71 233\n",
" 5 0.35 0.45 0.39 149\n",
" 6 0.38 0.42 0.40 119\n",
" 7 0.64 0.52 0.57 143\n",
"\n",
" accuracy 0.65 2448\n",
" macro avg 0.54 0.56 0.55 2448\n",
"weighted avg 0.66 0.65 0.66 2448\n",
"\n",
"F1 Score : 0.6405228758169934\n",
" precision recall f1-score support\n",
"\n",
" 0 0.77 0.49 0.60 604\n",
" 1 0.83 0.88 0.85 808\n",
" 2 0.36 0.31 0.34 173\n",
" 3 0.46 0.67 0.55 219\n",
" 4 0.79 0.67 0.72 233\n",
" 5 0.33 0.47 0.39 149\n",
" 6 0.38 0.28 0.32 118\n",
" 7 0.43 0.74 0.55 144\n",
"\n",
" accuracy 0.64 2448\n",
" macro avg 0.54 0.56 0.54 2448\n",
"weighted avg 0.67 0.64 0.64 2448\n",
"\n",
"F1 MEAN Score : 0.6729575163398693\n"
]
}
],
"source": [
"f1 = []\n",
"\n",
"for train_index, test_index in kfold.split(X_train, Y_train):\n",
"\n",
" x_train, x_test = X_train[train_index], X_train[test_index]\n",
" y_train, y_test = Y_train[train_index], Y_train[test_index]\n",
" #print(x_train.shape, x_test.shape, y_train.shape, y_test.shape)\n",
" clf=LogisticRegression(solver='saga', n_jobs=1, C=1e5)\n",
" clf.fit(x_train, y_train)\n",
" clfval = clf.predict(x_test) # predicting test data\n",
" print('F1 Score : {}'.format(f1_score(y_test, clfval, average='micro')))\n",
" print(classification_report(y_test, clfval))\n",
" f1.append(f1_score(y_test, clfval, average='micro'))\n",
"print('F1 MEAN Score : {}'.format(np.mean(f1)))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "eoJPzbN6pO36",
"outputId": "c05ce4f4-bc64-4645-a3e5-c85b821696bf"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"F1 Score : 0.5853758169934641\n",
" precision recall f1-score support\n",
"\n",
" 0 0.59 0.66 0.62 604\n",
" 1 0.57 0.96 0.71 809\n",
" 2 0.06 0.01 0.02 173\n",
" 3 0.64 0.57 0.60 219\n",
" 4 0.81 0.43 0.56 234\n",
" 5 0.38 0.04 0.07 148\n",
" 6 0.20 0.01 0.02 118\n",
" 7 0.82 0.19 0.31 143\n",
"\n",
" accuracy 0.59 2448\n",
" macro avg 0.51 0.36 0.36 2448\n",
"weighted avg 0.55 0.59 0.52 2448\n",
"\n",
"F1 Score : 0.6348039215686274\n",
" precision recall f1-score support\n",
"\n",
" 0 0.64 0.83 0.73 604\n",
" 1 0.63 0.93 0.75 809\n",
" 2 0.31 0.02 0.04 174\n",
" 3 0.56 0.56 0.56 218\n",
" 4 0.77 0.59 0.67 234\n",
" 5 0.33 0.04 0.07 148\n",
" 6 0.50 0.03 0.05 118\n",
" 7 0.67 0.15 0.25 143\n",
"\n",
" accuracy 0.63 2448\n",
" macro avg 0.55 0.40 0.39 2448\n",
"weighted avg 0.60 0.63 0.57 2448\n",
"\n",
"F1 Score : 0.6499183006535948\n",
" precision recall f1-score support\n",
"\n",
" 0 0.66 0.83 0.74 604\n",
" 1 0.65 0.94 0.77 808\n",
" 2 0.60 0.03 0.07 174\n",
" 3 0.56 0.68 0.62 218\n",
" 4 0.74 0.54 0.62 234\n",
" 5 0.52 0.08 0.14 149\n",
" 6 0.83 0.04 0.08 118\n",
" 7 0.69 0.22 0.33 143\n",
"\n",
" accuracy 0.65 2448\n",
" macro avg 0.66 0.42 0.42 2448\n",
"weighted avg 0.65 0.65 0.59 2448\n",
"\n",
"F1 Score : 0.6058006535947712\n",
" precision recall f1-score support\n",
"\n",
" 0 0.67 0.64 0.65 604\n",
" 1 0.60 0.92 0.73 808\n",
" 2 0.25 0.03 0.05 173\n",
" 3 0.48 0.61 0.54 219\n",
" 4 0.64 0.65 0.64 233\n",
" 5 0.55 0.12 0.20 149\n",
" 6 0.67 0.05 0.09 119\n",
" 7 0.73 0.26 0.38 143\n",
"\n",
" accuracy 0.61 2448\n",
" macro avg 0.57 0.41 0.41 2448\n",
"weighted avg 0.59 0.61 0.55 2448\n",
"\n",
"F1 Score : 0.5955882352941176\n",
" precision recall f1-score support\n",
"\n",
" 0 0.68 0.58 0.63 604\n",
" 1 0.57 0.95 0.71 808\n",
" 2 0.36 0.06 0.10 173\n",
" 3 0.46 0.61 0.52 219\n",
" 4 0.83 0.51 0.63 233\n",
" 5 0.48 0.07 0.12 149\n",
" 6 0.75 0.05 0.10 118\n",
" 7 0.68 0.44 0.53 144\n",
"\n",
" accuracy 0.60 2448\n",
" macro avg 0.60 0.41 0.42 2448\n",
"weighted avg 0.60 0.60 0.55 2448\n",
"\n",
"F1 MEAN Score : 0.6142973856209151\n"
]
}
],
"source": [
"f1 = []\n",
"\n",
"for train_index, test_index in kfold.split(X_train, Y_train):\n",
"\n",
" x_train, x_test = X_train[train_index], X_train[test_index]\n",
" y_train, y_test = Y_train[train_index], Y_train[test_index]\n",
" #print(x_train.shape, x_test.shape, y_train.shape, y_test.shape)\n",
" clf=RandomForestClassifier()\n",
" clf.fit(x_train, y_train)\n",
" clfval = clf.predict(x_test) # predicting test data\n",
" print('F1 Score : {}'.format(f1_score(y_test, clfval, average='micro')))\n",
" print(classification_report(y_test, clfval))\n",
" f1.append(f1_score(y_test, clfval, average='micro'))\n",
"print('F1 MEAN Score : {}'.format(np.mean(f1)))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Sq8YFGXzp8_E",
"outputId": "02f0fcc8-6ebf-4432-cd1a-4679df6fb501"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"F1 Score : 0.6556372549019608\n"
]
}
],
"source": [
"from sklearn.svm import SVC\n",
"clf=SVC(kernel='rbf',gamma = 1,C = 100, random_state=42)\n",
"clf.fit(x_train, y_train) # training model on train data\n",
"\n",
"clfval = clf.predict(x_test) # predicting test data\n",
"print('F1 Score : {}'.format(f1_score(y_test, clfval, average='micro'))) # printing F1 score"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "XKRExfDvrQf3"
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "zp9bm_lhtLEX"
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "CEifkOV1tQKt"
},
"source": [
"[link text](https://)# fine tunning"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "IA8M33Imtc6r",
"outputId": "18eecfe3-6acd-4387-f35b-e027a613bc5c"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[?25l\r\u001b[K |█▊ | 10 kB 21.4 MB/s eta 0:00:01\r\u001b[K |███▍ | 20 kB 17.1 MB/s eta 0:00:01\r\u001b[K |█████ | 30 kB 22.8 MB/s eta 0:00:01\r\u001b[K |██████▊ | 40 kB 14.4 MB/s eta 0:00:01\r\u001b[K |████████▌ | 51 kB 13.3 MB/s eta 0:00:01\r\u001b[K |██████████▏ | 61 kB 15.4 MB/s eta 0:00:01\r\u001b[K |███████████▉ | 71 kB 14.8 MB/s eta 0:00:01\r\u001b[K |█████████████▌ | 81 kB 14.2 MB/s eta 0:00:01\r\u001b[K |███████████████▎ | 92 kB 15.6 MB/s eta 0:00:01\r\u001b[K |█████████████████ | 102 kB 13.5 MB/s eta 0:00:01\r\u001b[K |██████████████████▋ | 112 kB 13.5 MB/s eta 0:00:01\r\u001b[K |████████████████████▎ | 122 kB 13.5 MB/s eta 0:00:01\r\u001b[K |██████████████████████ | 133 kB 13.5 MB/s eta 0:00:01\r\u001b[K |███████████████████████▊ | 143 kB 13.5 MB/s eta 0:00:01\r\u001b[K |█████████████████████████▍ | 153 kB 13.5 MB/s eta 0:00:01\r\u001b[K |███████████████████████████ | 163 kB 13.5 MB/s eta 0:00:01\r\u001b[K |████████████████████████████▊ | 174 kB 13.5 MB/s eta 0:00:01\r\u001b[K |██████████████████████████████▌ | 184 kB 13.5 MB/s eta 0:00:01\r\u001b[K |████████████████████████████████| 193 kB 13.5 MB/s \n",
"\u001b[?25h"
]
}
],
"source": [
"! pip install torch skorch transformers -q"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "HpDarZmtt5N9"
},
"outputs": [],
"source": [
"import numpy as np\n",
"import torch\n",
"from sklearn.datasets import fetch_20newsgroups\n",
"from sklearn.metrics import accuracy_score\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.pipeline import Pipeline\n",
"from skorch import NeuralNetClassifier\n",
"from skorch.callbacks import LRScheduler, ProgressBar\n",
"from skorch.hf import HuggingfacePretrainedTokenizer\n",
"from torch import nn\n",
"from torch.optim.lr_scheduler import LambdaLR\n",
"from transformers import AutoModelForSequenceClassification, AutoModel\n",
"from transformers import AutoTokenizer"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "tlVNbt1UPmn1"
},
"source": [
"TOKENIZER = \"Shushant/nepaliBERT\"\n",
"\n",
"PRETRAINED_MODEL = \"Shushant/nepaliBERT\""
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "utNJg1bpuHmo"
},
"outputs": [],
"source": [
"# Choose a tokenizer and BERT model that work together\n",
"TOKENIZER = \"NepBERTa/NepBERTa\"\n",
"PRETRAINED_MODEL = \"NepBERTa/NepBERTa\"\n",
"\n",
"# model hyper-parameters\n",
"OPTMIZER = torch.optim.AdamW\n",
"LR = 5e-5\n",
"MAX_EPOCHS = 4\n",
"CRITERION = nn.BCELoss\n",
"BATCH_SIZE = 8\n",
"\n",
"# device\n",
"DEVICE = 'cuda' if torch.cuda.is_available() else 'cpu'"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "9izTmBwoutY7"
},
"outputs": [],
"source": [
"X = dftr['text'].iloc[:12240]\n",
"y = np.array(y_train)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "vmiOnvYcAQRM",
"outputId": "0efdc99c-b791-4c03-ff2d-bb1822681220"
},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 0, 0, 0, 0, 0, 0, 0])"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y[1231]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "PlrXLOAuvCaB"
},
"outputs": [],
"source": [
"X_train, X_test, y_train, y_test, = train_test_split(X, y, stratify=None, random_state=0,)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "D6SckpEawGI8",
"outputId": "d4d27d37-0bde-4490-fdbe-41cdf0a84102"
},
"outputs": [
{
"data": {
"text/plain": [
"8297 लकडाउन भन्थे॥। मान्छेको भिडमा लक भइन्छ भनेर पो...\n",
"1231 कोभिड नेपाल: आन्तरिक उडान खोल्ने निर्णय, कसरी ...\n",
"Name: text, dtype: object"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X_train[:2]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "-xRzxunz_g9K",
"outputId": "06b6634e-0332-4d38-db2b-df4ab513e666"
},
"outputs": [
{
"data": {
"text/plain": [
"array([[0, 0, 0, 1, 1, 0, 0, 0],\n",
" [0, 0, 0, 0, 0, 0, 0, 0]])"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_train[:2]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "VfQerrhywSma"
},
"outputs": [],
"source": [
"num_training_steps = MAX_EPOCHS * (len(X_train) // BATCH_SIZE + 1)\n",
"\n",
"def lr_schedule(current_step):\n",
" factor = float(num_training_steps - current_step) / float(max(1, num_training_steps))\n",
" assert factor > 0\n",
" return factor"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "zfaYfi2d9RdR"
},
"outputs": [],
"source": [
"'''def forward(self, ids, mask, token_type_ids):\n",
" _, features = self.roberta(ids, attention_mask = mask, token_type_ids = token_type_ids, return_dict=False)\n",
" output_2 = self.l2(features)\n",
" output = self.fc(output_2)\n",
" return output'''"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "yzvl5u0Y-78P"
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "ZeDUevemwumm"
},
"outputs": [],
"source": [
"class BertModule(nn.Module):\n",
" def __init__(self, name, num_labels):\n",
" super().__init__()\n",
" self.name = name\n",
" self.num_labels = num_labels\n",
" self.from_tf = True #for tensorflow model(tf_model.h5)\n",
"\n",
" self.reset_weights()\n",
"\n",
" def reset_weights(self):\n",
" self.bert = AutoModel.from_pretrained(self.name,from_tf=self.from_tf)\n",
" self.classifier=nn.Linear(self.bert.config.hidden_size, self.num_labels)\n",
"\n",
" def forward(self, **kwargs):\n",
" pred = self.bert(**kwargs)\n",
" pred = self.classifier(pred.pooler_output)\n",
" return pred"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "bWZNU48UwzL8"
},
"outputs": [],
"source": [
"pipeline = Pipeline([\n",
" ('tokenizer', HuggingfacePretrainedTokenizer(TOKENIZER)),\n",
" ('net', NeuralNetClassifier(\n",
" BertModule,\n",
" module__name=PRETRAINED_MODEL,\n",
" train_split=None,\n",
" module__num_labels=8,\n",
" optimizer=OPTMIZER,\n",
" lr=LR,\n",
" max_epochs=MAX_EPOCHS,\n",
" criterion=CRITERION,\n",
" batch_size=BATCH_SIZE,\n",
" iterator_train__shuffle=True,\n",
" device=DEVICE,\n",
" callbacks=[\n",
" LRScheduler(LambdaLR, lr_lambda=lr_schedule, step_every='batch'),\n",
" ProgressBar(),\n",
" ],\n",
" )),\n",
"])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 575
},
"id": "YA4pBaicab-A",
"outputId": "09b6db1b-c6f7-4870-9fe0-fb7d33ade964"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Re-initializing module because the following parameters were re-set: name, num_labels.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"All TF 2.0 model weights were used when initializing BertModel.\n",
"\n",
"All the weights of BertModel were initialized from the TF 2.0 model.\n",
"If your task is similar to the task the model of the checkpoint was trained on, you can already use BertModel for predictions without further training.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Re-initializing criterion.\n",
"Re-initializing optimizer.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
" 0%| | 0/1148 [00:00, ?it/s]\n",
" \u001b[A"
]
},
{
"ename": "RuntimeError",
"evalue": "ignored",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/sklearn/pipeline.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, X, y, **fit_params)\u001b[0m\n\u001b[1;32m 392\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_final_estimator\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0;34m\"passthrough\"\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 393\u001b[0m \u001b[0mfit_params_last_step\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfit_params_steps\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msteps\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 394\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_final_estimator\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mXt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mfit_params_last_step\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 395\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 396\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/skorch/classifier.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, X, y, **fit_params)\u001b[0m\n\u001b[1;32m 139\u001b[0m \u001b[0;31m# this is actually a pylint bug:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 140\u001b[0m \u001b[0;31m# https://github.com/PyCQA/pylint/issues/1085\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 141\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0msuper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mNeuralNetClassifier\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mfit_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 142\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 143\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mpredict_proba\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mX\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/skorch/net.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, X, y, **fit_params)\u001b[0m\n\u001b[1;32m 1228\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minitialize\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1229\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1230\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpartial_fit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mfit_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1231\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1232\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/skorch/net.py\u001b[0m in \u001b[0;36mpartial_fit\u001b[0;34m(self, X, y, classes, **fit_params)\u001b[0m\n\u001b[1;32m 1187\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnotify\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'on_train_begin'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mX\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1188\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1189\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit_loop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mfit_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1190\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mKeyboardInterrupt\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1191\u001b[0m \u001b[0;32mpass\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/skorch/net.py\u001b[0m in \u001b[0;36mfit_loop\u001b[0;34m(self, X, y, epochs, **fit_params)\u001b[0m\n\u001b[1;32m 1100\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1101\u001b[0m self.run_single_epoch(iterator_train, training=True, prefix=\"train\",\n\u001b[0;32m-> 1102\u001b[0;31m step_fn=self.train_step, **fit_params)\n\u001b[0m\u001b[1;32m 1103\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1104\u001b[0m self.run_single_epoch(iterator_valid, training=False, prefix=\"valid\",\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/skorch/net.py\u001b[0m in \u001b[0;36mrun_single_epoch\u001b[0;34m(self, iterator, training, prefix, step_fn, **fit_params)\u001b[0m\n\u001b[1;32m 1135\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mbatch\u001b[0m \u001b[0;32min\u001b[0m \u001b[0miterator\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1136\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnotify\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"on_batch_begin\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbatch\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mbatch\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtraining\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtraining\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1137\u001b[0;31m \u001b[0mstep\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mstep_fn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbatch\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mfit_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1138\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhistory\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrecord_batch\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mprefix\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m\"_loss\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstep\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"loss\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1139\u001b[0m batch_size = (get_len(batch[0]) if isinstance(batch, (tuple, list))\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/skorch/net.py\u001b[0m in \u001b[0;36mtrain_step\u001b[0;34m(self, batch, **fit_params)\u001b[0m\n\u001b[1;32m 1014\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mstep\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'loss'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1015\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1016\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_step_optimizer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstep_fn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1017\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mstep_accumulator\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_step\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1018\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/skorch/net.py\u001b[0m in \u001b[0;36m_step_optimizer\u001b[0;34m(self, step_fn)\u001b[0m\n\u001b[1;32m 970\u001b[0m \u001b[0moptimizer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstep\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 971\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 972\u001b[0;31m \u001b[0moptimizer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstep\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstep_fn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 973\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 974\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mtrain_step\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbatch\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mfit_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/torch/optim/lr_scheduler.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 63\u001b[0m \u001b[0minstance\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_step_count\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 64\u001b[0m \u001b[0mwrapped\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__get__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minstance\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcls\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 65\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mwrapped\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 66\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 67\u001b[0m \u001b[0;31m# Note that the returned function here is no longer a bound method,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/torch/optim/optimizer.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 111\u001b[0m \u001b[0mprofile_name\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m\"Optimizer.step#{}.step\"\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__class__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__name__\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 112\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mautograd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mprofiler\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrecord_function\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mprofile_name\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 113\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 114\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mwrapper\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 115\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/torch/autograd/grad_mode.py\u001b[0m in \u001b[0;36mdecorate_context\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 25\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mdecorate_context\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 26\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclone\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 27\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 28\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mcast\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mF\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdecorate_context\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 29\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/torch/optim/adamw.py\u001b[0m in \u001b[0;36mstep\u001b[0;34m(self, closure)\u001b[0m\n\u001b[1;32m 117\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mclosure\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 118\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0menable_grad\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 119\u001b[0;31m \u001b[0mloss\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mclosure\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 120\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 121\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mgroup\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mparam_groups\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/skorch/net.py\u001b[0m in \u001b[0;36mstep_fn\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1004\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mstep_fn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1005\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_zero_grad_optimizer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1006\u001b[0;31m \u001b[0mstep\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtrain_step_single\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbatch\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mfit_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1007\u001b[0m \u001b[0mstep_accumulator\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstore_step\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstep\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1008\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/skorch/net.py\u001b[0m in \u001b[0;36mtrain_step_single\u001b[0;34m(self, batch, **fit_params)\u001b[0m\n\u001b[1;32m 904\u001b[0m \u001b[0mXi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0myi\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0munpack_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbatch\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 905\u001b[0m \u001b[0my_pred\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minfer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mXi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mfit_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 906\u001b[0;31m \u001b[0mloss\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loss\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my_pred\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0myi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mX\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mXi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtraining\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 907\u001b[0m \u001b[0mloss\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbackward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 908\u001b[0m return {\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/skorch/classifier.py\u001b[0m in \u001b[0;36mget_loss\u001b[0;34m(self, y_pred, y_true, *args, **kwargs)\u001b[0m\n\u001b[1;32m 124\u001b[0m \u001b[0meps\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfinfo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my_pred\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0meps\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 125\u001b[0m \u001b[0my_pred\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlog\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my_pred\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0meps\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 126\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0msuper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loss\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my_pred\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_true\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 127\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 128\u001b[0m \u001b[0;31m# pylint: disable=signature-differs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/skorch/net.py\u001b[0m in \u001b[0;36mget_loss\u001b[0;34m(self, y_pred, y_true, X, training)\u001b[0m\n\u001b[1;32m 1569\u001b[0m \"\"\"\n\u001b[1;32m 1570\u001b[0m \u001b[0my_true\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mto_tensor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my_true\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdevice\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1571\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcriterion_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my_pred\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_true\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1572\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1573\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mget_dataset\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_call_impl\u001b[0;34m(self, *input, **kwargs)\u001b[0m\n\u001b[1;32m 1128\u001b[0m if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks\n\u001b[1;32m 1129\u001b[0m or _global_forward_hooks or _global_forward_pre_hooks):\n\u001b[0;32m-> 1130\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mforward_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1131\u001b[0m \u001b[0;31m# Do not call functions when jit is used\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1132\u001b[0m \u001b[0mfull_backward_hooks\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnon_full_backward_hooks\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/torch/nn/modules/loss.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, input, target)\u001b[0m\n\u001b[1;32m 611\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 612\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mforward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mTensor\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtarget\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mTensor\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mTensor\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 613\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mF\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbinary_cross_entropy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtarget\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mweight\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mweight\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreduction\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreduction\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 614\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 615\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/torch/nn/functional.py\u001b[0m in \u001b[0;36mbinary_cross_entropy\u001b[0;34m(input, target, weight, size_average, reduce, reduction)\u001b[0m\n\u001b[1;32m 3081\u001b[0m \u001b[0mweight\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mweight\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexpand\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnew_size\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3082\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3083\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_C\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_nn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbinary_cross_entropy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtarget\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mweight\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreduction_enum\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3084\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3085\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mRuntimeError\u001b[0m: Found dtype Long but expected Float"
]
}
],
"source": [
"%time pipeline.fit(X_train, y_train)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "shIKFCBpxKPX"
},
"outputs": [],
"source": [
"torch.manual_seed(42)\n",
"torch.cuda.manual_seed(42)\n",
"torch.cuda.manual_seed_all(42)\n",
"np.random.seed(42)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 491
},
"id": "AZ2BpdIhxPED",
"outputId": "591739c1-0429-4791-879b-6387223a1564"
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Some weights of the model checkpoint at Sakonii/deberta-base-nepali were not used when initializing DebertaModel: ['cls.predictions.bias', 'cls.predictions.transform.LayerNorm.bias', 'cls.predictions.decoder.weight', 'cls.predictions.transform.LayerNorm.weight', 'cls.predictions.decoder.bias', 'cls.predictions.transform.dense.weight', 'cls.predictions.transform.dense.bias']\n",
"- This IS expected if you are initializing DebertaModel from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).\n",
"- This IS NOT expected if you are initializing DebertaModel from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\n",
"\n",
" 0%| | 0/1148 [00:00, ?it/s]\u001b[A"
]
},
{
"ename": "AttributeError",
"evalue": "ignored",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/sklearn/pipeline.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, X, y, **fit_params)\u001b[0m\n\u001b[1;32m 392\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_final_estimator\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0;34m\"passthrough\"\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 393\u001b[0m \u001b[0mfit_params_last_step\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfit_params_steps\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msteps\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 394\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_final_estimator\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mXt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mfit_params_last_step\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 395\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 396\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/skorch/classifier.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, X, y, **fit_params)\u001b[0m\n\u001b[1;32m 139\u001b[0m \u001b[0;31m# this is actually a pylint bug:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 140\u001b[0m \u001b[0;31m# https://github.com/PyCQA/pylint/issues/1085\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 141\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0msuper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mNeuralNetClassifier\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mfit_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 142\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 143\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mpredict_proba\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mX\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/skorch/net.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, X, y, **fit_params)\u001b[0m\n\u001b[1;32m 1228\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minitialize\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1229\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1230\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpartial_fit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mfit_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1231\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1232\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/skorch/net.py\u001b[0m in \u001b[0;36mpartial_fit\u001b[0;34m(self, X, y, classes, **fit_params)\u001b[0m\n\u001b[1;32m 1187\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnotify\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'on_train_begin'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mX\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1188\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1189\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit_loop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mfit_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1190\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mKeyboardInterrupt\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1191\u001b[0m \u001b[0;32mpass\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/skorch/net.py\u001b[0m in \u001b[0;36mfit_loop\u001b[0;34m(self, X, y, epochs, **fit_params)\u001b[0m\n\u001b[1;32m 1100\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1101\u001b[0m self.run_single_epoch(iterator_train, training=True, prefix=\"train\",\n\u001b[0;32m-> 1102\u001b[0;31m step_fn=self.train_step, **fit_params)\n\u001b[0m\u001b[1;32m 1103\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1104\u001b[0m self.run_single_epoch(iterator_valid, training=False, prefix=\"valid\",\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/skorch/net.py\u001b[0m in \u001b[0;36mrun_single_epoch\u001b[0;34m(self, iterator, training, prefix, step_fn, **fit_params)\u001b[0m\n\u001b[1;32m 1135\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mbatch\u001b[0m \u001b[0;32min\u001b[0m \u001b[0miterator\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1136\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnotify\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"on_batch_begin\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbatch\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mbatch\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtraining\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtraining\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1137\u001b[0;31m \u001b[0mstep\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mstep_fn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbatch\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mfit_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1138\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhistory\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrecord_batch\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mprefix\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m\"_loss\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstep\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"loss\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1139\u001b[0m batch_size = (get_len(batch[0]) if isinstance(batch, (tuple, list))\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/skorch/net.py\u001b[0m in \u001b[0;36mtrain_step\u001b[0;34m(self, batch, **fit_params)\u001b[0m\n\u001b[1;32m 1014\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mstep\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'loss'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1015\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1016\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_step_optimizer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstep_fn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1017\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mstep_accumulator\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_step\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1018\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/skorch/net.py\u001b[0m in \u001b[0;36m_step_optimizer\u001b[0;34m(self, step_fn)\u001b[0m\n\u001b[1;32m 970\u001b[0m \u001b[0moptimizer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstep\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 971\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 972\u001b[0;31m \u001b[0moptimizer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstep\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstep_fn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 973\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 974\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mtrain_step\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbatch\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mfit_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/torch/optim/lr_scheduler.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 63\u001b[0m \u001b[0minstance\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_step_count\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 64\u001b[0m \u001b[0mwrapped\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__get__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minstance\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcls\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 65\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mwrapped\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 66\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 67\u001b[0m \u001b[0;31m# Note that the returned function here is no longer a bound method,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/torch/optim/optimizer.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 111\u001b[0m \u001b[0mprofile_name\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m\"Optimizer.step#{}.step\"\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__class__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__name__\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 112\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mautograd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mprofiler\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrecord_function\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mprofile_name\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 113\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 114\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mwrapper\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 115\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/torch/autograd/grad_mode.py\u001b[0m in \u001b[0;36mdecorate_context\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 25\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mdecorate_context\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 26\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclone\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 27\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 28\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mcast\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mF\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdecorate_context\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 29\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/torch/optim/adamw.py\u001b[0m in \u001b[0;36mstep\u001b[0;34m(self, closure)\u001b[0m\n\u001b[1;32m 117\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mclosure\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 118\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0menable_grad\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 119\u001b[0;31m \u001b[0mloss\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mclosure\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 120\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 121\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mgroup\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mparam_groups\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/skorch/net.py\u001b[0m in \u001b[0;36mstep_fn\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1004\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mstep_fn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1005\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_zero_grad_optimizer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1006\u001b[0;31m \u001b[0mstep\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtrain_step_single\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbatch\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mfit_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1007\u001b[0m \u001b[0mstep_accumulator\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstore_step\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstep\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1008\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/skorch/net.py\u001b[0m in \u001b[0;36mtrain_step_single\u001b[0;34m(self, batch, **fit_params)\u001b[0m\n\u001b[1;32m 903\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_set_training\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 904\u001b[0m \u001b[0mXi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0myi\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0munpack_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbatch\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 905\u001b[0;31m \u001b[0my_pred\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minfer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mXi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mfit_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 906\u001b[0m \u001b[0mloss\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loss\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my_pred\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0myi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mX\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mXi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtraining\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 907\u001b[0m \u001b[0mloss\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbackward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/skorch/net.py\u001b[0m in \u001b[0;36minfer\u001b[0;34m(self, x, **fit_params)\u001b[0m\n\u001b[1;32m 1424\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mMapping\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1425\u001b[0m \u001b[0mx_dict\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_merge_x_and_fit_params\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfit_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1426\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmodule_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mx_dict\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1427\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmodule_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mfit_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1428\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m_call_impl\u001b[0;34m(self, *input, **kwargs)\u001b[0m\n\u001b[1;32m 1128\u001b[0m if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks\n\u001b[1;32m 1129\u001b[0m or _global_forward_hooks or _global_forward_pre_hooks):\n\u001b[0;32m-> 1130\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mforward_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1131\u001b[0m \u001b[0;31m# Do not call functions when jit is used\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1132\u001b[0m \u001b[0mfull_backward_hooks\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnon_full_backward_hooks\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mforward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 16\u001b[0m \u001b[0mpred\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbert\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 17\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mpred\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlogits\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mAttributeError\u001b[0m: 'BaseModelOutput' object has no attribute 'logits'"
]
}
],
"source": [
"%time pipeline.fit(X_train, y_train)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "7CIMeiwJxSBB",
"outputId": "a4ae90a1-28ac-4fb8-b56b-00250c1a75ce"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 1min, sys: 72.7 ms, total: 1min\n",
"Wall time: 1min\n"
]
}
],
"source": [
"%%time\n",
"with torch.inference_mode():\n",
" y_pred = pipeline.predict(X_test)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "klFNuYHIznkQ",
"outputId": "c1559db6-efcc-4e8a-85cf-98b4fee97594"
},
"outputs": [
{
"data": {
"text/plain": [
"0.834640522875817"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"accuracy_score(y_test, y_pred)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "iT83HG3Yzujb",
"outputId": "767ea1e4-a296-4987-83cb-de7903bd96b7"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"F1 Score : 0.834640522875817\n",
" precision recall f1-score support\n",
"\n",
" 0 0.83 1.00 0.91 2554\n",
" 1 0.00 0.00 0.00 506\n",
"\n",
" accuracy 0.83 3060\n",
" macro avg 0.42 0.50 0.45 3060\n",
"weighted avg 0.70 0.83 0.76 3060\n",
"\n"
]
}
],
"source": [
"from sklearn.metrics import confusion_matrix, f1_score, classification_report\n",
"print('F1 Score : {}'.format(f1_score(y_test, y_pred, average='micro')))\n",
"print(classification_report(y_test, y_pred))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 609
},
"id": "Ko4rgtJe0CiU",
"outputId": "1102d0d4-04d9-4c7c-fc38-d36cea3bce43"
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import seaborn as sns\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.metrics import confusion_matrix, f1_score\n",
"cf_matrix = confusion_matrix(y_test, y_pred)\n",
"fig, ax = plt.subplots(figsize=(15,10))\n",
"sns.heatmap(cf_matrix, linewidths=1, annot=True, ax=ax, fmt='g')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "OCR4cW4yM4-X"
},
"outputs": [],
"source": [
"# deberta"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "cJDmaDlonfge",
"outputId": "8452adf7-2ba5-4383-f740-f39cf248c939"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"F1 Score : 0.8137254901960784\n",
" precision recall f1-score support\n",
"\n",
" 0 0.86 0.77 0.81 755\n",
" 1 0.95 0.99 0.97 1010\n",
" 2 0.55 0.66 0.60 217\n",
" 3 0.72 0.67 0.70 273\n",
" 4 0.82 0.87 0.85 292\n",
" 5 0.53 0.56 0.55 186\n",
" 6 0.64 0.49 0.55 148\n",
" 7 0.74 0.84 0.79 179\n",
"\n",
" accuracy 0.81 3060\n",
" macro avg 0.73 0.73 0.73 3060\n",
"weighted avg 0.82 0.81 0.81 3060\n",
"\n"
]
}
],
"source": [
"print('F1 Score : {}'.format(f1_score(y_test, y_pred, average='micro')))\n",
"print(classification_report(y_test, y_pred))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 612
},
"id": "JRyKi4bangMS",
"outputId": "91171cbe-8987-4962-afec-7f6bbb66ca72"
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import seaborn as sns\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.metrics import confusion_matrix\n",
"\n",
"cf_matrix = confusion_matrix(y_test, y_pred)\n",
"fig, ax = plt.subplots(figsize=(15,10))\n",
"sns.heatmap(cf_matrix, linewidths=1, annot=True, ax=ax, fmt='g')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "GS_YvaTGnvCt"
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "d_9EcWGk2cwK"
},
"source": [
"# tensorflow model"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "p029caIE2lnE"
},
"outputs": [],
"source": [
"! pip install transformers -q"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "ulunKB682cOI",
"outputId": "d53edfa8-1aa3-4c38-b1ca-56f04dff39e3"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"TF version: 2.9.2\n"
]
}
],
"source": [
"import os\n",
"import numpy as np\n",
"import pandas as pd\n",
"import seaborn as sns\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.model_selection import train_test_split\n",
"import tensorflow as tf\n",
"print(f'TF version: {tf.__version__}')\n",
"from tensorflow.keras import layers\n",
"import transformers"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "pHjXHPDM2iT4"
},
"outputs": [],
"source": [
"def set_seed(seed=42):\n",
" np.random.seed(seed)\n",
" tf.random.set_seed(seed)\n",
" os.environ['PYTHONHASHSEED'] = str(seed)\n",
"# os.environ['TF_DETERMINISTIC_OPS'] = '1'\n",
"set_seed(42)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 861
},
"id": "WXRLitt22uFZ",
"outputId": "bf83f234-521c-42b9-d09a-81906fd26bb5"
},
"outputs": [
{
"data": {
"text/html": [
"\n",
" \n",
"
\n",
"
\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" text \n",
" covid_stats \n",
" vaccination \n",
" covid_politics \n",
" humour \n",
" lockdown \n",
" civic_views \n",
" life_during_pandemic \n",
" covid_waves_and_variants \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" चितवनमा ९३ हजार बढीले लगाए कोरोनाविरुद्धको खोप \n",
" 0 \n",
" 1 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" \n",
" \n",
" 1 \n",
" जोरबिजोर भनेको गाडी संख्या धेरै भएर ट्राफिक जा... \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" 2 \n",
" ३१ सय ८ जना संक्रमित थपिदा १५ सय ९५ जना डिस्चा... \n",
" 1 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" 3 \n",
" कोरोनाको जोखिम बढ्दै: झापाको दमक फेरी १ हफ्ता ... \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" 4 \n",
" कोरोना खोप राज्यले निःशुल्क लगाइरहेकै छ र थप ल... \n",
" 0 \n",
" 1 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
"
\n",
"
\n",
"
\n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
"\n",
" \n",
"
\n",
"
\n",
" "
],
"text/plain": [
" text covid_stats \\\n",
"0 चितवनमा ९३ हजार बढीले लगाए कोरोनाविरुद्धको खोप 0 \n",
"1 जोरबिजोर भनेको गाडी संख्या धेरै भएर ट्राफिक जा... 0 \n",
"2 ३१ सय ८ जना संक्रमित थपिदा १५ सय ९५ जना डिस्चा... 1 \n",
"3 कोरोनाको जोखिम बढ्दै: झापाको दमक फेरी १ हफ्ता ... 0 \n",
"4 कोरोना खोप राज्यले निःशुल्क लगाइरहेकै छ र थप ल... 0 \n",
"\n",
" vaccination covid_politics humour lockdown civic_views \\\n",
"0 1 0 0 0 0 \n",
"1 0 0 0 0 1 \n",
"2 0 0 0 0 0 \n",
"3 0 0 0 1 0 \n",
"4 1 0 0 0 1 \n",
"\n",
" life_during_pandemic covid_waves_and_variants \n",
"0 0 1 \n",
"1 0 0 \n",
"2 0 0 \n",
"3 0 0 \n",
"4 0 0 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"---------DataFrame Summary---------\n",
"\n",
"RangeIndex: 12241 entries, 0 to 12240\n",
"Data columns (total 9 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 text 12241 non-null object\n",
" 1 covid_stats 12241 non-null int64 \n",
" 2 vaccination 12241 non-null int64 \n",
" 3 covid_politics 12241 non-null int64 \n",
" 4 humour 12241 non-null int64 \n",
" 5 lockdown 12241 non-null int64 \n",
" 6 civic_views 12241 non-null int64 \n",
" 7 life_during_pandemic 12241 non-null int64 \n",
" 8 covid_waves_and_variants 12241 non-null int64 \n",
"dtypes: int64(8), object(1)\n",
"memory usage: 860.8+ KB\n"
]
}
],
"source": [
"df = pd.read_csv('https://github.com/naamiinepal/covid-tweet-classification/blob/main/training/datasets/nepali_tweets_dataset_labelled_tweets_feb_23.csv?raw=true')\n",
"display(df.head())\n",
"print('\\n---------DataFrame Summary---------')\n",
"df.info()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "aVhgsjuD23ss",
"outputId": "334eaec9-7167-4ff2-909b-b6a8d8bb6ba9"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training examples: 9792, validation examples: 2449\n"
]
}
],
"source": [
"train_df, val_df = train_test_split(df, test_size=0.2, random_state=42)\n",
"print(f'Training examples: {len(train_df)}, validation examples: {len(val_df)}')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "nuhTxllK29vM"
},
"outputs": [],
"source": [
"TARGET_COLS = ['covid_stats', 'vaccination', 'covid_politics', 'humour', 'lockdown', 'civic_views','life_during_pandemic','covid_waves_and_variants']\n",
"\n",
"MAX_LENGTH = 512\n",
"BATCH_SIZE = 8\n",
"BERT_MODEL = \"NepBERTa/NepBERTa\""
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "GGel6-153aaW"
},
"outputs": [],
"source": [
"class BertDataGenerator(tf.keras.utils.Sequence):\n",
" def __init__(\n",
" self,\n",
" text,\n",
" labels,\n",
" batch_size=BATCH_SIZE,\n",
" shuffle=True,\n",
" include_targets=True,\n",
" ):\n",
" self.text = text\n",
" self.labels = labels\n",
" self.shuffle = shuffle\n",
" self.batch_size = batch_size\n",
" self.include_targets = include_targets\n",
" self.tokenizer = transformers.BertTokenizer.from_pretrained(\n",
" BERT_MODEL, do_lower_case=True\n",
" )\n",
" self.indexes = np.arange(len(self.text))\n",
" self.on_epoch_end()\n",
"\n",
" def __len__(self):\n",
" return len(self.text) // self.batch_size\n",
"\n",
" def __getitem__(self, idx):\n",
" indexes = self.indexes[idx * self.batch_size : (idx + 1) * self.batch_size]\n",
" batch_texts = self.text[indexes]\n",
"\n",
" encoded = self.tokenizer.batch_encode_plus(\n",
" batch_texts.tolist(),\n",
" add_special_tokens=True,\n",
" max_length=MAX_LENGTH,\n",
" return_attention_mask=True,\n",
" return_token_type_ids=True,\n",
" return_tensors=\"tf\",\n",
" truncation=True,\n",
" padding='max_length'\n",
" )\n",
"\n",
" input_ids = np.array(encoded[\"input_ids\"], dtype=\"int32\")\n",
" attention_masks = np.array(encoded[\"attention_mask\"], dtype=\"int32\")\n",
" token_type_ids = np.array(encoded[\"token_type_ids\"], dtype=\"int32\")\n",
"\n",
" if self.include_targets:\n",
" labels = np.array(self.labels[indexes], dtype=\"float32\")\n",
" return [input_ids, attention_masks, token_type_ids], labels\n",
" else:\n",
" return [input_ids, attention_masks, token_type_ids]\n",
"\n",
" def on_epoch_end(self):\n",
" if self.shuffle:\n",
" np.random.RandomState(42).shuffle(self.indexes)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "QGAYLx2I39UM"
},
"outputs": [],
"source": [
"train_data = BertDataGenerator(\n",
" train_df[\"text\"].values.astype(\"str\"),\n",
" np.array(train_df[TARGET_COLS]),\n",
" batch_size=BATCH_SIZE,\n",
" shuffle=True,\n",
")\n",
"valid_data = BertDataGenerator(\n",
" val_df[\"text\"].values.astype(\"str\"),\n",
" np.array(val_df[TARGET_COLS]),\n",
" batch_size=BATCH_SIZE,\n",
" shuffle=False,\n",
")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "b4Vmb2bQ4D5n",
"outputId": "93dc0cc6-1bd9-48f8-ebe9-1f128e73c188"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"input_ids:\n",
"[[ 0 3400 2421 ... 1 1 1]\n",
" [ 0 2221 2175 ... 1 1 1]\n",
" [ 0 6411 4101 ... 1 1 1]\n",
" ...\n",
" [ 0 2175 25274 ... 1 1 1]\n",
" [ 0 4229 1010 ... 1 1 1]\n",
" [ 0 3687 1026 ... 1 1 1]] \n",
" With shape (8, 512) and dtype int32\n",
"\n",
"attention_mask:\n",
"[[1 1 1 ... 0 0 0]\n",
" [1 1 1 ... 0 0 0]\n",
" [1 1 1 ... 0 0 0]\n",
" ...\n",
" [1 1 1 ... 0 0 0]\n",
" [1 1 1 ... 0 0 0]\n",
" [1 1 1 ... 0 0 0]] \n",
" With shape (8, 512) and dtype int32\n",
"\n",
"token_type_ids:\n",
"[[0 0 0 ... 0 0 0]\n",
" [0 0 0 ... 0 0 0]\n",
" [0 0 0 ... 0 0 0]\n",
" ...\n",
" [0 0 0 ... 0 0 0]\n",
" [0 0 0 ... 0 0 0]\n",
" [0 0 0 ... 0 0 0]] \n",
" With shape (8, 512) and dtype int32\n",
"\n",
"Labels:\n",
"[[1. 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 1. 0. 0. 0.]\n",
" [0. 0. 0. 1. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 1. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 0. 1. 0.]\n",
" [0. 0. 0. 1. 0. 0. 0. 0.]\n",
" [0. 0. 0. 0. 0. 1. 0. 0.]] \n",
" With shape (8, 8) and dtype float32\n"
]
}
],
"source": [
"inputs, labels = next(iter(train_data))\n",
"print(f'input_ids:\\n{inputs[0]} \\n With shape {inputs[0].shape} and dtype {inputs[0].dtype}\\n')\n",
"print(f'attention_mask:\\n{inputs[1]} \\n With shape {inputs[1].shape} and dtype {inputs[0].dtype}\\n')\n",
"print(f'token_type_ids:\\n{inputs[2]} \\n With shape {inputs[2].shape} and dtype {inputs[0].dtype}\\n')\n",
"print(f'Labels:\\n{labels} \\n With shape {labels.shape} and dtype {labels.dtype}')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "T50actkc4XEe"
},
"outputs": [],
"source": [
"def get_model():\n",
" input_ids = tf.keras.layers.Input(\n",
" shape=(MAX_LENGTH,), dtype=tf.int32, name=\"input_ids\"\n",
" )\n",
"\n",
" attention_masks = tf.keras.layers.Input(\n",
" shape=(MAX_LENGTH,), dtype=tf.int32, name=\"attention_masks\"\n",
" )\n",
"\n",
" token_type_ids = tf.keras.layers.Input(\n",
" shape=(MAX_LENGTH,), dtype=tf.int32, name=\"token_type_ids\"\n",
" )\n",
"\n",
" bert_model = transformers.TFBertModel.from_pretrained(BERT_MODEL)\n",
" bert_model.trainable = True\n",
"\n",
" bert_output = bert_model.bert(\n",
" input_ids, attention_mask=attention_masks, token_type_ids=token_type_ids\n",
" )\n",
" cls_output = bert_output.last_hidden_state[:, 0, :]\n",
" output = layers.Dense(8)(cls_output)\n",
" model = tf.keras.Model(inputs=[input_ids, attention_masks, token_type_ids], outputs=output)\n",
"\n",
" return model\n",
"\n",
"\n",
"optimizer=tf.optimizers.Adam(learning_rate=5e-5)\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "LHKt_ZDJCUx8",
"outputId": "16b8f118-7fe1-46ee-93de-5a95a7b10074"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n",
"Collecting tensorflow_addons\n",
" Downloading tensorflow_addons-0.18.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB)\n",
"\u001b[K |████████████████████████████████| 1.1 MB 24.4 MB/s \n",
"\u001b[?25hRequirement already satisfied: typeguard>=2.7 in /usr/local/lib/python3.7/dist-packages (from tensorflow_addons) (2.7.1)\n",
"Requirement already satisfied: packaging in /usr/local/lib/python3.7/dist-packages (from tensorflow_addons) (21.3)\n",
"Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /usr/local/lib/python3.7/dist-packages (from packaging->tensorflow_addons) (3.0.9)\n",
"Installing collected packages: tensorflow-addons\n",
"Successfully installed tensorflow-addons-0.18.0\n"
]
}
],
"source": [
"pip install tensorflow_addons"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "PcRNtod9BsLl"
},
"outputs": [],
"source": [
"import tensorflow as tf\n",
"import tensorflow_addons as tfa\n",
"def get_loss_metrics():\n",
" loss = tf.keras.losses.BinaryCrossentropy(from_logits=True)\n",
" metrics = [\n",
" tf.metrics.BinaryAccuracy(),\n",
" tfa.metrics.F1Score(num_classes=8, average=\"weighted\", threshold=0.5),\n",
" tf.keras.metrics.AUC(\n",
" 2449,\n",
" curve=\"PR\",\n",
" multi_label=True,\n",
" num_labels=8,\n",
" from_logits=True,\n",
" ),\n",
" ]\n",
"\n",
" return loss, metrics"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "49hCKrGm6WqN",
"outputId": "677272d8-cbba-4c6c-81e5-b79f04c76bec"
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Some layers from the model checkpoint at NepBERTa/NepBERTa were not used when initializing TFBertModel: ['mlm___cls']\n",
"- This IS expected if you are initializing TFBertModel from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).\n",
"- This IS NOT expected if you are initializing TFBertModel from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\n",
"Some layers of TFBertModel were not initialized from the model checkpoint at NepBERTa/NepBERTa and are newly initialized: ['bert/pooler/dense/bias:0', 'bert/pooler/dense/kernel:0']\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": [
"Model: \"model\"\n",
"__________________________________________________________________________________________________\n",
" Layer (type) Output Shape Param # Connected to \n",
"==================================================================================================\n",
" input_ids (InputLayer) [(None, 512)] 0 [] \n",
" \n",
" attention_masks (InputLayer) [(None, 512)] 0 [] \n",
" \n",
" token_type_ids (InputLayer) [(None, 512)] 0 [] \n",
" \n",
" bert (TFBertMainLayer) TFBaseModelOutputWi 109482240 ['input_ids[0][0]', \n",
" thPoolingAndCrossAt 'attention_masks[0][0]', \n",
" tentions(last_hidde 'token_type_ids[0][0]'] \n",
" n_state=(None, 512, \n",
" 768), \n",
" pooler_output=(Non \n",
" e, 768), \n",
" past_key_values=No \n",
" ne, hidden_states=N \n",
" one, attentions=Non \n",
" e, cross_attentions \n",
" =None) \n",
" \n",
" tf.__operators__.getitem (Slic (None, 768) 0 ['bert[0][0]'] \n",
" ingOpLambda) \n",
" \n",
" dense (Dense) (None, 8) 6152 ['tf.__operators__.getitem[0][0]'\n",
" ] \n",
" \n",
"==================================================================================================\n",
"Total params: 109,488,392\n",
"Trainable params: 109,488,392\n",
"Non-trainable params: 0\n",
"__________________________________________________________________________________________________\n"
]
}
],
"source": [
"tf.keras.backend.clear_session()\n",
"model = get_model()\n",
"model.summary()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "811sszb3DR68"
},
"outputs": [],
"source": [
"loss, metrics = get_loss_metrics()\n",
"model.compile(optimizer=optimizer, loss=loss, metrics=metrics)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "RnpqEzBG6jjJ",
"outputId": "171bbea1-3309-4d00-eae7-3aeb92f7b1ab"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/5\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"WARNING:tensorflow:Gradients do not exist for variables ['tf_bert_model/bert/pooler/dense/kernel:0', 'tf_bert_model/bert/pooler/dense/bias:0'] when minimizing the loss. If you're using `model.compile()`, did you forget to provide a `loss`argument?\n",
"WARNING:tensorflow:Gradients do not exist for variables ['tf_bert_model/bert/pooler/dense/kernel:0', 'tf_bert_model/bert/pooler/dense/bias:0'] when minimizing the loss. If you're using `model.compile()`, did you forget to provide a `loss`argument?\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"1224/1224 [==============================] - 1299s 1s/step - loss: 0.2240 - binary_accuracy: 0.9041 - f1_score: 0.6557 - auc: 0.7494 - val_loss: 0.2109 - val_binary_accuracy: 0.9114 - val_f1_score: 0.6737 - val_auc: 0.8044\n",
"Epoch 2/5\n",
"1224/1224 [==============================] - 1277s 1s/step - loss: 0.1700 - binary_accuracy: 0.9272 - f1_score: 0.7646 - auc: 0.8348 - val_loss: 0.1922 - val_binary_accuracy: 0.9201 - val_f1_score: 0.7248 - val_auc: 0.8367\n",
"Epoch 3/5\n",
"1224/1224 [==============================] - 1276s 1s/step - loss: 0.1531 - binary_accuracy: 0.9363 - f1_score: 0.8033 - auc: 0.8692 - val_loss: 0.1994 - val_binary_accuracy: 0.9152 - val_f1_score: 0.7088 - val_auc: 0.8284\n",
"Epoch 4/5\n",
"1224/1224 [==============================] - 1276s 1s/step - loss: 0.1268 - binary_accuracy: 0.9476 - f1_score: 0.8442 - auc: 0.9071 - val_loss: 0.1939 - val_binary_accuracy: 0.9287 - val_f1_score: 0.7901 - val_auc: 0.8386\n",
"Epoch 5/5\n",
" 275/1224 [=====>........................] - ETA: 15:09 - loss: 0.0909 - binary_accuracy: 0.9665 - f1_score: 0.9049 - auc: 0.9507"
]
}
],
"source": [
"model.fit(train_data, validation_data=valid_data, epochs=5)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "68tsCjjA7xhV",
"outputId": "3987559e-7b1b-4f28-c001-b8dfe13667b7"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"306/306 [==============================] - 111s 340ms/step\n"
]
},
{
"data": {
"text/plain": [
"array([[-2.1905882 , -3.2394354 , -3.13258 , -2.1132884 , -2.4265406 ,\n",
" -0.6075255 , -1.2629524 , -1.5562562 ],\n",
" [-3.583075 , 2.5596383 , 0.3140234 , -5.727357 , -5.440543 ,\n",
" -5.8377833 , -5.9488435 , -3.1575963 ],\n",
" [-5.6693244 , 2.5711992 , 0.31066525, -4.5653663 , -4.1973977 ,\n",
" -2.9523754 , -4.2711267 , -4.5014157 ],\n",
" [-6.0214763 , 2.1736732 , -0.54616076, -3.678521 , -3.931436 ,\n",
" -5.0702376 , -2.831023 , -2.5294201 ],\n",
" [-5.866425 , 1.5135366 , -1.4845128 , -1.75077 , -2.6480722 ,\n",
" -0.91907746, -2.4754624 , -2.8797846 ]], dtype=float32)"
]
},
"execution_count": 63,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pred = model.predict(valid_data)\n",
"pred[:5]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "z6_qTOKWGJhN",
"outputId": "63cd1a07-d362-4c2d-c6ea-533939260043"
},
"outputs": [
{
"data": {
"text/plain": [
"array([[1, 0, 0, ..., 1, 0, 0],\n",
" [0, 1, 1, ..., 0, 0, 0],\n",
" [0, 1, 1, ..., 0, 0, 0],\n",
" ...,\n",
" [0, 1, 1, ..., 0, 0, 0],\n",
" [0, 1, 0, ..., 0, 0, 0],\n",
" [0, 0, 0, ..., 1, 0, 0]])"
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"valid_data.labels"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "7uM0EOfHHvYb",
"outputId": "6a7b1ac7-4ce8-4290-f9b8-99e9122a9ed2"
},
"outputs": [
{
"data": {
"text/plain": [
"PreTrainedTokenizer(name_or_path='NepBERTa/NepBERTa', vocab_size=30523, model_max_len=1000000000000000019884624838656, is_fast=False, padding_side='right', truncation_side='right', special_tokens={'unk_token': '[UNK]', 'sep_token': '[SEP]', 'pad_token': '[PAD]', 'cls_token': '[CLS]', 'mask_token': '[MASK]'})"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
}
],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 627
},
"id": "eBfa_mbEGvr6",
"outputId": "8a7a1a36-bb0c-4705-c3f5-f245b2d15f7d"
},
"outputs": [
{
"ename": "ValueError",
"evalue": "ignored",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalid_data\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtext\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/keras/utils/traceback_utils.py\u001b[0m in \u001b[0;36merror_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 65\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# pylint: disable=broad-except\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 66\u001b[0m \u001b[0mfiltered_tb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_process_traceback_frames\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__traceback__\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 67\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwith_traceback\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfiltered_tb\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 68\u001b[0m \u001b[0;32mfinally\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 69\u001b[0m \u001b[0;32mdel\u001b[0m \u001b[0mfiltered_tb\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/keras/engine/training.py\u001b[0m in \u001b[0;36mtf__predict_function\u001b[0;34m(iterator)\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 14\u001b[0m \u001b[0mdo_return\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 15\u001b[0;31m \u001b[0mretval_\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mag__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconverted_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mag__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mld\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstep_function\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mag__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mld\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mag__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mld\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0miterator\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfscope\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 16\u001b[0m \u001b[0;32mexcept\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0mdo_return\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mValueError\u001b[0m: in user code:\n\n File \"/usr/local/lib/python3.7/dist-packages/keras/engine/training.py\", line 1845, in predict_function *\n return step_function(self, iterator)\n File \"/usr/local/lib/python3.7/dist-packages/keras/engine/training.py\", line 1834, in step_function **\n outputs = model.distribute_strategy.run(run_step, args=(data,))\n File \"/usr/local/lib/python3.7/dist-packages/keras/engine/training.py\", line 1823, in run_step **\n outputs = model.predict_step(data)\n File \"/usr/local/lib/python3.7/dist-packages/keras/engine/training.py\", line 1791, in predict_step\n return self(x, training=False)\n File \"/usr/local/lib/python3.7/dist-packages/keras/utils/traceback_utils.py\", line 67, in error_handler\n raise e.with_traceback(filtered_tb) from None\n File \"/usr/local/lib/python3.7/dist-packages/keras/engine/input_spec.py\", line 200, in assert_input_compatibility\n raise ValueError(f'Layer \"{layer_name}\" expects {len(input_spec)} input(s),'\n\n ValueError: Layer \"model\" expects 3 input(s), but it received 1 input tensors. Inputs received: []\n"
]
}
],
"source": [
"model.predict(valid_data.text)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "irT-es5kHGHk"
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "GEDb6_BZOmIe"
},
"source": [
"# multi label Bert type model finetuning"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "AszFa0klO0C1",
"outputId": "ecc08111-03b1-4825-bb7d-82348d048705"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[K |████████████████████████████████| 5.5 MB 13.8 MB/s \n",
"\u001b[K |████████████████████████████████| 182 kB 75.6 MB/s \n",
"\u001b[K |████████████████████████████████| 7.6 MB 47.6 MB/s \n",
"\u001b[?25h"
]
}
],
"source": [
"!pip install transformers -q"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"id": "0LdbRKQnOrOB"
},
"outputs": [],
"source": [
"import os\n",
"import re\n",
"import string\n",
"import json\n",
"import numpy as np\n",
"import pandas as pd\n",
"from sklearn import metrics\n",
"\n",
"import transformers\n",
"import torch\n",
"from torch.utils.data import Dataset, DataLoader, RandomSampler, SequentialSampler\n",
"from transformers import BertTokenizer, AutoTokenizer, BertModel, BertConfig, AutoModel, AdamW, get_linear_schedule_with_warmup, get_cosine_schedule_with_warmup\n",
"import warnings\n",
"warnings.filterwarnings('ignore')\n",
"\n",
"pd.set_option(\"display.max_columns\", None)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 206
},
"id": "Pswry9G_OweL",
"outputId": "0c885dea-3633-45dd-e40c-9ba4266a3ff1"
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
" Text Category\n",
"0 बिहार मे होबय वाला नगर निगम \\nचुनाव 2022 के नव... Politics\n",
"1 राज्य मे भूमि सँ जुड़ल भ्रष्टाचार \\nकेर मामिला ... Politics\n",
"2 गांधीनगर | राष्ट्रीय एकता दिवस पर \\nसोम दिन गु... Politics\n",
"3 गुजरात केर मोरबी मे रवि दिन सांझ भेल दर्दनाक द... Politics\n",
"4 गुजरातक मोरबी\\nकेर उक्त झुलैत पुल \\nलगभग 150 स... Politics"
],
"text/html": [
"\n",
" \n",
"
\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" Text \n",
" Category \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" बिहार मे होबय वाला नगर निगम \\nचुनाव 2022 के नव... \n",
" Politics \n",
" \n",
" \n",
" 1 \n",
" राज्य मे भूमि सँ जुड़ल भ्रष्टाचार \\nकेर मामिला ... \n",
" Politics \n",
" \n",
" \n",
" 2 \n",
" गांधीनगर | राष्ट्रीय एकता दिवस पर \\nसोम दिन गु... \n",
" Politics \n",
" \n",
" \n",
" 3 \n",
" गुजरात केर मोरबी मे रवि दिन सांझ भेल दर्दनाक द... \n",
" Politics \n",
" \n",
" \n",
" 4 \n",
" गुजरातक मोरबी\\nकेर उक्त झुलैत पुल \\nलगभग 150 स... \n",
" Politics \n",
" \n",
" \n",
"
\n",
"
\n",
"
\n",
"
\n"
]
},
"metadata": {}
}
],
"source": [
"df = pd.read_csv('/content/drive/MyDrive/merged_data.csv')\n",
"df = df.dropna()\n",
"df = df.reset_index(drop=True)\n",
"display(df.head())"
]
},
{
"cell_type": "code",
"source": [
"# Create one-hot encoding for 'Category' with column names as unique values\n",
"df_one_hot = pd.get_dummies(df['Category'])\n",
"df_one_hot"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 444
},
"id": "4_fNJOcndC7m",
"outputId": "ae8bc913-7875-4173-c33f-9b1187120615"
},
"execution_count": 29,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" Culture Economy EduTech Entertainment Health Interview \\\n",
"0 0 0 0 0 0 0 \n",
"1 0 0 0 0 0 0 \n",
"2 0 0 0 0 0 0 \n",
"3 0 0 0 0 0 0 \n",
"4 0 0 0 0 0 0 \n",
"... ... ... ... ... ... ... \n",
"15465 0 1 0 0 0 0 \n",
"15466 0 1 0 0 0 0 \n",
"15467 0 1 0 0 0 0 \n",
"15468 0 1 0 0 0 0 \n",
"15469 0 1 0 0 0 0 \n",
"\n",
" Literature Opinion Politics Sports \n",
"0 0 0 1 0 \n",
"1 0 0 1 0 \n",
"2 0 0 1 0 \n",
"3 0 0 1 0 \n",
"4 0 0 1 0 \n",
"... ... ... ... ... \n",
"15465 0 0 0 0 \n",
"15466 0 0 0 0 \n",
"15467 0 0 0 0 \n",
"15468 0 0 0 0 \n",
"15469 0 0 0 0 \n",
"\n",
"[15470 rows x 10 columns]"
],
"text/html": [
"\n",
" \n",
"
\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" Culture \n",
" Economy \n",
" EduTech \n",
" Entertainment \n",
" Health \n",
" Interview \n",
" Literature \n",
" Opinion \n",
" Politics \n",
" Sports \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" \n",
" \n",
" 1 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" \n",
" \n",
" 2 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" \n",
" \n",
" 3 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" \n",
" \n",
" 4 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" \n",
" \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" \n",
" \n",
" 15465 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" 15466 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" 15467 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" 15468 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" 15469 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
"
\n",
"
15470 rows × 10 columns
\n",
"
\n",
"
\n",
"
\n"
]
},
"metadata": {},
"execution_count": 29
}
]
},
{
"cell_type": "code",
"source": [
"# Concatenate one-hot encoding with the original DataFrame\n",
"df = pd.concat([df, df_one_hot], axis=1)"
],
"metadata": {
"id": "V37S2kv5eTLm"
},
"execution_count": 30,
"outputs": []
},
{
"cell_type": "code",
"source": [
"df.head()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 643
},
"id": "XAp5dLD-eVUy",
"outputId": "948e4ea3-0535-4829-b5f3-620d2e3cf157"
},
"execution_count": 31,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" Text Category Culture \\\n",
"0 बिहार मे होबय वाला नगर निगम \\nचुनाव 2022 के नव... Politics 0 \n",
"1 राज्य मे भूमि सँ जुड़ल भ्रष्टाचार \\nकेर मामिला ... Politics 0 \n",
"2 गांधीनगर | राष्ट्रीय एकता दिवस पर \\nसोम दिन गु... Politics 0 \n",
"3 गुजरात केर मोरबी मे रवि दिन सांझ भेल दर्दनाक द... Politics 0 \n",
"4 गुजरातक मोरबी\\nकेर उक्त झुलैत पुल \\nलगभग 150 स... Politics 0 \n",
"\n",
" Economy EduTech Entertainment Health Interview Literature Opinion \\\n",
"0 0 0 0 0 0 0 0 \n",
"1 0 0 0 0 0 0 0 \n",
"2 0 0 0 0 0 0 0 \n",
"3 0 0 0 0 0 0 0 \n",
"4 0 0 0 0 0 0 0 \n",
"\n",
" Politics Sports \n",
"0 1 0 \n",
"1 1 0 \n",
"2 1 0 \n",
"3 1 0 \n",
"4 1 0 "
],
"text/html": [
"\n",
" \n",
"
\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" Text \n",
" Category \n",
" Culture \n",
" Economy \n",
" EduTech \n",
" Entertainment \n",
" Health \n",
" Interview \n",
" Literature \n",
" Opinion \n",
" Politics \n",
" Sports \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" बिहार मे होबय वाला नगर निगम \\nचुनाव 2022 के नव... \n",
" Politics \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" \n",
" \n",
" 1 \n",
" राज्य मे भूमि सँ जुड़ल भ्रष्टाचार \\nकेर मामिला ... \n",
" Politics \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" \n",
" \n",
" 2 \n",
" गांधीनगर | राष्ट्रीय एकता दिवस पर \\nसोम दिन गु... \n",
" Politics \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" \n",
" \n",
" 3 \n",
" गुजरात केर मोरबी मे रवि दिन सांझ भेल दर्दनाक द... \n",
" Politics \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" \n",
" \n",
" 4 \n",
" गुजरातक मोरबी\\nकेर उक्त झुलैत पुल \\nलगभग 150 स... \n",
" Politics \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" \n",
" \n",
"
\n",
"
\n",
"
\n",
"
\n"
]
},
"metadata": {},
"execution_count": 31
}
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "rDIVLgyUO_g5",
"outputId": "2201e38f-f506-404a-8cee-2ec91a71ae84"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Training examples: 12376, validation examples: 3094\n"
]
}
],
"source": [
"from sklearn.model_selection import train_test_split\n",
"df_train, df_dev = train_test_split(df, test_size=0.2, random_state=42)\n",
"print(f'Training examples: {len(df_train)}, validation examples: {len(df_dev)}')"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"id": "beXrYXW0PB7b",
"outputId": "57b9b249-310c-43f0-870c-21d9f8d093f8"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" index Text Category \\\n",
"0 14374 पवन.- कार्टून मे उत्तराधिकारी सन कोनो चीज नहि... Interview \n",
"1 14492 उत्तर – संगीत क विधिवत शिक्षा हम उस्ताद जौहर अ... Interview \n",
"2 9144 3- बाल शिक्षासँ वंचित- परिवार में आर्थिक स्थित... Literature \n",
"3 3268 एहिमे हिज्जेक गडबडी, शब्दक अशुद्धि, तकनीकी जे ... Culture \n",
"4 2664 आ दोसर, जेना कि कतहु पढ़नहुँ छी जे पृथ्वी पर कत... Culture \n",
"... ... ... ... \n",
"12371 5191 राम जानकी विवाहपञ्चमी महोत्सव विशेषः अन्तिम वि... Culture \n",
"12372 13418 \"दर्शन,– प्रवीण नारायण चौधरी,चलैत चलू – बढैत च... Opinion \n",
"12373 5390 जिला विधिक सेवा प्राधिकरण के \\nतत्वावधान में म... Culture \n",
"12374 860 वार्ड नं.२के मतगणना जारी छै । तथापि आएल मतगणना... Politics \n",
"12375 7270 क्रिस्टियन रेसल रॉयलडो रोनाल्डो आरू अल्वारो मड... Sports \n",
"\n",
" Culture Economy EduTech Entertainment Health Interview \\\n",
"0 0 0 0 0 0 1 \n",
"1 0 0 0 0 0 1 \n",
"2 0 0 0 0 0 0 \n",
"3 1 0 0 0 0 0 \n",
"4 1 0 0 0 0 0 \n",
"... ... ... ... ... ... ... \n",
"12371 1 0 0 0 0 0 \n",
"12372 0 0 0 0 0 0 \n",
"12373 1 0 0 0 0 0 \n",
"12374 0 0 0 0 0 0 \n",
"12375 0 0 0 0 0 0 \n",
"\n",
" Literature Opinion Politics Sports \n",
"0 0 0 0 0 \n",
"1 0 0 0 0 \n",
"2 1 0 0 0 \n",
"3 0 0 0 0 \n",
"4 0 0 0 0 \n",
"... ... ... ... ... \n",
"12371 0 0 0 0 \n",
"12372 0 1 0 0 \n",
"12373 0 0 0 0 \n",
"12374 0 0 1 0 \n",
"12375 0 0 0 1 \n",
"\n",
"[12376 rows x 13 columns]"
],
"text/html": [
"\n",
" \n",
"
\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" index \n",
" Text \n",
" Category \n",
" Culture \n",
" Economy \n",
" EduTech \n",
" Entertainment \n",
" Health \n",
" Interview \n",
" Literature \n",
" Opinion \n",
" Politics \n",
" Sports \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 14374 \n",
" पवन.- कार्टून मे उत्तराधिकारी सन कोनो चीज नहि... \n",
" Interview \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" 1 \n",
" 14492 \n",
" उत्तर – संगीत क विधिवत शिक्षा हम उस्ताद जौहर अ... \n",
" Interview \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" 2 \n",
" 9144 \n",
" 3- बाल शिक्षासँ वंचित- परिवार में आर्थिक स्थित... \n",
" Literature \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" 3 \n",
" 3268 \n",
" एहिमे हिज्जेक गडबडी, शब्दक अशुद्धि, तकनीकी जे ... \n",
" Culture \n",
" 1 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" 4 \n",
" 2664 \n",
" आ दोसर, जेना कि कतहु पढ़नहुँ छी जे पृथ्वी पर कत... \n",
" Culture \n",
" 1 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" \n",
" \n",
" 12371 \n",
" 5191 \n",
" राम जानकी विवाहपञ्चमी महोत्सव विशेषः अन्तिम वि... \n",
" Culture \n",
" 1 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" 12372 \n",
" 13418 \n",
" \"दर्शन,– प्रवीण नारायण चौधरी,चलैत चलू – बढैत च... \n",
" Opinion \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" 12373 \n",
" 5390 \n",
" जिला विधिक सेवा प्राधिकरण के \\nतत्वावधान में म... \n",
" Culture \n",
" 1 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" 12374 \n",
" 860 \n",
" वार्ड नं.२के मतगणना जारी छै । तथापि आएल मतगणना... \n",
" Politics \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" \n",
" \n",
" 12375 \n",
" 7270 \n",
" क्रिस्टियन रेसल रॉयलडो रोनाल्डो आरू अल्वारो मड... \n",
" Sports \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" \n",
" \n",
"
\n",
"
12376 rows × 13 columns
\n",
"
\n",
"
\n",
"
\n"
]
},
"metadata": {},
"execution_count": 33
}
],
"source": [
"df_train = df_train.reset_index()\n",
"df_train"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 913
},
"id": "_RnAcL-xPEyg",
"outputId": "8c225fad-9d95-416a-d477-a618448b0c47"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" index Text Category \\\n",
"0 2519 ‘‘ देशमे अस्थिरता अशान्ति मचाबके काज नीयोजित र... Politics \n",
"1 6025 । एजेंसी डेप्टो २०। रविवार क॑ बेन स्टोक्स न॑ द... Sports \n",
"2 6366 । काठमांडू उपाध्यक्ष न्द बहादुर राज पसांग बैंग... Sports \n",
"3 6962 । अक्टूबर के बाहर काठमांडू।नेपाली केरऽ कप्तान ... Sports \n",
"4 13347 \"तुलसी कृपा रघुबंसमनि की लोह लै लौका तिरा॥\"\",\"... Opinion \n",
"... ... ... ... \n",
"3089 13860 \"बुद्धौ शरणमन्विच्छ कृपणाः फलहेतवः ॥४९॥\"\",एहि ... Opinion \n",
"3090 12897 प्रश्न मैथिली भाषाक संरक्षणक अछि, प्रश्न नव रा... EduTech \n",
"3091 5066 व्यक्तित्व परिचय एवं साक्षात्कार,– प्रवीण नारा... Culture \n",
"3092 3975 \"मोहन भारद्वाज, मधुबनी। फरबरी १९, २०१७. मैथिली... Culture \n",
"3093 3433 \"धरान, १६ दिसम्बर २०१८. मैथिली जिन्दाबाद!!\",\"क... Culture \n",
"\n",
" Culture Economy EduTech Entertainment Health Interview Literature \\\n",
"0 0 0 0 0 0 0 0 \n",
"1 0 0 0 0 0 0 0 \n",
"2 0 0 0 0 0 0 0 \n",
"3 0 0 0 0 0 0 0 \n",
"4 0 0 0 0 0 0 0 \n",
"... ... ... ... ... ... ... ... \n",
"3089 0 0 0 0 0 0 0 \n",
"3090 0 0 1 0 0 0 0 \n",
"3091 1 0 0 0 0 0 0 \n",
"3092 1 0 0 0 0 0 0 \n",
"3093 1 0 0 0 0 0 0 \n",
"\n",
" Opinion Politics Sports \n",
"0 0 1 0 \n",
"1 0 0 1 \n",
"2 0 0 1 \n",
"3 0 0 1 \n",
"4 1 0 0 \n",
"... ... ... ... \n",
"3089 1 0 0 \n",
"3090 0 0 0 \n",
"3091 0 0 0 \n",
"3092 0 0 0 \n",
"3093 0 0 0 \n",
"\n",
"[3094 rows x 13 columns]"
],
"text/html": [
"\n",
" \n",
"
\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" index \n",
" Text \n",
" Category \n",
" Culture \n",
" Economy \n",
" EduTech \n",
" Entertainment \n",
" Health \n",
" Interview \n",
" Literature \n",
" Opinion \n",
" Politics \n",
" Sports \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 2519 \n",
" ‘‘ देशमे अस्थिरता अशान्ति मचाबके काज नीयोजित र... \n",
" Politics \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" \n",
" \n",
" 1 \n",
" 6025 \n",
" । एजेंसी डेप्टो २०। रविवार क॑ बेन स्टोक्स न॑ द... \n",
" Sports \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" \n",
" \n",
" 2 \n",
" 6366 \n",
" । काठमांडू उपाध्यक्ष न्द बहादुर राज पसांग बैंग... \n",
" Sports \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" \n",
" \n",
" 3 \n",
" 6962 \n",
" । अक्टूबर के बाहर काठमांडू।नेपाली केरऽ कप्तान ... \n",
" Sports \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" \n",
" \n",
" 4 \n",
" 13347 \n",
" \"तुलसी कृपा रघुबंसमनि की लोह लै लौका तिरा॥\"\",\"... \n",
" Opinion \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" \n",
" \n",
" 3089 \n",
" 13860 \n",
" \"बुद्धौ शरणमन्विच्छ कृपणाः फलहेतवः ॥४९॥\"\",एहि ... \n",
" Opinion \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" 3090 \n",
" 12897 \n",
" प्रश्न मैथिली भाषाक संरक्षणक अछि, प्रश्न नव रा... \n",
" EduTech \n",
" 0 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" 3091 \n",
" 5066 \n",
" व्यक्तित्व परिचय एवं साक्षात्कार,– प्रवीण नारा... \n",
" Culture \n",
" 1 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" 3092 \n",
" 3975 \n",
" \"मोहन भारद्वाज, मधुबनी। फरबरी १९, २०१७. मैथिली... \n",
" Culture \n",
" 1 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" 3093 \n",
" 3433 \n",
" \"धरान, १६ दिसम्बर २०१८. मैथिली जिन्दाबाद!!\",\"क... \n",
" Culture \n",
" 1 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
"
\n",
"
3094 rows × 13 columns
\n",
"
\n",
"
\n",
"
\n"
]
},
"metadata": {},
"execution_count": 34
}
],
"source": [
"df_dev = df_dev.reset_index()\n",
"df_dev"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "yqw0hGtAPHPL",
"outputId": "6adc1e96-e0ce-4289-ad28-2ff00f0c0196"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"(12376, 13)\n",
"(3094, 13)\n"
]
}
],
"source": [
"print(df_train.shape)\n",
"print(df_dev.shape)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"id": "E9wP-NzkPMn2"
},
"outputs": [],
"source": [
"device = 'cuda' if torch.cuda.is_available() else 'cpu'"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"id": "QVYt2itwPOiQ"
},
"outputs": [],
"source": [
"# Sections of config\n",
"\n",
"# Defining some key variables that will be used later on in the training\n",
"MAX_LEN = 256\n",
"TRAIN_BATCH_SIZE = 32\n",
"VALID_BATCH_SIZE = 16\n",
"EPOCHS = 4\n",
"LEARNING_RATE = 5e-5\n",
"tokenizer = AutoTokenizer.from_pretrained('NepBERTa/NepBERTa')"
]
},
{
"cell_type": "code",
"source": [
"df['Category'].unique()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "L_lLrGv0Z5Aw",
"outputId": "b8135e51-c0df-4b2e-9c0a-db4546e16392"
},
"execution_count": 38,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array(['Politics', 'Culture', 'Sports', 'Literature', 'Entertainment',\n",
" 'Health', 'EduTech', 'Opinion', 'Interview', 'Economy'],\n",
" dtype=object)"
]
},
"metadata": {},
"execution_count": 38
}
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "LhKyZsMMPTz4",
"outputId": "44858eae-42ad-48ff-9f17-e7e972521aa2"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"['Politics',\n",
" 'Culture',\n",
" 'Sports',\n",
" 'Literature',\n",
" 'Entertainment',\n",
" 'Health',\n",
" 'EduTech',\n",
" 'Opinion',\n",
" 'Interview',\n",
" 'Economy']"
]
},
"metadata": {},
"execution_count": 39
}
],
"source": [
"target_cols = ['Politics', 'Culture', 'Sports', 'Literature', 'Entertainment',\n",
" 'Health', 'EduTech', 'Opinion', 'Interview', 'Economy']\n",
"target_cols"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"id": "LhPmKFjkPV7J"
},
"outputs": [],
"source": [
"class BERTDataset(Dataset):\n",
" def __init__(self, df, tokenizer, max_len):\n",
" self.df = df\n",
" self.max_len = max_len\n",
" self.text = df.Text\n",
" self.tokenizer = tokenizer\n",
" self.targets = df[target_cols].values\n",
"\n",
" def __len__(self):\n",
" return len(self.df)\n",
"\n",
" def __getitem__(self, index):\n",
" text = self.text[index]\n",
" inputs = self.tokenizer.encode_plus(\n",
" text,\n",
" truncation=True,\n",
" add_special_tokens=True,\n",
" max_length=self.max_len,\n",
" padding='max_length',\n",
" return_token_type_ids=True\n",
" )\n",
" ids = inputs['input_ids']\n",
" mask = inputs['attention_mask']\n",
" token_type_ids = inputs[\"token_type_ids\"]\n",
"\n",
" return {\n",
" 'ids': torch.tensor(ids, dtype=torch.long),\n",
" 'mask': torch.tensor(mask, dtype=torch.long),\n",
" 'token_type_ids': torch.tensor(token_type_ids, dtype=torch.long),\n",
" 'targets': torch.tensor(self.targets[index], dtype=torch.float)\n",
" }"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"id": "aHG6rpyZPYOc"
},
"outputs": [],
"source": [
"train_dataset = BERTDataset(df_train, tokenizer, MAX_LEN)\n",
"valid_dataset = BERTDataset(df_dev, tokenizer, MAX_LEN)"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"id": "Z-2fqmrGPacn"
},
"outputs": [],
"source": [
"train_loader = DataLoader(train_dataset, batch_size=TRAIN_BATCH_SIZE,\n",
" num_workers=4, shuffle=True, pin_memory=True)\n",
"valid_loader = DataLoader(valid_dataset, batch_size=VALID_BATCH_SIZE,\n",
" num_workers=4, shuffle=False, pin_memory=True)"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "1CoypLuyPeOD",
"outputId": "26991222-ffa0-45fd-ce99-4ecc943158d2"
},
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"All TF 2.0 model weights were used when initializing BertModel.\n",
"\n",
"All the weights of BertModel were initialized from the TF 2.0 model.\n",
"If your task is similar to the task the model of the checkpoint was trained on, you can already use BertModel for predictions without further training.\n"
]
}
],
"source": [
"# Creating the customized model, by adding a drop out and a dense layer on top of distil bert to get the final output for the model.\n",
"\n",
"class BERTClass(torch.nn.Module):\n",
" def __init__(self):\n",
" super(BERTClass, self).__init__()\n",
" self.roberta = AutoModel.from_pretrained('NepBERTa/NepBERTa', from_tf = True)\n",
" self.l2 = torch.nn.Dropout(0.5)\n",
" self.fc = torch.nn.Linear(768,10)\n",
"\n",
" def forward(self, ids, mask, token_type_ids):\n",
" _, features = self.roberta(ids, attention_mask = mask, token_type_ids = token_type_ids, return_dict=False)\n",
" output_2 = self.l2(features)\n",
" output = self.fc(output_2)\n",
" return output\n",
"\n",
"model = BERTClass()\n",
"model.to(device);"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"id": "dt8ex1foPkwh"
},
"outputs": [],
"source": [
"def loss_fn(outputs, targets):\n",
" return torch.nn.BCEWithLogitsLoss()(outputs, targets)"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"id": "xjr7wIG8Po-6"
},
"outputs": [],
"source": [
"optimizer = AdamW(params = model.parameters(), lr=LEARNING_RATE, weight_decay=1e-6)"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"id": "cbxUdhgw8w43"
},
"outputs": [],
"source": [
"scheduler = get_cosine_schedule_with_warmup(\n",
" optimizer,\n",
" num_warmup_steps=0,\n",
" num_training_steps=len(train_loader) * EPOCHS\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"id": "h4OHZ1IbPqlF"
},
"outputs": [],
"source": [
"def validation():\n",
" model.eval()\n",
" fin_targets=[]\n",
" fin_outputs=[]\n",
" with torch.no_grad():\n",
" for _, data in enumerate(valid_loader, 0):\n",
" ids = data['ids'].to(device, dtype = torch.long)\n",
" mask = data['mask'].to(device, dtype = torch.long)\n",
" token_type_ids = data['token_type_ids'].to(device, dtype = torch.long)\n",
" targets = data['targets'].to(device, dtype = torch.float)\n",
" outputs = model(ids, mask, token_type_ids)\n",
" fin_targets.extend(targets.cpu().detach().numpy().tolist())\n",
" fin_outputs.extend(torch.sigmoid(outputs).cpu().detach().numpy().tolist())\n",
" return fin_outputs, fin_targets"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"id": "HcwI4uXePtjX"
},
"outputs": [],
"source": [
"def train(epoch):\n",
" model.train()\n",
" for _,data in enumerate(train_loader, 0):\n",
" ids = data['ids'].to(device, dtype = torch.long)\n",
" mask = data['mask'].to(device, dtype = torch.long)\n",
" token_type_ids = data['token_type_ids'].to(device, dtype = torch.long)\n",
" targets = data['targets'].to(device, dtype = torch.float)\n",
" outputs = model(ids, mask, token_type_ids)\n",
" loss = loss_fn(outputs, targets)\n",
" loss.backward()\n",
" torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)\n",
" optimizer.step()\n",
" scheduler.step()\n",
" optimizer.zero_grad()\n",
" print(f'Epoch: {epoch}, Loss: {loss.item()}')\n",
" outputs, targets = validation()\n",
" outputs = np.array(outputs) >= 0.5\n",
" accuracy = metrics.accuracy_score(targets, outputs)\n",
" f1_score_micro = metrics.f1_score(targets, outputs, average='micro')\n",
" f1_score_macro = metrics.f1_score(targets, outputs, average='macro')\n",
" print(f\"Accuracy Score = {accuracy}\")\n",
" print(f\"F1 Score (Micro) = {f1_score_micro}\")\n",
" print(f\"F1 Score (Macro) = {f1_score_macro}\")\n",
" print('\\n')\n"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "kRENHYzgPvzN",
"outputId": "f1e3f3cd-f78b-425b-a751-1059dfeb0299"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Epoch: 0, Loss: 0.11394881457090378\n",
"Accuracy Score = 0.7133160956690369\n",
"F1 Score (Micro) = 0.7708697170799861\n",
"F1 Score (Macro) = 0.6620882447650736\n",
"\n",
"\n",
"Epoch: 1, Loss: 0.056467846035957336\n",
"Accuracy Score = 0.7957336780866192\n",
"F1 Score (Micro) = 0.8271004527922188\n",
"F1 Score (Macro) = 0.7777480100592717\n",
"\n",
"\n",
"Epoch: 2, Loss: 0.07918363064527512\n",
"Accuracy Score = 0.8190045248868778\n",
"F1 Score (Micro) = 0.8407622203811101\n",
"F1 Score (Macro) = 0.8112309453618414\n",
"\n",
"\n",
"Epoch: 3, Loss: 0.054994549602270126\n",
"Accuracy Score = 0.8361344537815126\n",
"F1 Score (Micro) = 0.853991769547325\n",
"F1 Score (Macro) = 0.8326270924585992\n",
"\n",
"\n"
]
}
],
"source": [
"for epoch in range(EPOCHS):\n",
" train(epoch)"
]
},
{
"cell_type": "code",
"source": [],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "4fvdGfQLoxaG",
"outputId": "37813162-0699-4aa2-b608-4dbbb15ba677"
},
"execution_count": 56,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Epoch: 0, Loss: 0.11774052679538727\n",
"Accuracy Score = 0.8387201034259858\n",
"F1 Score (Micro) = 0.8543307086614174\n",
"F1 Score (Macro) = 0.8331537892778929\n",
"\n",
"\n"
]
}
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "IiP-yv7RPz5C",
"outputId": "b43fb649-b098-4dae-c8ae-e9428f9559c9"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Accuracy Score = 0.8387201034259858\n",
"F1 Score (Micro) = 0.8543307086614174\n",
"F1 Score (Macro) = 0.8331537892778929\n",
"F1 Score (Weighted) = 0.8537167986623573\n"
]
}
],
"source": [
"outputs, targets = validation()\n",
"outputs = np.array(outputs) >= 0.5\n",
"accuracy = metrics.accuracy_score(targets, outputs)\n",
"f1_score_micro = metrics.f1_score(targets, outputs, average='micro')\n",
"f1_score_macro = metrics.f1_score(targets, outputs, average='macro')\n",
"f1_score_weighted = metrics.f1_score(targets, outputs, average='weighted')\n",
"print(f\"Accuracy Score = {accuracy}\")\n",
"print(f\"F1 Score (Micro) = {f1_score_micro}\")\n",
"print(f\"F1 Score (Macro) = {f1_score_macro}\")\n",
"print(f\"F1 Score (Weighted) = {f1_score_weighted}\")"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "C4E-5wGcQSYP",
"outputId": "2e050b74-a5c4-4f56-b2eb-0a7e663b44dd"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"0.9073170731707317 \n",
" 0.8417721518987341 \n",
" 0.9136690647482014 \n",
" 0.8557213930348259 \n",
" 0.8026607538802661 \n",
" 0.7512690355329948 \n",
" 0.641025641025641 \n",
" 0.9005847953216374 \n",
" 0.8383233532934132 \n",
" 0.8791946308724832\n"
]
}
],
"source": [
"print(metrics.f1_score(outputs[:,0],np.array(targets)[:,0]),'\\n',\n",
"metrics.f1_score(outputs[:,1],np.array(targets)[:,1]),'\\n',\n",
"metrics.f1_score(outputs[:,2],np.array(targets)[:,2]),'\\n',\n",
"metrics.f1_score(outputs[:,3],np.array(targets)[:,3]),'\\n',\n",
"metrics.f1_score(outputs[:,4],np.array(targets)[:,4]),'\\n',\n",
"metrics.f1_score(outputs[:,5],np.array(targets)[:,5]),'\\n',\n",
"metrics.f1_score(outputs[:,6],np.array(targets)[:,6]),'\\n',\n",
"metrics.f1_score(outputs[:,7],np.array(targets)[:,7]),'\\n',\n",
"metrics.f1_score(outputs[:,8],np.array(targets)[:,8]),'\\n',\n",
"metrics.f1_score(outputs[:,9],np.array(targets)[:,9])\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"id": "Jwc2h18NQWul"
},
"outputs": [],
"source": [
"torch.save(model.state_dict(), 'model.bin')"
]
}
],
"metadata": {
"accelerator": "GPU",
"colab": {
"provenance": []
},
"gpuClass": "standard",
"kernelspec": {
"display_name": "Python 3",
"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.11.6"
},
"widgets": {
"application/vnd.jupyter.widget-state+json": {
"007304dd7fb74a1b9d3b390f13e73a03": {
"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_821aa443392a4ac99d1adb7cc9138840",
"max": 589,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_888b6d0488a649f7a4469b93f1bc7bc6",
"value": 589
}
},
"020a891f78e14676b691abd046356725": {
"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
}
},
"0550c59aa57f40e094beae25cc5b0dc3": {
"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": ""
}
},
"0766b7d42af943d0b4d37cab4bddf569": {
"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
}
},
"076956eb941c4cd6a402c1335aa3bba1": {
"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
}
},
"0c31a369e5db4e0bbf689734f4dcd415": {
"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
}
},
"0ddf0870774544bc9122761b7968c2ec": {
"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
}
},
"118705ff5aa84e59801ce43e13bf782f": {
"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
}
},
"14feea72286044c3ac19c79bdb4a5d15": {
"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": ""
}
},
"18c49519429c41f195d703bed69a4443": {
"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
}
},
"1967dfefa2e24c76a680a450dfa66e6f": {
"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": ""
}
},
"1a602627ce7742e7bf9af421ab365430": {
"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
}
},
"20b7ae08f2de4b86bda6c5f94054eb75": {
"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
}
},
"23531ca8f9e14e7dbc8f1ab522131142": {
"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": ""
}
},
"2f56fa2517b2460a8d432ea866b657dd": {
"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": ""
}
},
"32293f1a4a3e4b49b27f4be3fe5c3b1a": {
"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_bc565a24c7fb4bb799eb45d251cc9a57",
"placeholder": "",
"style": "IPY_MODEL_14feea72286044c3ac19c79bdb4a5d15",
"value": " 413/413 [00:00<00:00, 14.0kB/s]"
}
},
"3367b5295e4b44d5a3aee0aaf5fbd73a": {
"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": ""
}
},
"363c84ef86a34e6a93f4db2723a3c9f4": {
"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_768426a2c2ee437389cdded02f3f0c48",
"placeholder": "",
"style": "IPY_MODEL_44323c2a91184648aa0af06e91ab980d",
"value": " 557M/557M [00:11<00:00, 60.9MB/s]"
}
},
"36620b6e478042989fe2ce175b627125": {
"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": ""
}
},
"39a62a0780dc4911bd30d366ac81b6f3": {
"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": ""
}
},
"3cdaa669bed14105a18bb904190b43a6": {
"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_c9a5a153a6d8456fb867a2bbeee2368d",
"placeholder": "",
"style": "IPY_MODEL_7d940db073774c888ab9a98316fbc3ae",
"value": "Downloading: 100%"
}
},
"3d7fc90750fc4fd28b2b6bef0ca6e601": {
"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_0ddf0870774544bc9122761b7968c2ec",
"placeholder": "",
"style": "IPY_MODEL_68e41c648aef493ab2290e9bd95ab244",
"value": "Downloading: 100%"
}
},
"4298e20b35474077a0f872ddbc6db987": {
"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_20b7ae08f2de4b86bda6c5f94054eb75",
"placeholder": "",
"style": "IPY_MODEL_879f999eba754a20861a37fcb275c7e0",
"value": " 589/589 [00:00<00:00, 6.83kB/s]"
}
},
"44323c2a91184648aa0af06e91ab980d": {
"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": ""
}
},
"4528dd10b894401e98dcaf0dd547bf13": {
"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_d7892059dc6048b0bfa8e18998125727",
"IPY_MODEL_8664160808b0488bba20727074611c9f",
"IPY_MODEL_e9f2d971371a4c5cac7c9eab4ec30d89"
],
"layout": "IPY_MODEL_511fdf809305494ca560dd7a84e8f904"
}
},
"499f1d9965704b1a9601ca6701e886de": {
"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_9541cd9ae94e469f8c0ed5ce66a0b01d",
"placeholder": "",
"style": "IPY_MODEL_c4dbec2e026a4722bbf17bef4ad5741b",
"value": "Downloading: 100%"
}
},
"4b7ba118f59646e59cec9056ffcbcaa3": {
"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
}
},
"4d8556c2c15046f481701f853e13b126": {
"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_8c3c9b20a3154dceb842acbf88160743",
"IPY_MODEL_7dc6e325b5454fe294d3fe960fa8f2f0",
"IPY_MODEL_363c84ef86a34e6a93f4db2723a3c9f4"
],
"layout": "IPY_MODEL_d96a8fd5fb1540a0902e1fac49912602"
}
},
"511fdf809305494ca560dd7a84e8f904": {
"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
}
},
"51bbf362fa7a49d0802a970b5443b01d": {
"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_f183c27d35414a5facef4bed84aded9b",
"placeholder": "",
"style": "IPY_MODEL_3367b5295e4b44d5a3aee0aaf5fbd73a",
"value": " 2.13M/2.13M [00:00<00:00, 2.72MB/s]"
}
},
"5253b2271568488da290f23826fa8979": {
"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
}
},
"525d941c1e3541919bacb96f9adfdd91": {
"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": ""
}
},
"54891ad613ed4f27bb3aa9be849132b1": {
"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_4b7ba118f59646e59cec9056ffcbcaa3",
"placeholder": "",
"style": "IPY_MODEL_525d941c1e3541919bacb96f9adfdd91",
"value": "Downloading: 100%"
}
},
"5d7a2ed7e1eb431ca509ede35d4e562f": {
"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_0c31a369e5db4e0bbf689734f4dcd415",
"placeholder": "",
"style": "IPY_MODEL_ec44446c5ce541e4a23d601aaa581a69",
"value": "Downloading: 100%"
}
},
"662f45e53d6d45f49c249cabc6f1dc91": {
"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_a79e620eb592460e986ea5c305ebeaec",
"max": 2134747,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_39a62a0780dc4911bd30d366ac81b6f3",
"value": 2134747
}
},
"67c61a63e12e48dda06d76fd11a0d7e5": {
"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": ""
}
},
"67fdea3f80f54b849854ec829e37d80b": {
"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_118705ff5aa84e59801ce43e13bf782f",
"placeholder": "",
"style": "IPY_MODEL_23531ca8f9e14e7dbc8f1ab522131142",
"value": " 438M/438M [00:13<00:00, 35.7MB/s]"
}
},
"68e41c648aef493ab2290e9bd95ab244": {
"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": ""
}
},
"6ebab858b53d466a96db54ced3956fd0": {
"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
}
},
"708178f346da4f1597853c0218a73e03": {
"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
}
},
"70d42517af9f49e38cf99b7c97b05239": {
"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_d3b1b8f83ae34e7d90ab862e23d2d5d9",
"placeholder": "",
"style": "IPY_MODEL_9afec31fa2c542edbc191282ee03df73",
"value": " 773/773 [00:00<00:00, 10.1kB/s]"
}
},
"714bdef5435d45ac8dbb7666c0e7232e": {
"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_7ceed10a595343168a068bebf9746bca",
"max": 413,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_67c61a63e12e48dda06d76fd11a0d7e5",
"value": 413
}
},
"748462ab70364e168c082c7573b52238": {
"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_020a891f78e14676b691abd046356725",
"max": 438141995,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_0550c59aa57f40e094beae25cc5b0dc3",
"value": 438141995
}
},
"768426a2c2ee437389cdded02f3f0c48": {
"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
}
},
"7a1044e4ca444ae990d163dff600a113": {
"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
}
},
"7ceed10a595343168a068bebf9746bca": {
"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
}
},
"7d940db073774c888ab9a98316fbc3ae": {
"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": ""
}
},
"7dc6e325b5454fe294d3fe960fa8f2f0": {
"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_708178f346da4f1597853c0218a73e03",
"max": 557064301,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_c792e1ae15ce4fa29ccac9e75780bdd1",
"value": 557064301
}
},
"802d3e98e6b94a6881d3eb2f11ddb235": {
"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
}
},
"821aa443392a4ac99d1adb7cc9138840": {
"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
}
},
"8445fd819a6a46fcbf75e99cbb18b4ce": {
"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
}
},
"8664160808b0488bba20727074611c9f": {
"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_a8395f7eabf54ffc8329dfed96cc400a",
"max": 528678,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_2f56fa2517b2460a8d432ea866b657dd",
"value": 528678
}
},
"879f999eba754a20861a37fcb275c7e0": {
"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": ""
}
},
"888b6d0488a649f7a4469b93f1bc7bc6": {
"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": ""
}
},
"8c3c9b20a3154dceb842acbf88160743": {
"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_18c49519429c41f195d703bed69a4443",
"placeholder": "",
"style": "IPY_MODEL_36620b6e478042989fe2ce175b627125",
"value": "Downloading: 100%"
}
},
"91b65e18dfae4ee08c23d8d70436f3d2": {
"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_6ebab858b53d466a96db54ced3956fd0",
"placeholder": "",
"style": "IPY_MODEL_1967dfefa2e24c76a680a450dfa66e6f",
"value": " 239/239 [00:00<00:00, 6.91kB/s]"
}
},
"93fa5389c5e844d98eb849c08c035c1d": {
"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": ""
}
},
"95400b69037c4c3b8ce7ada698d046ce": {
"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
}
},
"9541cd9ae94e469f8c0ed5ce66a0b01d": {
"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
}
},
"9afec31fa2c542edbc191282ee03df73": {
"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": ""
}
},
"9dfcb1560dcd483ab5c000d6e43771f3": {
"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_b5422f0f1b65405ea399b64dd602c2a4",
"max": 239,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_93fa5389c5e844d98eb849c08c035c1d",
"value": 239
}
},
"a054cd75df6a40a1a8a23cb82c73e73d": {
"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
}
},
"a2b590b036264886835d76ebae8de084": {
"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_5d7a2ed7e1eb431ca509ede35d4e562f",
"IPY_MODEL_714bdef5435d45ac8dbb7666c0e7232e",
"IPY_MODEL_32293f1a4a3e4b49b27f4be3fe5c3b1a"
],
"layout": "IPY_MODEL_0766b7d42af943d0b4d37cab4bddf569"
}
},
"a360588788c34e59869144df00b459ec": {
"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": ""
}
},
"a42f03dc2a5849beb94666ff1648ff5b": {
"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": ""
}
},
"a79e620eb592460e986ea5c305ebeaec": {
"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
}
},
"a8395f7eabf54ffc8329dfed96cc400a": {
"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
}
},
"ae16930d4b7e498e888c0b1a26ca9ecc": {
"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": ""
}
},
"b1715cd48f6741088b3bf7b22f21030f": {
"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_3d7fc90750fc4fd28b2b6bef0ca6e601",
"IPY_MODEL_fcd6ab186c394b4fab091e2ec64cf7d2",
"IPY_MODEL_70d42517af9f49e38cf99b7c97b05239"
],
"layout": "IPY_MODEL_8445fd819a6a46fcbf75e99cbb18b4ce"
}
},
"b5422f0f1b65405ea399b64dd602c2a4": {
"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
}
},
"bc565a24c7fb4bb799eb45d251cc9a57": {
"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
}
},
"c100b12a53de481ea1e5bce81995319c": {
"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_499f1d9965704b1a9601ca6701e886de",
"IPY_MODEL_662f45e53d6d45f49c249cabc6f1dc91",
"IPY_MODEL_51bbf362fa7a49d0802a970b5443b01d"
],
"layout": "IPY_MODEL_1a602627ce7742e7bf9af421ab365430"
}
},
"c4dbec2e026a4722bbf17bef4ad5741b": {
"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": ""
}
},
"c792e1ae15ce4fa29ccac9e75780bdd1": {
"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": ""
}
},
"c9a5a153a6d8456fb867a2bbeee2368d": {
"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
}
},
"d0979c33cdc54526b5dd002b2c23bef6": {
"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": ""
}
},
"d3b1b8f83ae34e7d90ab862e23d2d5d9": {
"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
}
},
"d7892059dc6048b0bfa8e18998125727": {
"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_802d3e98e6b94a6881d3eb2f11ddb235",
"placeholder": "",
"style": "IPY_MODEL_a360588788c34e59869144df00b459ec",
"value": "Downloading: 100%"
}
},
"d7c45455a8e8445c929c8c83ab1f9fa1": {
"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_f58360c8802b490fb23cb4a17a81911e",
"placeholder": "",
"style": "IPY_MODEL_a42f03dc2a5849beb94666ff1648ff5b",
"value": "Downloading: 100%"
}
},
"d96a8fd5fb1540a0902e1fac49912602": {
"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
}
},
"dca828d0f4824d5a80125caf02b1bd18": {
"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_3cdaa669bed14105a18bb904190b43a6",
"IPY_MODEL_9dfcb1560dcd483ab5c000d6e43771f3",
"IPY_MODEL_91b65e18dfae4ee08c23d8d70436f3d2"
],
"layout": "IPY_MODEL_a054cd75df6a40a1a8a23cb82c73e73d"
}
},
"dd083e9312f34cfe8712574bd16c2520": {
"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_54891ad613ed4f27bb3aa9be849132b1",
"IPY_MODEL_007304dd7fb74a1b9d3b390f13e73a03",
"IPY_MODEL_4298e20b35474077a0f872ddbc6db987"
],
"layout": "IPY_MODEL_076956eb941c4cd6a402c1335aa3bba1"
}
},
"e9f2d971371a4c5cac7c9eab4ec30d89": {
"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_5253b2271568488da290f23826fa8979",
"placeholder": "",
"style": "IPY_MODEL_ae16930d4b7e498e888c0b1a26ca9ecc",
"value": " 529k/529k [00:00<00:00, 1.41MB/s]"
}
},
"ec44446c5ce541e4a23d601aaa581a69": {
"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": ""
}
},
"f183c27d35414a5facef4bed84aded9b": {
"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
}
},
"f58360c8802b490fb23cb4a17a81911e": {
"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
}
},
"fcd6ab186c394b4fab091e2ec64cf7d2": {
"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_95400b69037c4c3b8ce7ada698d046ce",
"max": 773,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_d0979c33cdc54526b5dd002b2c23bef6",
"value": 773
}
},
"fe72571856854a17bf5df0b4ff3ff604": {
"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_d7c45455a8e8445c929c8c83ab1f9fa1",
"IPY_MODEL_748462ab70364e168c082c7573b52238",
"IPY_MODEL_67fdea3f80f54b849854ec829e37d80b"
],
"layout": "IPY_MODEL_7a1044e4ca444ae990d163dff600a113"
}
},
"e96896658b654eed8b968404645d0ce2": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HBoxModel",
"model_module_version": "1.5.0",
"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_18a4c50558434e0290dd7146a4fbfecf",
"IPY_MODEL_84a98a576e0249a59849cc30c7224f20",
"IPY_MODEL_e40536cd305045b0bb8aeecfd21cb956"
],
"layout": "IPY_MODEL_1b15bace409c4f4089f40a856b6e1338"
}
},
"18a4c50558434e0290dd7146a4fbfecf": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"model_module_version": "1.5.0",
"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_74e25a277d244040ae97abc9dde27f68",
"placeholder": "",
"style": "IPY_MODEL_eba06679f61f457b8de2817c7450ef24",
"value": "config.json: 100%"
}
},
"84a98a576e0249a59849cc30c7224f20": {
"model_module": "@jupyter-widgets/controls",
"model_name": "FloatProgressModel",
"model_module_version": "1.5.0",
"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_0b340f8a07e04471ac8ce7c17c61acba",
"max": 652,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_4c87386df89a4157bf67851ad066bb94",
"value": 652
}
},
"e40536cd305045b0bb8aeecfd21cb956": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"model_module_version": "1.5.0",
"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_f5ebefe5c7274db7b81dc329742a55e9",
"placeholder": "",
"style": "IPY_MODEL_6fc5465c7f69419ebe26ac752133676f",
"value": " 652/652 [00:00<00:00, 34.7kB/s]"
}
},
"1b15bace409c4f4089f40a856b6e1338": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"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
}
},
"74e25a277d244040ae97abc9dde27f68": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"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
}
},
"eba06679f61f457b8de2817c7450ef24": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"model_module_version": "1.5.0",
"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": ""
}
},
"0b340f8a07e04471ac8ce7c17c61acba": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"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
}
},
"4c87386df89a4157bf67851ad066bb94": {
"model_module": "@jupyter-widgets/controls",
"model_name": "ProgressStyleModel",
"model_module_version": "1.5.0",
"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": ""
}
},
"f5ebefe5c7274db7b81dc329742a55e9": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"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
}
},
"6fc5465c7f69419ebe26ac752133676f": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"model_module_version": "1.5.0",
"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": ""
}
},
"4fcccd4ec6e54e608b823a93a59ac2b6": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HBoxModel",
"model_module_version": "1.5.0",
"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_a5ca839581e6414fba8dc778b5cf2cb9",
"IPY_MODEL_a6dbe20598484fcd9f13675e697dfc7b",
"IPY_MODEL_74f5680b28364d34a98ab4261563fc12"
],
"layout": "IPY_MODEL_cbdb3c1dcc984f67a5856137830afe9c"
}
},
"a5ca839581e6414fba8dc778b5cf2cb9": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"model_module_version": "1.5.0",
"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_4633fec68037492c92effc18055964e2",
"placeholder": "",
"style": "IPY_MODEL_3b1fbd3a31f3422aa249db2d1c933a65",
"value": "tf_model.h5: 100%"
}
},
"a6dbe20598484fcd9f13675e697dfc7b": {
"model_module": "@jupyter-widgets/controls",
"model_name": "FloatProgressModel",
"model_module_version": "1.5.0",
"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_bd2a23d5260345279fbf87befba2e5c8",
"max": 533687680,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_6a2ed2b29770404a851a069f2a78c5da",
"value": 533687680
}
},
"74f5680b28364d34a98ab4261563fc12": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"model_module_version": "1.5.0",
"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_bd8042817a254f35a6ff1c52c70cead2",
"placeholder": "",
"style": "IPY_MODEL_f1a13f54dc4f48f8a613f522485755e1",
"value": " 534M/534M [00:04<00:00, 213MB/s]"
}
},
"cbdb3c1dcc984f67a5856137830afe9c": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"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
}
},
"4633fec68037492c92effc18055964e2": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"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
}
},
"3b1fbd3a31f3422aa249db2d1c933a65": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"model_module_version": "1.5.0",
"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": ""
}
},
"bd2a23d5260345279fbf87befba2e5c8": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"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
}
},
"6a2ed2b29770404a851a069f2a78c5da": {
"model_module": "@jupyter-widgets/controls",
"model_name": "ProgressStyleModel",
"model_module_version": "1.5.0",
"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": ""
}
},
"bd8042817a254f35a6ff1c52c70cead2": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"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
}
},
"f1a13f54dc4f48f8a613f522485755e1": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"model_module_version": "1.5.0",
"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": ""
}
},
"c40ed648d38545e390bee2431c5a707a": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HBoxModel",
"model_module_version": "1.5.0",
"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_ee7cfc940c804296894abe79e31ecbe6",
"IPY_MODEL_bc50f92e9d0d48bba21f16541fc37ed9",
"IPY_MODEL_fe96466bdfcb41739954dc0270571406"
],
"layout": "IPY_MODEL_69a754c07e454149aaa42ea63971f249"
}
},
"ee7cfc940c804296894abe79e31ecbe6": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"model_module_version": "1.5.0",
"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_1ca2e994552f43558ee18ea4f832d2ec",
"placeholder": "",
"style": "IPY_MODEL_b15d86eff02147bea51624bc82f94a7d",
"value": "vocab.txt: 100%"
}
},
"bc50f92e9d0d48bba21f16541fc37ed9": {
"model_module": "@jupyter-widgets/controls",
"model_name": "FloatProgressModel",
"model_module_version": "1.5.0",
"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_ccc737848a20419684a47c4dff68dc8a",
"max": 546517,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_aad77fce445540cfbe295df700107b6a",
"value": 546517
}
},
"fe96466bdfcb41739954dc0270571406": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"model_module_version": "1.5.0",
"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_d7bce53523fd4cafb20182edcd405533",
"placeholder": "",
"style": "IPY_MODEL_b6b326e3fe1148b29c5570b742e8b8c6",
"value": " 547k/547k [00:00<00:00, 16.3MB/s]"
}
},
"69a754c07e454149aaa42ea63971f249": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"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
}
},
"1ca2e994552f43558ee18ea4f832d2ec": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"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
}
},
"b15d86eff02147bea51624bc82f94a7d": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"model_module_version": "1.5.0",
"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": ""
}
},
"ccc737848a20419684a47c4dff68dc8a": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"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
}
},
"aad77fce445540cfbe295df700107b6a": {
"model_module": "@jupyter-widgets/controls",
"model_name": "ProgressStyleModel",
"model_module_version": "1.5.0",
"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": ""
}
},
"d7bce53523fd4cafb20182edcd405533": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"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
}
},
"b6b326e3fe1148b29c5570b742e8b8c6": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"model_module_version": "1.5.0",
"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": ""
}
}
}
}
},
"nbformat": 4,
"nbformat_minor": 0
}