DL_PROJEKT/dl_projekt2.ipynb
2024-06-09 13:18:59 +02:00

1162 lines
213 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"source": [
"### Importy"
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": true,
"ExecuteTime": {
"start_time": "2024-06-09T12:46:01.122296Z",
"end_time": "2024-06-09T12:46:01.143307Z"
}
},
"outputs": [],
"source": [
"import pandas as pd\n",
"import os\n",
"import tensorflow as tf\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.preprocessing import LabelEncoder, OneHotEncoder\n",
"from sklearn.feature_extraction.text import TfidfVectorizer\n",
"from sklearn.naive_bayes import MultinomialNB\n",
"from sklearn.metrics import accuracy_score, confusion_matrix\n",
"import seaborn as sns\n",
"import matplotlib.pyplot as plt\n",
"from keras.preprocessing.text import Tokenizer\n",
"from keras.models import Sequential\n",
"from keras.layers import Embedding, LSTM, Dense, Dropout\n",
"from keras.optimizers import Adam\n",
"from transformers import pipeline\n",
"from tqdm import tqdm\n",
"from keras_preprocessing.sequence import pad_sequences\n",
"from sklearn.metrics import classification_report"
]
},
{
"cell_type": "markdown",
"source": [
"### Pobiernie danych"
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": 2,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Warning: Looks like you're using an outdated API Version, please consider updating (server 1.6.14 / client 1.6.11)\n",
"Dataset URL: https://www.kaggle.com/datasets/shivamkushwaha/bbc-full-text-document-classification\n",
"License(s): DbCL-1.0\n",
"Downloading bbc-full-text-document-classification.zip to C:\\Users\\adamw\\PycharmProjects\\pythonProject\\dl_projekt\n",
"\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
" 0%| | 0.00/5.59M [00:00<?, ?B/s]\n",
" 18%|#7 | 1.00M/5.59M [00:00<00:03, 1.58MB/s]\n",
" 36%|###5 | 2.00M/5.59M [00:00<00:01, 3.16MB/s]\n",
" 72%|#######1 | 4.00M/5.59M [00:00<00:00, 6.34MB/s]\n",
"100%|##########| 5.59M/5.59M [00:00<00:00, 6.05MB/s]\n"
]
}
],
"source": [
"!kaggle datasets download -d shivamkushwaha/bbc-full-text-document-classification --unzip"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-08T22:27:32.388353Z",
"end_time": "2024-06-08T22:27:39.576352Z"
}
}
},
{
"cell_type": "markdown",
"source": [
"## Sprawdzenie dostępności GPU"
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": 2,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Num GPUs Available: 1\n",
"[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]\n"
]
}
],
"source": [
"# Check GPU availability\n",
"os.environ[\"CUDA_VISIBLE_DEVICES\"] = \"0\"\n",
"os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'\n",
"physical_devices = tf.config.experimental.list_physical_devices('GPU')\n",
"print(\"Num GPUs Available: \", len(physical_devices))\n",
"print(tf.config.list_physical_devices('GPU'))\n"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-09T12:44:59.718075Z",
"end_time": "2024-06-09T12:44:59.731077Z"
}
}
},
{
"cell_type": "markdown",
"source": [
"## Ładowanie danych"
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": 40,
"outputs": [],
"source": [
"datapath = 'bbc/'\n",
"directory, file, title, text, label = [], [], [], [], []\n",
"for dirname, _, filenames in os.walk(datapath):\n",
" for filename in filenames:\n",
" if filename == 'README.TXT':\n",
" continue\n",
" directory.append(dirname)\n",
" file.append(filename)\n",
" label.append(dirname.split('/')[-1])\n",
" fullpathfile = os.path.join(dirname, filename)\n",
" with open(fullpathfile, 'r', encoding=\"utf8\", errors='ignore') as infile:\n",
" intext = ''\n",
" firstline = True\n",
" for line in infile:\n",
" if firstline:\n",
" title.append(line.replace('\\n', ''))\n",
" firstline = False\n",
" else:\n",
" intext += ' ' + line.replace('\\n', '')\n",
" text.append(intext)\n"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-09T12:50:53.380989Z",
"end_time": "2024-06-09T12:50:53.698989Z"
}
}
},
{
"cell_type": "markdown",
"source": [
"## Konwersja na DataFrame"
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": 41,
"outputs": [],
"source": [
"df = pd.DataFrame(list(zip(directory, file, title, text, label)), columns=['directory', 'file', 'title', 'text', 'label'])\n",
"df = df.filter(['title', 'text', 'label'], axis=1)"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-09T12:50:53.930080Z",
"end_time": "2024-06-09T12:50:53.986076Z"
}
}
},
{
"cell_type": "code",
"execution_count": 42,
"outputs": [
{
"data": {
"text/plain": " title \\\n0 Ad sales boost Time Warner profit \n1 Dollar gains on Greenspan speech \n2 Yukos unit buyer faces loan claim \n3 High fuel prices hit BA's profits \n4 Pernod takeover talk lifts Domecq \n\n text label \n0 Quarterly profits at US media giant TimeWarn... business \n1 The dollar has hit its highest level against... business \n2 The owners of embattled Russian oil giant Yu... business \n3 British Airways has blamed high fuel prices ... business \n4 Shares in UK drinks and food firm Allied Dom... business ",
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>title</th>\n <th>text</th>\n <th>label</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>Ad sales boost Time Warner profit</td>\n <td>Quarterly profits at US media giant TimeWarn...</td>\n <td>business</td>\n </tr>\n <tr>\n <th>1</th>\n <td>Dollar gains on Greenspan speech</td>\n <td>The dollar has hit its highest level against...</td>\n <td>business</td>\n </tr>\n <tr>\n <th>2</th>\n <td>Yukos unit buyer faces loan claim</td>\n <td>The owners of embattled Russian oil giant Yu...</td>\n <td>business</td>\n </tr>\n <tr>\n <th>3</th>\n <td>High fuel prices hit BA's profits</td>\n <td>British Airways has blamed high fuel prices ...</td>\n <td>business</td>\n </tr>\n <tr>\n <th>4</th>\n <td>Pernod takeover talk lifts Domecq</td>\n <td>Shares in UK drinks and food firm Allied Dom...</td>\n <td>business</td>\n </tr>\n </tbody>\n</table>\n</div>"
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-09T12:50:54.222077Z",
"end_time": "2024-06-09T12:50:54.271074Z"
}
}
},
{
"cell_type": "code",
"execution_count": 7,
"outputs": [
{
"data": {
"text/plain": "(2225, 3)"
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.shape"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-08T22:27:40.840352Z",
"end_time": "2024-06-08T22:27:40.908354Z"
}
}
},
{
"cell_type": "code",
"execution_count": 8,
"outputs": [
{
"data": {
"text/plain": "array(['business', 'entertainment', 'politics', 'sport', 'tech'],\n dtype=object)"
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[\"label\"].unique()"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-08T22:27:40.847351Z",
"end_time": "2024-06-08T22:27:40.984351Z"
}
}
},
{
"cell_type": "code",
"execution_count": 9,
"outputs": [
{
"data": {
"text/plain": "title 0\ntext 0\nlabel 0\ndtype: int64"
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.isnull().sum() # Sprawdzenie brakujących wartości"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-08T22:27:40.865352Z",
"end_time": "2024-06-08T22:27:41.021352Z"
}
}
},
{
"cell_type": "code",
"execution_count": 10,
"outputs": [
{
"data": {
"text/plain": "<Figure size 600x600 with 1 Axes>",
"image/png": "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vL29M2zP6EM7MTFR69at07p169K1lShRwupxoUKF0s1ToECBu9YTHx+faT3x8fEqWrRohutxdHS869D+pUuXVKpUqXTTb/f75cuXLQFr+/btCgsL044dOzRs2DB5eHhoxYoVkqRff/01XQC4U4MGDeTi4qJt27apZMmSyp8/v5o2bapKlSpp165dKliwoBISEjJdx6VLl2QYhiWA3Va6dGmrx7cPfyxZskTXr19XuXLl5OvrKxcXl3TrvFtfJSYmSpLee+89vffee+mWPXfuXKb7mpFDhw4pKChI3377rV577TXVrFkz03k/++wzffzxx0pMTFTJkiXl4+OjAgUKWF7zBQsW1JIlSzRnzhx9//33WrZsmVxdXdWmTRuNGDEi3YnNt/cls68u27ovePgQMvDIuf2hmZCQoCpVqli1xcfH67HHHpMkOTs7680339Sbb76pU6dOadOmTZo9e7b+53/+R999950KFy6s2NjYdOvfs2ePihYtmuFXNQsXLqx69epp0KBBGdaW0bdTChcurKeeekqvv/56urZ8+R7sT7hw4cKqVKmSpkyZkmF7ZqMHWVG0aFGdPHky3fT4+HhJ/zeqEhISokGDBmnfvn1KSEhQvXr15OHhoWnTpun333/X4cOHNXr06Ey3U6BAAdWrV88yKlOnTh3ly5dPgYGB2rVrl5ycnFSxYsV0z/VtxYoVk6OjY7oTM29/gN42b948LVy4UO+9956aN2+uwoULS5Lat2+f1S6RJBUpUkSSNGjQINWrVy9d++3XZ1b169dPXbp0UatWrTRixAitWLFCTk5O6eb75ptv9P7772vgwIEKDQ21BNR+/frpjz/+sMxXpUoVTZ48Wampqdq3b5++/vprffHFF3r88cfVvXv3DPdlypQpqlSpUrptZhTk8WjhcAkeOX5+fnJ2dk73TYPffvtNp06dUp06dXTjxg21aNFCn376qSTJw8NDnTp1UqtWrXTq1ClJ/xxeiYmJsbpAV3Jyst566y2rb1DcqV69ejpx4oQqV66sWrVqWX6+/vprffXVVxl+ONSrV09Hjx5VjRo1LPP7+Pho4cKFVt+quB/16tXT6dOn5e7ublXP1q1bNX/+/AzryYyjo/XbyZNPPqm4uLh037ZZu3at8ufPL19fX0n/HIYwDMNysmqpUqVUq1Ytubm5afLkySpevHi6Qy7/FhISop07d+q3335TYGCgJKl+/frau3evNmzYcNeREBcXF/n7++vHH3+0Gpn5+eefreaLjIzUE088oXbt2lkCxtmzZ3X48GGlpaXdo3f+T5UqVeTu7q7Y2FirPi9Tpow+/PDDe37T6N9KliwpV1dXjRo1Sn/++ac+++yzDOeLjIxUkSJF1L17d0vAuHbtmiIjIy31//DDD6pfv77i4+Pl5ORkGbkrUqSI5XV/Jz8/P+XPn19nz5612pd8+fJp6tSpGYZwPFoYycAjp1ixYurRo4fCw8OVP39+NWnSRLGxsZo+fbqeeOIJtW3bVq6urvL29tasWbOUP39+eXl56cSJE1q9erVatGghSQoNDdXixYv15ptvqm/fvipevLgWLVqkmzdv6pVXXslw2127dtXXX3+trl27qlu3bipevLjWrVun5cuXa+jQoRku07t3b7388svq2bOnOnbsKBcXFy1btkwbNmzQjBkzHqgvQkNDFRERoddff129evWyfFPjk08+0auvvqr8+fNneV1FihRRQkKCNm/erBo1aig0NFRLly5VWFiY+vbtqwoVKujnn3/WypUr1adPH8t/wUWKFJG/v782bNigl156SdI/IzQBAQH65Zdf1KZNm3QB5t+Cg4M1duxYnTt3TsOHD5f0T4BKTk7W/v37NWDAgLsu/8477+i1115Tnz599NJLL+nEiROWb8Dc5uvrq9mzZ2vevHmqXbu2Tp48qblz5yolJeWu56b8m5OTk95++22NGjVKTk5OatKkiS5fvqzZs2fr7NmzmR66upfg4GA988wzmjlzplq0aGEZkbuz/i+++ELvv/++mjRponPnzmnBggVKSEiwjJ7UqVNHaWlpCgsLU48ePVSwYEF9//33unLlipo3b55um8WLF1f37t01ffp0Xb16VYGBgTp79qymT58uBwcHVa9e/b72BQ8PQgYeSW+99ZZKliypiIgILVu2TMWKFdMzzzyj/v37y83NTZI0ZswYffTRR/r0008VHx8vd3d3tW/fXv369ZP0z/kPERERmjRpksaOHau0tDTVrl1bixYtSvcGf1uZMmX05Zdf6sMPP9To0aOVnJysSpUqafz48ZkOu1evXl1LlizRtGnTNGjQIBmGIU9PT4WHh6tZs2YP1A9ubm5asmSJPvzwQ02ePFlXrlxR+fLl9T//8z/q1q2bTesKDQ3V5s2b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idGwYUNj69atxh9//GEEBgYaTz75pLF06VLj8OHDxksvvWT06tXLMAzDOHfunFGnTh1j8eLFRnR0tLFmzRqjdu3axu7du++5ratXrxr9+vUz+vXrZ5w/f/6+nwdGMuwkLi5ODg4O8vDwUIUKFdS/f39NnjxZhmHo1q1bmjBhgry9vfX000/rtdde05dffilJWrx4sTp37qwXXnhBVapU0YABA+Tp6amIiAjLup9//nl5eXmpevXqKlGihCSpaNGiKliwoF32NScMGzZMdevWVb169dSvXz9Lf91NXFycChcuLA8PD9WpU0fz5s1TcHBwhvN6eXnpP//5jx577DH169dPN27c0JEjR5SUlKSIiAi999578vX1lZeXlyZNmqRdu3bpr7/+yvR5TktLU1xcnPLnzy8PDw89/vjjGjly5ENxgt3AgQMVEBCg+vXrq1+/flq+fLkiIiLUokULde3aVZUrV9brr7+u5s2b69NPP810PU5OTipatKgkqVSpUnJ2drZqX7ZsmVq3bq2OHTuqYsWKGjRokFq3bq1Lly7Z9Nw+rIoVKyYnJycVLlxYP/zwg9zd3dW/f39VqlRJTZs2Va9evbRo0SJJd+9LSfL391f37t312GOPqXfv3kpJSdHx48ftuXv3tGPHDp06dUpjx45VlSpVFBgYqMGDB1v2OTU11dLWpk0bVa9eXX/88YecnZ1VuHBhOTk5qVSpUnJyctL8+fM1aNAgBQYGqmrVqhozZowuXbqkX3/91bK9l156SVWqVNETTzxhed8tUaKEXF1dVa5cOU2cOFENGjRQhQoV1LFjR5UqVSrTkcvM3m9uCw0N1VNPPSUfHx/Vr19f1apVU8eOHVWtWjU9//zzludmyZIleuqpp/Tqq6+qYsWKatOmjV566SV9/vnn99xWwYIF5erqKldXV8v+3A/OybCToKAgeXp66rnnnlPNmjXVrFkzdejQQdHR0XJzc1P16tUt8/r4+FjejI8dO6awsDCrddWuXdvq2yPly5fPmZ3IRXx9fS2/16xZUwkJCbp8+fJdl+nevbuGDRumn376SY0bN9azzz6rmjVrZjhvpUqVLL8XKlRIknTr1i3FxMTo5s2bevnll63mT0tLU3R0tBo3bpzh85wvXz61atVKERERatasmWrXrq2nn35a7du3v88eyD3q1Klj+d3Hx0cXLlzQ8ePH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"
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"label_counts = df['label'].value_counts()\n",
"\n",
"plt.figure(figsize=(6, 6))\n",
"sns.barplot(x=label_counts.index, y=label_counts.values)\n",
"plt.title(\"Ilość elementów w danej klasie\")\n",
"plt.xlabel(\"Type\")\n",
"plt.ylabel(\"Number of Articles\")\n",
"plt.show()"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-08T22:27:40.889352Z",
"end_time": "2024-06-08T22:27:41.292351Z"
}
}
},
{
"cell_type": "markdown",
"source": [
"## Podział danych na zbiory treningowy, walidacyjny i testowy"
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": 43,
"outputs": [],
"source": [
"X_train_full, X_test, y_train_full, y_test = train_test_split(df['text'], df['label'], test_size=0.2, random_state=42)\n",
"X_train, X_val, y_train, y_val = train_test_split(X_train_full, y_train_full, test_size=0.2, random_state=42)"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-09T12:50:57.515115Z",
"end_time": "2024-06-09T12:50:57.532113Z"
}
}
},
{
"cell_type": "code",
"execution_count": 44,
"outputs": [
{
"data": {
"text/plain": "((1424,), (356,), (445,))"
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X_train.shape, X_val.shape, X_test.shape"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-09T12:50:57.772166Z",
"end_time": "2024-06-09T12:50:57.817245Z"
}
}
},
{
"cell_type": "markdown",
"source": [
"## Tf-idf z wykorzystaniem Naive Bayes"
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": 8,
"outputs": [],
"source": [
"tfidf_vectorizer = TfidfVectorizer(max_features=5000, stop_words='english')\n",
"X_train_tfidf = tfidf_vectorizer.fit_transform(X_train)\n",
"X_test_tfidf = tfidf_vectorizer.transform(X_test)"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-09T12:45:08.641703Z",
"end_time": "2024-06-09T12:45:09.322735Z"
}
}
},
{
"cell_type": "code",
"execution_count": 9,
"outputs": [
{
"data": {
"text/plain": "MultinomialNB()",
"text/html": "<style>#sk-container-id-1 {color: black;background-color: white;}#sk-container-id-1 pre{padding: 0;}#sk-container-id-1 div.sk-toggleable {background-color: white;}#sk-container-id-1 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-1 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-1 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-1 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-1 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-1 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-1 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-1 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-1 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-1 div.sk-item {position: relative;z-index: 1;}#sk-container-id-1 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-1 div.sk-item::before, #sk-container-id-1 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-1 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-1 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-1 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-1 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-1 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-1 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-1 div.sk-label-container {text-align: center;}#sk-container-id-1 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-1 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>MultinomialNB()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">MultinomialNB</label><div class=\"sk-toggleable__content\"><pre>MultinomialNB()</pre></div></div></div></div></div>"
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"nb_classifier = MultinomialNB()\n",
"nb_classifier.fit(X_train_tfidf, y_train)"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-09T12:45:09.298705Z",
"end_time": "2024-06-09T12:45:09.332701Z"
}
}
},
{
"cell_type": "code",
"execution_count": 10,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Naive Bayes Accuracy: 0.9707865168539326\n"
]
}
],
"source": [
"y_pred = nb_classifier.predict(X_test_tfidf)\n",
"nb_accuracy = accuracy_score(y_test, y_pred)\n",
"print(f'Naive Bayes Accuracy: {nb_accuracy}')"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-09T12:45:09.392705Z",
"end_time": "2024-06-09T12:45:09.449702Z"
}
}
},
{
"cell_type": "code",
"execution_count": 11,
"outputs": [
{
"data": {
"text/plain": "<Figure size 1000x700 with 2 Axes>",
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAw0AAAJuCAYAAADy9u6gAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABaQ0lEQVR4nO3deZyN5f/H8fcZszLWsWSLSJaZMWYxsoUJiYookS/RQmUpZRv7rhDK2KVUinzRpigtUskyDE0oW5YmmsGoMWOOMfP7o5/zPcfNnWXO3LO8nj3O49G5zn3O/ZlznJnzOe/rum9bVlZWlgAAAADgKjysLgAAAABA7kbTAAAAAMAUTQMAAAAAUzQNAAAAAEzRNAAAAAAwRdMAAAAAwBRNAwAAAABTNA0AAAAATNE0AABwGc57CgCuaBqAAqZ79+6qU6eOfvrppyveHhUVpWHDhl3XYw4bNkxRUVHZUZ6p2bNnq2bNmi6XevXqqX379lq+fLnb9+8Ohw8f1tixY9WyZUvVrVtXzZs31wsvvKB9+/a5bZ9r165VixYtFBQUpNGjR2fLYx4/flw1a9bU6tWrs+XxrmVfNWvW1IoVK664zd9//63g4GDVrFlTW7Zsua7Hnzt3rl5//fV/3e5G3isAkFd5Wl0AgJx38eJFRUdHa/Xq1fL29r7px3v22WfVo0ePbKjs2lz6oJiZmamUlBR9++23GjNmjAoVKqSHH344x+q4WZ9//rmGDBmiGjVq6JlnnlGlSpV04sQJLV26VJ07d9a8efPUuHHjbN/v+PHjVbVqVb300ksqV65ctjxm2bJltWLFCt16663Z8njXwsPDQ+vWrdMjjzxiuO2LL76Q3W6/ocd99dVX1a9fv3/dLiYmRv7+/je0DwDIa2gagAKoaNGi2r9/v+bMmaOBAwfe9OPl5AdFSapXr57L9bvuukv79u3T8uXL80zTcPToUQ0dOlRNmzbVrFmzVKhQIcdtrVu3VteuXTV06FB99dVX2dLYOUtOTlbjxo3VoEGDbHtMb29vw+vibmFhYdqyZYtOnz6tUqVKudy2du1a1a5dW3v37nXb/uvUqeO2xwaA3IbpSUABVLt2bXXo0EGLFy9WfHy86bbnz5/XK6+8otatWysoKEhhYWHq1auXy4cx5+lJo0aNUuPGjXXx4kWXx5k0aZIaNGigCxcuSJJ+/fVX9enTR2FhYQoLC1Pfvn117NixG/6ZihUrJpvN5jK2YcMGPfroowoNDVVQUJDatGmjZcuWSZIyMjLUpEkTvfjii4bHat26tUaOHOm4vnLlSrVr105BQUFq3ry5Zs+e7fLznT59Wi+++KIaN26s4OBgtW/fXh988IFpvW+//bbsdrtGjhzp0jBIkp+fn4YOHapOnTrp7NmzjvFPP/1UHTt2VGhoqBo3bqzRo0e73D579my1atVK33zzje6//34FBQXpnnvucdSyZcsW1axZU5I0Z84c1axZU8ePH1f37t3VvXt3lxoubXtpak9mZqZmzpypqKgoBQUFKSoqSq+88orj9bzS9KTffvtNAwYMUOPGjVWvXj11795dsbGxjtsv3eezzz7TgAEDFBoaqsjISI0cOVKpqammz58ktWrVSh4eHvriiy9cxs+cOaMff/xR7dq1M9xn27ZteuKJJ1S/fn3HzzF79mxlZmZKkuP5iYmJcfz/pec1JiZGkZGRatKkic6ePesyPWnKlCmqWbOmfvzxR8e+Vq9erZo1a/7rvwUAyAtoGoACavjw4SpZsqSio6NNp3EMGTJEq1atUu/evbVkyRJFR0dr//79evHFF6+4WLR9+/ZKSkpymUeemZmpzz77TO3atZOXl5cOHz6sLl266NSpU3r55Zc1adIkHTt2TF27dtWpU6f+tfaMjAzH5a+//tInn3yib7/9Vv/5z38c23zzzTfq27evAgMDNXfuXM2ePVuVK1fW+PHjtWvXLnl6eqpDhw7asGGDUlJSHPeLjY3VkSNH1LFjR0nSggULNGrUKDVs2FDz589Xt27dtGjRIo0aNcpxn8GDB+vgwYMaN26cFi1apDp16mjo0KEuHyAvt2nTJtWpU+eq04MaNmyogQMHqkyZMpL+mWf/wgsvqF69enrttdfUt29frV+/Xt27d9f58+cd90tMTNT48ePVo0cPLVy4UJUqVdLQoUN18OBBBQYGOqZ2PfTQQ1qxYoXKli37r8+3JC1atEjvvfee+vbtqyVLlqhr1656/fXXNW/evCtuf+DAAXXs2FHHjx/XyJEjNX36dNlsNj322GPaunWry7ZjxoxRxYoVNXfuXD3xxBP673//e9XHdVasWDE1btxY69atcxlfv369KlSooLp167qM79u3Tz179lSJEiU0c+ZMzZs3TxEREYqJidFnn30mSYbn55KEhARt3LhRM2fOVHR0tIoXL+7y2AMHDlTVqlU1ZswY2e12JSQkaNKkSbr33nvVoUOHf/1ZACC3Y3oSUEAVL15c48eP1zPPPHPVaUp2u13nzp3TyJEj1bZtW0lSZGSkUlJS9NJLLykpKcnxofaS8PBwVaxYUZ988okaNWok6Z9vrRMTE9W+fXtJ/3yL6+fnpzfffNMxJ7xhw4Zq2bKlFi9erKFDh5rWHhgYaBiLiopy1Cj986H1wQcf1IgRIxxjoaGhatCggbZs2aKQkBB16tRJixYt0vr169WpUydJ0gcffKCqVasqLCxMf//9t+bOnatHHnnEkTw0adJEJUqU0MiRI9WrVy/VqFFDW7duVd++fdWyZUvHc1SiRAnTaUUnTpxQ7dq1TX/OS86ePat58+apc+fOLguX77jjDnXr1k2rVq1St27dJElpaWmaNGmSGjZsKEmqWrWqWrRooY0bN+rxxx93TCG65ZZbrms60datWxUUFOR4niIjI+Xn56eiRYtecfuYmBh5e3vrrbfecrzGzZs313333aepU6fqv//9r2PbZs2aOV7zhg0b6vvvv9c333xzxRTocvfee6+GDx/uMkVp7dq1Lv8WLtm3b58aNWqkadOmycPjn+/MGjdurK+++kpbtmxRu3btrvr8ZGRkaOjQoYqIiLhiHb6+vnrppZf06KOPauHChdqxY4f8/f01bty4f/0ZACAvoGkACrCoqCg98MADWrx4sVq3bm34MO7t7e04iszJkyd1+PBh/fbbb/r6668l6YoJhc1m0wMPPKB3331XY8eOlbe3t9auXauqVasqJCREkvTjjz8qMjJSvr6+ysjIkCT5+/srIiJCP/zww7/W7fyBMy0tTT/99JPmz5+vJ554Qm+++aYKFSqkJ598UpJ07tw5HT58WEePHnUcMepS3bfddpvCw8P14YcfqlOnTjp//rw+++wzPfXUU5KknTt36vz584qKinLUeel5k6Tvv/9eNWrUUIMGDTR79mzt2bNHTZs2dfkQfDWFChUyTOG6mri4ONntdt13330u4xEREapYsaK2bt3qaBok1zUft9xyiyRd03QfMw0aNNArr7yiRx99VFFRUWrevLlLsnO5rVu3qkWLFi4LhT09PdWuXTvNmTNH586du2K9l2r+/fffr6muli1batSoUfriiy/0yCOP6M8//9T27ds1evRonT592mXbDh06qEOHDkpPT9fhw4d15MgR7d27VxcvXnRMszLzb01eaGioevbsqTlz5igrK0tvvPGGIZEAgLyKpgEo4EaOHKnNmzcrOjpaq1atMty+adMmTZ48WYcOHVKRIkVUq1YtFS5cWNLVj2Xfvn17zZs3T5s2bVLTpk31+eef67HHHnPcnpycrE8//VSffvqp4b6XL2i9kuDgYJfrkZGRKlOmjAYPHqwvv/xSrVu31unTpzVmzBht2LBBNptNVapUcXxL7Fz3Qw89pOHDh+uPP/5QbGyszp0755hOkpycLEnq3bv3Fev4888/JUkzZ87U/Pnz9dlnn2n9+vXy8PBQo0aNNH78eFWsWPGK961QoYISEhKu+jNeuHBBZ8+eVenSpR3rFkqXLm3YrnTp0vr7779dxvz8/Bz/f+kb9Zs978CTTz6pIkWKaNWqVZo+fbqmTZumGjVqaOTIkbrzzjsN21+q/Ur1ZmVluUwJc673Us3XWq+/v7/uuusux1GU1q1bp9tvv101atQwHGr1/PnzmjBhgj788ENlZGSoUqVKCg0Nlaen5zXtr0iRIv+6zYMPPqglS5aoTJkyjiYZAPIDmgaggCtevLjGjh2rvn37au7cuS63HT161DHtZsGCBapcubJsNpuWLVumTZs2XfUxb7vtNtWtW1efffaZPDw89Ndff+mBBx5w3F60aFE1atRIvXr1MtzX0/PGfi0FBQVJ+mfxrSQNGjRIhw4d0ptvvqnQ0FB5e3srLS1N77//vsv92rRpo4kTJ2rdunXavn27Gjdu7FhnUKxYMUnS9OnTVbVqVcM+L30oLlq0qAYPHqzBgwfr0KFD+vLLLzV37lyNGzdOCxcuvGK9TZo00dKlS5WYmGiY4iVJGzduVN++fRUTE+P4tjopKUnVqlVz2S4xMVGVK1e+xmfp6i5PPS5PJjw8PNStWzd169ZNp06d0saNGzV//nz1799f33//veHxihcvrqSkJMN4YmKiJKlkyZKOputmtW3bVoMHD9bp06f16aefXnEBtPTPYvz169dr1qxZatSokaP5vTSV62ZlZmZq7NixuvXWW5WUlKRp06ZpzJgx2fLYAGA1FkIDUMuWLXXfffdp4cKFLlM64uPjlZ6ert69e+vWW291HJ3oUsNg9u1s+/bttWnTJq1du1ZhYWEuH2wjIyN14MAB1a5dW8HBwQoODlZQUJDefPNNw5FwrtXu3bslyfHhPjY2Vq1bt1aDBg0cawu+/fZbSXIcKUeSChcurLZt2+qTTz7R999/71gALUkhISHy8vLSyZMnHXUGBwfL09NTM2bM0PHjx/X777+rWbNmjsW41apV01NPPaVGjRqZJgndunWTl5eXJk2adMUP7K+99ppKliypu+66SyEhIfL29tYnn3zist327duVkJCgsLCwG3rOLvH399eJEydcxpyPciRJXbp00cSJEyVJAQEB6tixo7p166a//vrLJTW4pH79+vr6669dbrt48aLWrl2r4ODgbD2MbIsWLeTt7a133nlHcXFxV20aYmNj1aBBA7Vs2dLRMMTHx+v06dMu/yYupTPXa+nSpdqxY4cmT56s5557Tu+99542b958Q48FALkNSQMASf8cKvXHH390+XY4MDBQnp6emjZtmh5//HHZ7XatXr1a33zzjSTzefJt27bVSy+9pE8//dTwbeuzzz6rLl26qE+fPuratat8fHy0YsUKbdiwQa+99tq/1hoXF+f4/4sXL+rnn3/Wa6+9pjvuuEPNmzeXJNWtW1cff/yxAgMDdcstt2jHjh1auHChbDab0tLSXB7voYce0iOPPKLixYs7FjNL/3wb/uSTT+rVV19VSkqKGjRooJMnT+rVV1+VzWZTrVq1VLRoUd1yyy2aOHGiUlJSdOuttyo+Pl4bN25Unz59rvozVKpUSWPHjtWIESPUrVs3denSReXLl9fRo0f1xhtv6NixY3r99dfl4+MjHx8f9e7dW3PmzJGXl5datGih48eP69VXX9Xtt9+uBx988F+fMzMtWrTQV199pSlTpigqKkrbt283HCa0fv36WrJkiUqXLq3Q0FCdPHlSb7zxhiIjI1WqVCnDv4V+/frp22+/VY8ePdS7d295eXnpnXfe0bFjx7R48eKbqvdyhQsXVrNmzbRw4ULVrVv3qsnLpfTrvffeU/Xq1bVv3z7NmzfP8G+iWLFi2rFjh7Zt23bVhc+XO3z4sGbNmqXOnTurfv36CgsL08cff6wRI0bo448/vqapTQCQm9E0AJAklShRQmPHjnU5E26VKlX0yiuvKCYmRs8884yKFy+uevXq6e2331b37t21fft2x7HsL1eqVCk1adJE33//vdq0aeNyW61atbRs2TLNnDlTQ4YMUVZWlu644w7N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r8lms6lGjRr66aefHNtnZmZq3759V3ysKlWquNx28eJFRUVFKTY2VjabzTFerFgxBQQEKDEx0bHP8uXLa9q0aTp8+LDuuOMOnT17VkeOHHHcZ+/evTf086WkpOiTTz7RzJkzNWDAALVq1cqxyNm5Mfn1118d/7979255eXmpUqVKuu2223T48GFVqlTJUWtcXJzefvvtG6oHAJA70TQAgIkmTZqoYsWKGjx4sH755Rdt375do0aNkp+fnwoVKqTOnTsrPj5e8+bN06FDh/Tyyy+7HOXIWffu3fXRRx9pzZo1OnLkiKZMmaKsrCwFBgbKz89PZ8+e1W+//aaMjAz17NlTs2bN0ldffaXffvtNI0eO1I4dO1StWjVVr15dDRs21PDhw7Vv3z5t2LBB77zzzr/+LN9++63LZcuWLfL29pafn58+//xzHT9+XJs2bdL48eMlyWUh9MyZM7V582bFxcVp4sSJ6tKli/z8/PTAAw/o/PnzGj16tA4ePKiNGzdq0qRJCggIyJ4XAACQKzA9CQBMFCpUSPPmzdOECRPUuXNnFS5cWG3atHGsRahSpYrmzZunKVOmaN68eWrZsqVjwfDl6tevrzFjxmjOnDlKTExUUFCQ5s+fL19fX915552qUqWK7r//fr377rt64okndO7cOY0ePVopKSkKCgrS66+/ruLFi0v650P8qFGj1KVLF1WoUEHdu3fX6tWrTX+Wp556yuV6uXLl9O2332ratGl6+eWX9fbbb6tSpUp65plnNGvWLO3du1fVq1eXJPXq1UsjRozQmTNndO+992rQoEGSJH9/fy1atEiTJ09Whw4dVKJECXXr1k19+vS5qecdAJC72LI4oxAAAAAAE0xPAgAAAGCKpgEAAACAKZoGAAAAAKZoGgAAAACYomkAAAAAYIqmAQAAAIApmgYAAAAApmgaAAAAAJiiaQAAAABgiqYBAAAAgCmaBgAAAACm/g9uYt6bkLLGCgAAAABJRU5ErkJggg=="
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"conf_matrix = confusion_matrix(y_test, y_pred)\n",
"plt.figure(figsize=(10, 7))\n",
"sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues')\n",
"plt.xlabel('Predicted Label')\n",
"plt.ylabel('True Label')\n",
"plt.title('Naive Bayes Confusion Matrix')\n",
"plt.show()"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-09T12:45:09.786701Z",
"end_time": "2024-06-09T12:45:10.254699Z"
}
}
},
{
"cell_type": "code",
"execution_count": 15,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" business 0.97 0.97 0.97 115\n",
"entertainment 0.99 0.93 0.96 72\n",
" politics 0.93 0.97 0.95 76\n",
" sport 1.00 0.99 1.00 102\n",
" tech 0.96 0.99 0.98 80\n",
"\n",
" accuracy 0.97 445\n",
" macro avg 0.97 0.97 0.97 445\n",
" weighted avg 0.97 0.97 0.97 445\n",
"\n"
]
}
],
"source": [
"print(classification_report(y_test, y_pred))"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-09T12:46:10.906888Z",
"end_time": "2024-06-09T12:46:10.938882Z"
}
}
},
{
"cell_type": "markdown",
"source": [
"## LSTM"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-09T12:40:34.922075Z",
"end_time": "2024-06-09T12:40:34.991158Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" business 0.97 0.97 0.97 115\n",
"entertainment 0.99 0.93 0.96 72\n",
" politics 0.93 0.97 0.95 76\n",
" sport 1.00 0.99 1.00 102\n",
" tech 0.96 0.99 0.98 80\n",
"\n",
" accuracy 0.97 445\n",
" macro avg 0.97 0.97 0.97 445\n",
" weighted avg 0.97 0.97 0.97 445\n",
"\n"
]
}
],
"execution_count": 27
},
{
"cell_type": "markdown",
"source": [
"### Przygotowanie danych"
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": 31,
"outputs": [],
"source": [
"label_encoder = LabelEncoder()\n",
"integer_encoded = label_encoder.fit_transform(y_train)"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-09T12:49:28.830665Z",
"end_time": "2024-06-09T12:49:28.849664Z"
}
}
},
{
"cell_type": "code",
"execution_count": 32,
"outputs": [],
"source": [
"onehot_encoder = OneHotEncoder(sparse=False)\n",
"integer_encoded = integer_encoded.reshape(len(integer_encoded), 1)\n",
"y_train = onehot_encoder.fit_transform(integer_encoded)\n",
"integer_encoded = label_encoder.transform(y_val).reshape(len(y_val), 1)\n",
"y_val = onehot_encoder.transform(integer_encoded)\n",
"integer_encoded = label_encoder.transform(y_test).reshape(len(y_test), 1)\n",
"y_test = onehot_encoder.transform(integer_encoded)"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-09T12:49:29.040664Z",
"end_time": "2024-06-09T12:49:29.090663Z"
}
}
},
{
"cell_type": "markdown",
"source": [
"### Tokenizacja"
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": 33,
"outputs": [],
"source": [
"tokenizer = Tokenizer(num_words=5000)\n",
"tokenizer.fit_on_texts(X_train)\n",
"X_train = tokenizer.texts_to_sequences(X_train)\n",
"X_val = tokenizer.texts_to_sequences(X_val)\n",
"X_test = tokenizer.texts_to_sequences(X_test)"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-09T12:49:29.345664Z",
"end_time": "2024-06-09T12:49:30.778251Z"
}
}
},
{
"cell_type": "code",
"execution_count": 34,
"outputs": [],
"source": [
"X_train = pad_sequences(X_train, maxlen=1000)\n",
"X_val = pad_sequences(X_val, maxlen=1000)\n",
"X_test = pad_sequences(X_test, maxlen=1000)"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-09T12:49:30.748251Z",
"end_time": "2024-06-09T12:49:30.831249Z"
}
}
},
{
"cell_type": "markdown",
"source": [
"### Model"
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": 35,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/15\n",
"23/23 [==============================] - 8s 147ms/step - loss: 1.5697 - accuracy: 0.2725 - val_loss: 1.2654 - val_accuracy: 0.4410\n",
"Epoch 2/15\n",
"23/23 [==============================] - 2s 108ms/step - loss: 1.1485 - accuracy: 0.4698 - val_loss: 1.1248 - val_accuracy: 0.5197\n",
"Epoch 3/15\n",
"23/23 [==============================] - 2s 109ms/step - loss: 0.8194 - accuracy: 0.6678 - val_loss: 0.6958 - val_accuracy: 0.8090\n",
"Epoch 4/15\n",
"23/23 [==============================] - 2s 107ms/step - loss: 0.3153 - accuracy: 0.9178 - val_loss: 0.4955 - val_accuracy: 0.8624\n",
"Epoch 5/15\n",
"23/23 [==============================] - 2s 104ms/step - loss: 0.1949 - accuracy: 0.9396 - val_loss: 0.4209 - val_accuracy: 0.8567\n",
"Epoch 6/15\n",
"23/23 [==============================] - 2s 106ms/step - loss: 0.0780 - accuracy: 0.9860 - val_loss: 0.5346 - val_accuracy: 0.8567\n",
"Epoch 7/15\n",
"23/23 [==============================] - 2s 106ms/step - loss: 0.0673 - accuracy: 0.9874 - val_loss: 0.4814 - val_accuracy: 0.8904\n",
"Epoch 8/15\n",
"23/23 [==============================] - 2s 109ms/step - loss: 0.0527 - accuracy: 0.9888 - val_loss: 0.4456 - val_accuracy: 0.8792\n",
"Epoch 9/15\n",
"23/23 [==============================] - 2s 108ms/step - loss: 0.0259 - accuracy: 0.9944 - val_loss: 0.4536 - val_accuracy: 0.8736\n",
"Epoch 10/15\n",
"23/23 [==============================] - 2s 106ms/step - loss: 0.0147 - accuracy: 0.9993 - val_loss: 0.4479 - val_accuracy: 0.8792\n",
"Epoch 11/15\n",
"23/23 [==============================] - 2s 107ms/step - loss: 0.0179 - accuracy: 0.9958 - val_loss: 0.5509 - val_accuracy: 0.8764\n",
"Epoch 12/15\n",
"23/23 [==============================] - 2s 106ms/step - loss: 0.0269 - accuracy: 0.9951 - val_loss: 0.4670 - val_accuracy: 0.8764\n",
"Epoch 13/15\n",
"23/23 [==============================] - 2s 106ms/step - loss: 0.0150 - accuracy: 0.9972 - val_loss: 0.5061 - val_accuracy: 0.8652\n",
"Epoch 14/15\n",
"23/23 [==============================] - 2s 106ms/step - loss: 0.0094 - accuracy: 0.9993 - val_loss: 0.4863 - val_accuracy: 0.8708\n",
"Epoch 15/15\n",
"23/23 [==============================] - 2s 106ms/step - loss: 0.0050 - accuracy: 1.0000 - val_loss: 0.4513 - val_accuracy: 0.8904\n"
]
},
{
"data": {
"text/plain": "<keras.callbacks.History at 0x1d303c4ba00>"
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model = Sequential([\n",
" Embedding(input_dim=5000, output_dim=128, input_length=1000),\n",
" LSTM(128, return_sequences=True),\n",
" Dropout(0.2),\n",
" LSTM(64),\n",
" Dropout(0.2),\n",
" Dense(y_train.shape[1], activation='softmax')\n",
"])\n",
"optimizer = Adam(learning_rate=0.001)\n",
"model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])\n",
"model.fit(X_train, y_train, epochs=15, batch_size=64, validation_data=(X_val, y_val))"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-09T12:49:30.824250Z",
"end_time": "2024-06-09T12:50:14.427832Z"
}
}
},
{
"cell_type": "markdown",
"source": [
"### Ocena modelu"
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": 36,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"12/12 [==============================] - 0s 38ms/step - loss: 0.4513 - accuracy: 0.8904\n",
"14/14 [==============================] - 1s 34ms/step - loss: 0.5677 - accuracy: 0.8629\n",
"LSTM Validation Accuracy: 0.8904494643211365, loss: 0.4512944519519806\n",
"LSTM Test Accuracy: 0.8629213571548462, loss: 0.5676819086074829\n"
]
}
],
"source": [
"val_loss, val_accuracy = model.evaluate(X_val, y_val)\n",
"test_loss, test_accuracy = model.evaluate(X_test, y_test)\n",
"print(f'LSTM Validation Accuracy: {val_accuracy}, loss: {val_loss}')\n",
"print(f'LSTM Test Accuracy: {test_accuracy}, loss: {test_loss}')\n"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-09T12:50:14.434837Z",
"end_time": "2024-06-09T12:50:15.550828Z"
}
}
},
{
"cell_type": "code",
"execution_count": 37,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"14/14 [==============================] - 1s 35ms/step\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\adamw\\PycharmProjects\\pythonProject\\venv\\lib\\site-packages\\sklearn\\preprocessing\\_label.py:154: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n",
" y = column_or_1d(y, warn=True)\n"
]
}
],
"source": [
"y_pred = model.predict(X_test)\n",
"y_pred = onehot_encoder.inverse_transform(y_pred)\n",
"y_test = onehot_encoder.inverse_transform(y_test)\n",
"y_pred = label_encoder.inverse_transform(y_pred)\n",
"y_test = label_encoder.inverse_transform(y_test)"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-09T12:50:15.554828Z",
"end_time": "2024-06-09T12:50:16.967222Z"
}
}
},
{
"cell_type": "code",
"execution_count": 38,
"outputs": [
{
"data": {
"text/plain": "<Figure size 1000x700 with 2 Axes>",
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAwYAAAJuCAYAAAAKFhVXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABYDklEQVR4nO3dd3xT9f7H8XdK6YBSCmUPC7IsBUopgigoAjIcV1Dx4mAroAxBkCl7VIaAUNmgKFxBBFwgIi5Qkb0qQyjbMlqgldKRjvz+8GduIlyhmOS0Pa/n75HHj3xzevJJz03NJ+/v9xyLzWazCQAAAICpeRldAAAAAADj0RgAAAAAoDEAAAAAQGMAAAAAQDQGAAAAAERjAAAAAEA0BgAAAABEYwAAAABANAYAgDyG63ICgHvQGABwqY4dO6pjx4433e7KlSuKiopSixYtVKtWLTVo0ECdO3fWV199Zd9m27ZtqlGjxk1vZ8+eddr2hx9+uOFzxsbGOv3MzRw4cECvvfaamjZtqjp16qhFixYaOXKkzpw5c+u/kBx69913dd9996lOnTqaM2eOS/b55+9m27ZtLtnfrTyXK4/Dn6xWqyZNmqTPPvvsptvWqFFDs2fPvuV9AwAkb6MLAGA+aWlpeu6555SVlaUePXooJCREV69e1RdffKE+ffpo+PDh6ty5s8LCwrRy5Ur7z/3yyy8aN26cRo0apbCwMPt4qVKl9Ntvv0mSvLy8tGHDBjVu3Pi6512/fv0t17h8+XJNmjRJDRs21MCBA1WqVCmdOnVKixcv1saNG7V06VLddddd/+C3cL3k5GRNnjxZTZs2Vbdu3VShQgWX7PfP32PVqlVdsr9b4arj4OjixYtaunSpoqKibrrtypUrVaZMmdt6HgAwKxoDAB63YcMGxcbG6ssvv1SlSpXs4y1atFBaWppmzZql559/XgEBAapbt6798fT0dElS1apVncYd1atXT1999ZXGjBkjb2/nP3Hr169XaGioDh069Lf17dq1SxMnTtRzzz2nESNG2McbNmyoFi1aqG3btho+fLjWrFmTsxd+E0lJScrOzlaLFi109913u2y/f/09eoIrjsM/4enXCwD5AVOJAHhcQkKCJCk7O/u6x3r27KmXX35ZVqv1tvb98MMPKzExUT///LPT+OHDh3Xy5Em1adPmpvtYvHixihQpoldfffW6x4oXL66hQ4eqefPmSklJkSRlZWVp+fLleuyxx1SnTh01bdpU06ZNszcykjR06FB16dJFq1evVqtWrVSrVi09/vjj2rx5syRpzZo1atasmSRp+PDhqlGjhiSpWbNmGjp0qFMNa9ascZqGk5aWpjFjxuj+++9XrVq11Lp1ay1evNi+/Y2mEh04cEDdu3dXw4YNVa9ePfXq1UtHjx697me2bt2qbt26KTw8XPfdd5+mTp2qrKysm/4Ob+c4bNq0Sc8++6wiIiLsr2P58uWSpLNnz6p58+aSpGHDhtl/V0OHDlXnzp01evRo1atXTw8//LCysrKcphL16dNHtWvX1vHjx+3PNXv2bIWGhmr79u03fS0AYBY0BgA8rkmTJvL29lbnzp0VHR2tvXv3KiMjQ5JUp04dde/eXf7+/re176pVq6patWrasGGD0/i6devUoEEDlSxZ8m9/3maz6YcfflCjRo3+Zw0PP/ywevfurUKFCkmSRo0aZV8vMXfuXD333HNatmyZXn75ZaeFsjExMVq8eLH69eunt99+WwUKFFDfvn2VlJSkpk2bKjo6WpL00ksvOU2huplJkyZp8+bNGjJkiBYvXqzmzZtrypQpWr169Q23//nnn/XMM8/Yf3bChAk6d+6cOnTooNjYWKdtBw0apMjISM2bN0+PPvqoFi1apFWrVt20ppweh++++069e/dWWFiY5syZo9mzZ6tixYoaN26c9u3bp1KlSjn9fv78tyTt3LlT586d09tvv62BAweqQIECTvseM2aMChUqpNGjR0v64zjMmzdP3bp1U4MGDW76WgDALJhKBMDjatSooRkzZmjs2LGaPXu2Zs+eLT8/P9WvX19PPfXULX2r/3fatGmj9957z2kay/r169WrV6+b/uyVK1eUnp5+y/P7jx07po8++kgDBw5Ujx49JEn33XefSpUqpcGDB2vz5s164IEHJElXr17VmjVrdMcdd0iSChUqpOeff14///yzWrVqpdDQUEnSHXfckaOpMNu3b9d9992nRx55RNIfU54KFSqk4ODgG27/5ptvKiQkRAsWLLB/iG7cuLEeeughzZo1S2+99ZZ92/bt26t3796SpEaNGmnTpk367rvv1KFDh5vWlZPjcOzYMbVr185p6lZERIQaNmyobdu2KTw83On3U7NmTft2mZmZGjdu3P9cU1CiRAmNHj1aAwYM0KpVq7R06VJVr15dr7zyyk1fAwCYCYkBAEO0bNlS3333nRYtWqRu3bqpSpUq+umnn9S/f3/169fvH52S8q/TWPbt26cLFy6oZcuWN/3ZPz8o38p0GUn2qSh/fij/0yOPPKICBQo4Td8pXry4vSmQZP8gm5qaekvP9b80bNhQH374oV588UUtW7ZMZ86cUe/evdW0adPrtk1JSdGBAwfUpk0bp2/WAwMD9eCDD143tSYiIsLpfpkyZexTqG4mJ8fhhRde0BtvvKFr164pJiZG69ev1/z58yXpptPKgoKCbrrQ+OGHH1arVq00atQonTlzRtOmTZOPj88tvQ4AMAsaAwCGKViwoJo0aaIhQ4ZozZo1+u6779SyZUt9+eWX+u677257v5UrV1ZoaKh9Gsv69evVuHFjFS1a9KY/W7RoURUuXFhxcXH/c5uUlBQlJSVJkv3//3VqjLe3t4oVK6arV6/ax/46NclisUi68VqLnBgxYoT69++vs2fPavz48WrRooU6dOigw4cPX7ft1atXZbPZVKJEieseK1GihFO9kuTn5+d038vL65abtpwch8uXL6tv376qX7++nn76ac2ePVvJycmSbn7dgsKFC99SPe3atVN2drYqVaqkypUr39LPAICZ0BgA8LgOHTpo2LBh142XLl1aEydOlPTH1JJ/4uGHH9ZXX32ljIwMbdiw4bpv9P9O48aNtW3bNqfFw44+/PBD3XPPPfrll1/sH3Lj4+OdtsnIyNCVK1dUrFix238R/++v6cVfv7H38fHRSy+9pC+++ELffvut/VvxgQMHXrevIkWKyGKx2BeAO4qPj1dQUNA/rtfRrR6HQYMG6cCBA3r33Xe1d+9effHFFxo+fLjL6khNTVVUVJSqV6+uX3/9VUuWLHHZvgEgv6AxAOBx5cuX14YNG254obATJ05IkqpXr/6PnqNNmzZKTEzUvHnzlJSUZD+jza3o1q2bEhMTNXPmzOsei4+P15IlS1S1alWFhYXZF6+uW7fOabt169YpKytLkZGR/+h1BAQE6Pz5805ju3btsv87LS1NrVq1sn/QLVeunJ577jk98sgjN0w9ChUqpFq1aumLL75wajiuXr2q77777h/X+1e3ehx27dqlli1bqmHDhvYpPn+esenPROWvi4pz4s0339T58+c1e/ZsPf/885o1a9Z1C60BwOxYfAzA5c6fP6933333uvHq1avr3nvv1YABA7Rt2zY99dRT6tSpkyIiIuTl5aUDBw5oyZIluv/++3X//ff/oxoqVqyo2rVra/78+XrooYfsZxC6FXXr1tUrr7yimTNnKjY2Vm3btlWxYsV09OhRLV68WOnp6famoWrVqmrXrp1mzZql1NRU3X333Tp06JCio6PVsGFDNWnS5B+9jgcffFDz58/X/PnzFR4erm+++cbpFKB+fn4KCwtTdHS0ChYsqBo1aujEiRNau3atWrVqdcN9Dhw4UN27d1ePHj307LPPKiMjQwsWLJDVarUvNHaVWz0OderU0WeffaawsDCVKVNGu3fv1oIFC2SxWOxrMIoUKSJJ2rp1q6pUqaLw8PBbqmH79u1atmyZBgwYoEqVKql///766quvNHToUK1YseIfNRwAkJ/QGABwudOnT9/w6rRPPfWU7r33XlWoUEFr167V/Pnz9dlnn2nhwoWy2WwKCQlR9+7d1alTJ/v8+3/i4Ycf1oEDB3I0jehPL730kmrWrGm/AnJSUpLKli2rpk2bqlevXipbtqx924kTJyokJESrV6/WwoULVapUKXXq1Ekvv/yyvLz+WTDbs2dPXb58WYsXL1ZGRoaaNm2qiRMn6qWXXrJvM27cOM2cOVNLlixRfHy8goOD9dRTT/3Ps+40atRI77zzjmbNmqVXX31VPj4+ql+/viZPnqxq1ar9o3pv5FaOwxtvvKHx48dr/PjxkqRKlSpp7Nix+vTTT7Vz505Jf6QnXbt21cqVK/X999/rxx9/vOlzp6SkaNiwYapevbq6d+8u6Y81CaNGjdJLL72kRYsWqWfPni54lQCQ91ls/+TUHwAAAADyBdYYAAAAAKAxAAAAAEBjAAAAAEA0BgAAAABEYwAAAABANAYAAAAARGMAAAAAQPn0Amf+EX2MLgEedGVHtNElwIMSrlqNLgEeVKKIj9ElwIOS0zKNLgEeVCIg934M9eRnydQ9uedzDIkBAAAAgPyZGAAAAAC3zWLO787N+aoBAAAAOCExAAAAABxZLEZXYAgSAwAAAAAkBgAAAIAT1hgAAAAAMCsSAwAAAMARawwAAAAAmBWJAQAAAOCINQYAAAAAzIrEAAAAAHDEGgMAAAAAZkViAAAAADhijQEAAAAAs6IxAAAAAMBUIgAAAMAJi48BAAAAmBWJAQAAAOCIxccAAAAAzIrEAAAAAHDEGgMAAAAAZkViAAAAADhijQEAAAAAsyIxAAAAAByxxgAAAACAWZEYAAAAAI5YYwAAAADArEgMAAAAAEckBgAAAADMisQAAAAAcOTFWYkAAAAAmBSJAQAAAOCINQYAAAAAzIrGAAAAAABTiQAAAAAnFhYfAwAAADApEgMAAADAEYuPAQAAAJgViQEAAADgiDUGAAAAAMyKxAAAAABwxBoDAAAAAGZFYgAAAAA4Yo0BAAAAALMiMQAAAAAcscYAeUXJYgH6z9TuOrd5imI+Ga3nH2tofywitKK+WzpQ8T++qe+XDlSD2pWMKxRukZ6ertEjh6vxPfXV/IHGWvruEqNLghtYrVZ1f7ad9u7aYR87F3dWr/V5QY80baCuHR7Xzm0/GVgh3IH3t7lYrVa9+cZ4tW7aSI8+dL/mRc+UzWYzuiyYGIlBHrRy+osq4OWl1i/OUrlSQVo0vqOuXkvTT3titX5+X63euEc9Ri9Tq/tq6vO5fRT51ESdOX/F6LLhItOnTdHBmBgtXLJUcXFxGjl8iMqVLaeHWrU2ujS4iDU9XRNHDdHJ48fsYzabTaMGv6LKVappzjsr9OPmbzR6SH8tWfGJSpcpa2C1cCXe3+Yyc1qUdu/YpunR85WSkqLRwwapTNlyavvk00aXBpOuMaAxyGPq1bxDjepWUeijo3Xyt0vad+Sspr/7lQZ0bqHK5UvocuI19Zu0QtnZNv168oKaN7pLL7ZvolGzPzW6dLhASkqK1q5epbfnLVRozTCF1gxT7LGjWvHBcj445BMnT8Rq0qgh131ruHfXdsX9dkazFr4vf/9CCql8p/bs+FkbPlurzi++bFC1cCXe3+bye1KiPv94jd6au0g1a9WRJHV4vrMOxuynMYBhmEqUx1QuH6yLl6/q5G+X7GMHjsapXugdqlyxhPYcOqPs7P9+oIj5NU4N61Q2olS4wa9HDiszM1N160bYxyLqRerA/n3Kzs42sDK4yv7dO1U38m7NXrTMafxgzH5VqxEqf/9C9rFa4fV0MGafp0uEm/D+Npd9e3crICBAEZF328c6dn1Rw0dPMLAq2Fm8PHfLRXJFYnDlyhVZrVb5+/srMDDQ6HJytQuXryqoiL/8/QoqNS1DklShdDEVLFhAFxJ+V+1q5Zy2r1CmmIKDChtRKtwgIT5eQUHFVNDHxz4WHFxC6enpSkxMVPHixQ2sDq7wryf/fcPxywnxCi5RymmsWPFgxV+84Imy4AG8v80l7rezKlOuvL74/BO9t2ShMjMz9PBjbdW5e095eeWuD4swD8Mag40bN2rZsmXav3+/0tPT7eN+fn6qVauWOnfurBYtWhhVXq6148BJnYtP0vQh7TVw8kcqUzJQ/Z5/UJL0/c5fNezF1ura7l699+nPerBBDT3atLbiLiYZXDVcJTUtVT4OHxok2e9nWK1GlAQPSUtPc/rAKEkFfXyUkcFxzy94f5tLakqKzp4+pU/WfKgRYyYoISFeUyeOlZ+fv57p2MXo8sAaA8955513FB0drRdeeEF9+vRRcHCwfHx8ZLValZCQoJ07d2ro0KF65ZVX1LFjRyNKzLXSrZl67rXFWjalmy7+ME0XL1/VjKWbNGXQk9p76IxeHv+B3hz8lGaP6KB9R85qwYdbdP/d1Y0uGy7i6+sr618+IPx538/Pz4iS4CE+Pj76Pcm5yc+wWuXry3HPL3h/m0uBAgV07VqyxkycqjJl/0j7L5w/p7WrVtAYwDCGNAZLlizR5MmTb5gIVKlSRQ0bNlSNGjU0fvx4GoMb2HXwtEIfHaPSwUWUkHhNLRrdpfgrV3Ut1ar3P/1Zyz/fplLFi+h8wu+a+MrjOh136eY7RZ5QqlRpJSZeUWZmpry9/3j7JiTEy8/PT0WYhpevlShZWqeOxzqNXb6coOASJQ2qCK7G+9tcgkuUlI+vr70pkKQ7QirrwoXzBlYFu1w2999TDHnVaWlpqlChwt9uU7p0aV29etVDFeUdxQIL6eslA1S8aGFduHRVWVnZat24lrbsPKr761fTe290VXa2TecTfpcktbwvTN/vOGpw1XCVGneFytvbW/v37bWP7dm9S2G1ajMnNZ+rWauOjh45pPS0NPtYzL49Cv3/s5kg7+P9bS5htcNlTU/X6VMn7WOnTsSqbNnyxhUF0zPkL81DDz2koUOHaufOncrMzHR6LDs7W7t379bw4cPVqlUrI8rL1a78nqLChXw1sf/jqlQ+WF3aNVLnx+/R9Hc36dipi3r4/lp6sX1jVSofrJnDnlaxQH8t++xno8uGi/j7++uxx9tqwrgxijmwX998vUnvvbtEzz7fyejS4GZ1IuqrZOkymjJhpE4eP6YP3lukwwcPqM1jTxhdGlyE97e5hFSqrHsbP6CJY0bo6K+Hte2nH/T+u4vV7qkbn4AA8ASLzYBL7FmtVk2ePFkfffSRsrKyFBQUZF9jkJiYKG9vbz3++OMaNmzYbc2r9I/o44aqc49qIaUU/fozigy7Qyd/u6SRsz7VF1tiJEmtG4cpakA7VSxbTNv3n1T/Nz7Uryfz91lLruyINroEj0pNTdXEcWO06auNCigSoC5du+v5Tl2MLstjEq6aZxFm83tq6823l6ju/5/O8LczpzVt0igd+uWAyle4Qy/3H6zIBo0MrtK9ShTxuflG+YjZ39/JaZk33ygfSb56VTOmTtL3326Sn5+/nmjfQV1ffEkWkyx8LRGQK06OeUP+j83x2HOlfpZ7rkVjSGPwp9TUVB0+fFjx8fFKTU2Vr6+vSpcurdDQ0H+00Cq/NwZwZrbGwOzM1BjAfI2B2ZmtMTA7GoM/5KbGwNAj4u/vr4iIiJtvCAAAAHiKSVKbv2I1EwAAAIDcceVjAAAAINfgdKUAAAAAzIrEAAAAAHDEGgMAAAAAZkViAAAAADhijQEAAAAAsyIxAAAAAByxxgAAAACAWZEYAAAAAA4sJAYAAAAAzIrEAAAAAHBAYgAAAADAtEgMAAAAAEfmDAxIDAAAAADQGAAAAAAQU4kAAAAAJyw+BgAAAGBaJAYAAACAAxIDAAAAAKZFYgAAAAA4IDEAAAAAYFokBgAAAIADEgMAAAAApkViAAAAADgyZ2BAYgAAAACAxAAAAABwwhoDAAAAAKZFYgAAAAA4IDEAAAAAYFokBgAAAIADEgMAAAAApkViAAAAADggMQAAAABgWiQGAAAAgCNzBgYkBgAAAABoDAAAAACIqUQAAACAExYfAwAAAMi1zp07p549e6pevXpq1qyZ3n33XftjBw8eVPv27RUeHq4nn3xSMTExOd4/jQEAAADgwGKxeOyWE/3791ehQoW0Zs0aDR8+XDNnztRXX32llJQU9ejRQ/Xr19eaNWsUERGhnj17KiUlJUf7pzEAAAAAcrmkpCTt3btXL730kipVqqQWLVqoSZMm2rp1q9avXy9fX18NHjxYVapU0YgRI1S4cGFt2LAhR89BYwAAAAA4yI2JgZ+fn/z9/bVmzRplZGTo+PHj2r17t0JDQ7Vv3z5FRkba92exWFSvXj3t3bs3R6+bxgAAAAAwiNVqVXJystPNarVet52vr69GjRqllStXKjw8XG3atNH999+v9u3bKz4+XqVKlXLaPjg4WOfPn89RLZyVCAAAAHDkwZMSzZ8/X9HR0U5jffr0Ud++fa/bNjY2Vg8++KC6du2qo0ePavz48WrUqJFSU1Pl4+PjtK2Pj88NG4y/Q2MAAAAAGKRnz57q2rWr09hfP+RL0tatW/XRRx/p+++/l5+fn2rXrq0LFy5o7ty5qlix4nVNgNVqlZ+fX45qYSoRAAAA4MCTawx8fHwUEBDgdLtRYxATE6OQkBCnD/s1a9ZUXFycSpcurYSEBKftExISrptedDM0BgAAAEAuV6pUKZ06dcopGTh+/LgqVKig8PBw7dmzRzabTZJks9m0e/duhYeH5+g5aAwAAAAAB7nxrETNmjVTwYIF9frrr+vEiRP65ptvNG/ePHXs2FGtW7fW77//rokTJ+rYsWOaOHGiUlNT1aZNm5y9btufrUU+kpye714S/kbn5buNLgEeNPuJ2kaXAA8K9C9odAkA3CTA14MrfHOozIsfeey5zi986pa3/fND//79+1W8eHE999xz6ty5sywWi/bv36/Ro0crNjZWNWrU0NixY1WzZs0c1cLiYwAAAMBBTq9I7ClVq1bVO++8c8PH6tSpo7Vr1/6j/TOVCAAAAACJAQAAAOAotyYG7kZiAAAAAIDEAAAAAHBizsCAxAAAAAAAjQEAAAAAMZUIAAAAcMLiYwAAAACmRWIAAAAAOCAxAAAAAGBaJAYAAACAAxIDAAAAAKZFYgAAAAA4MmdgQGIAAAAAgMQAAAAAcMIaAwAAAACmRWIAAAAAOCAxAAAAAGBaJAYAAACAAxIDAAAAAKZFYgAAAAA4IDEAAAAAYFokBgAAAIAjcwYGJAYAAAAASAwAAAAAJ6wxAAAAAGBaNAYAAAAAmEoEAAAAOGIqEQAAAADTIjEAAAAAHJg0MCAxAAAAAEBiAAAAADhhjQEAAAAA0yIxAAAAAByYNDAgMQAAAABAYgAAAAA4YY0BAAAAANMiMQAAAAAcmDQwIDEAAAAAQGIAAAAAOPHyMmdkQGIAAAAAgMQAAAAAcMQaAwAAAACmRWIAAAAAOOA6BgAAAABMi8QgH7h44YKmTZ6oHdu3ydfPVy1btVHvfq/K19fX6NLgAg1CgjSkeRWnsa0nrqiIn7dqlS1y3fZf/5qgOT+c8lR5cLMrly9p5pSJ2rXjZxUNClLHrj3U+tG2RpcFN+HvublwvJHb0BjkcTabTYMH9lNgYFEteneZfk9K0tjRI+TlVUD9Bw42ujy4QMUgP+04nah5P/73w741yyYvSd4F/ht1VitZWAMfvFNfHoo3oEq4g81m08gh/ZWdla0ZcxYrIf6iosYOV6HCAbr/wRZGlwcX4++5uXC8czeTziRiKlFed/LkCR3Yv0+jx09SlarVFBFZX71e7qsNX3xudGlwkfJF/XT6SqoSUzPttxRrlpKtWfb7v6dl6rnI8vr4wAXFXkoxumS4yK+HD+qX/Xv1+vg3VK1GqBo1fkDPdOymlcveMbo0uAF/z82F443ciMYgjysRXEKz5y5UcHAJp/Hkq8kGVQRXqxjkr3NJ6X+7zYNVgxXg662P95/3UFXwhLjfziioWHGVK1/RPnZn1eo6cuigMjMzDKwM7sDfc3PheOduFovFY7fchKlEeVyRwEDde18T+/3s7Gx9uGK5GjS8x8Cq4ErlivqqboVAPRFeRl4Wi7aevKIVu+OUmW2zb9O2Thl9/ssFpWVmG1gpXK1Y8WAlX/1daWmp8vPzlyRdvHBeWVmZupacrKJBxQyuEK7E33Nz4XgjN6IxyGfemj5Vhw8d1Hv/WWV0KXCBkoV95FewgDKysvXmt8dVqoivujesKJ8CFi3ZdlaSVKtMgIIL+2jTkQSDq4Wr1Qyro+CSpTRrWpT6DhyqywkJWvXBe5KkjAwSg/yOv+fmwvHOXXLbN/mewlSifGTWjGn6YPl7Gj9piqpWq250OXCB+GtWdV62V9FbTunk5VRtP5Wod7adUYsaJeX1/3+z7qlcTHvOJinZmmVssXA5H19fjZn0pvbs3K5HmzVSv56d9Vi79pKkwoUDDK4O7sTfc3PheCO3MCwx2LFjxy1ve/fdd7uxkvxhStR4ffThCo2fNEXNH2pldDlwob9+4D+blCZfby8F+Hrr97RMRZQvqg/3xBlUHdztrpq19MHHG3T5UoKKFg3Sjm0/qWhQMfkXKmR0aXAT/p6bC8c7dzJpYGBcYzBu3DgdO3ZM0h+n7PpfLBaLDh065Kmy8qQFc6P10aqVmjT5TbVo2drocuBCdcsHqv8DldVj5X5Zs/54n1Qq7q/f0/44E1ER3wIqE+irwxdZrJYf/Z6UpBGD+mrCtFkq/v8LFH/+cbPq1qtvcGVwF/6emwvHG7mNYY3B6tWr9eqrr+rs2bNauXIlF/O4TSeOx2rRgrnq0r2H6taLVELCf89hX6JESQMrgyscvpAsa1a2Xm5cSR/uiVPpQF91uruCPj7wx9mH7ijmr/TMbF24ajW4UrhDYNGiSk1N0fzZ0/V81xe1Z+d2ffH5x3pr3rtGlwY34O+5uXC8czezrjGw2P7u63o3s1qtevrpp9WoUSMNGTLEZftNTjfsJXncO4sXKPqt6Td8bNf+wx6uxhidl+82ugS3qhjkp64NK6p6qcJKzcjSxsMJWrX3nCTp3srF1K1hRb2wYr/BVXrO7CdqG12CR50+dULT3xinIwd/UZly5dWjd381avyA0WV5TKB/QaNL8Bj+npsLx1sK8M29H74jxn7jsefaM7qZx57rZgxtDCQpNjZW27dv1zPPPOOyfZqpMUD+bwzgzGyNgdmZqTEAzCY3Nwb1xnmuMdg9Kvc0BoafrrRKlSqqUqWK0WUAAAAApmZ4YwAAAADkJmZdY8B1DAAAAACQGAAAAACOTBoYkBgAAAAAIDEAAAAAnLDGAAAAAIBpkRgAAAAADkwaGJAYAAAAAKAxAAAAACCmEgEAAABOWHwMAAAAwLRIDAAAAAAHJg0MSAwAAAAAkBgAAAAATlhjAAAAAMC0SAwAAAAAByYNDEgMAAAAAJAYAAAAAE5YYwAAAADAtEgMAAAAAAcmDQxIDAAAAACQGAAAAABOWGMAAAAAwLRIDAAAAAAHJAYAAAAATIvEAAAAAHBg0sCAxAAAAAAAjQEAAAAAMZUIAAAAcMLiYwAAAACmRWIAAAAAODBpYEBiAAAAAIDEAAAAAHDCGgMAAAAApkViAAAAADgwaWBAYgAAAACAxAAAAABw4mXSyIDEAAAAAACJAQAAAODIpIEBiQEAAACQF1itVo0dO1Z333237r33Xk2fPl02m02SdPDgQbVv317h4eF68sknFRMTk+P90xgAAAAADiwWi8duOTFhwgT99NNPWrx4sd588019+OGHWrlypVJSUtSjRw/Vr19fa9asUUREhHr27KmUlJQc7Z+pRAAAAEAul5iYqNWrV+udd95RnTp1JEndunXTvn375O3tLV9fXw0ePFgWi0UjRozQ5s2btWHDBj3xxBO3/BwkBgAAAIADL4vnbrdq165dCggIUIMGDexjPXr0UFRUlPbt26fIyEh7AmGxWFSvXj3t3bs3Z687R1sDAAAAcBmr1ark5GSnm9VqvW67M2fOqHz58vr444/VunVrNW/eXG+//bays7MVHx+vUqVKOW0fHBys8+fP56gWphIBAAAADnI69/+fmD9/vqKjo53G+vTpo759+zqNpaSk6NSpU1qxYoWioqIUHx+vUaNGyd/fX6mpqfLx8XHa3sfH54YNxt+hMQAAAAAM0rNnT3Xt2tVp7K8f8iXJ29tbycnJevPNN1W+fHlJUlxcnD744AOFhIRc1wRYrVb5+fnlqBYaAwAAAMCBJ69j4OPjc8NG4K9KliwpX19fe1MgSZUrV9a5c+fUoEEDJSQkOG2fkJBw3fSim8mXjUFGVrbRJcCDlneKNLoEeFDk6I1GlwAP2jW2pdElAECuEB4ervT0dJ04cUKVK1eWJB0/flzly5dXeHi4Fi5cKJvNJovFIpvNpt27d6tXr145eg4WHwMAAAC53J133qmmTZtq2LBhOnz4sLZs2aIFCxbomWeeUevWrfX7779r4sSJOnbsmCZOnKjU1FS1adMmR89BYwAAAAA4sHjw/3Ji2rRpuuOOO/TMM89oyJAheu6559SxY0cFBARo/vz52rVrl5544gnt27dPCxYsUKFChXK0/3w5lQgAAADIb4oUKaIpU6bc8LE6depo7dq1/2j/NAYAAACAg5xceCw/YSoRAAAAABIDAAAAwJEnL3CWm5AYAAAAACAxAAAAAByZNDAgMQAAAABAYgAAAAA48TJpZEBiAAAAAIDEAAAAAHBk0sCAxAAAAAAAiQEAAADghOsYAAAAADAtEgMAAADAgUkDAxIDAAAAACQGAAAAgBOuYwAAAADAtGgMAAAAADCVCAAAAHBkzolEJAYAAAAARGIAAAAAODHrBc5uqTG46667bvkXdOjQoX9UEAAAAADPu6XG4L333nN3HQAAAECu4GXOwODWGoMGDRpcN5acnKzTp0+ratWqslqtCggIcHlxAAAAADwjx2sMrFarxo0bpzVr1kiSvvzyS02ePFmpqamaPn26ihYt6vIiAQAAAE8x6xqDHJ+VaMqUKTp27JjWrl0rX19fSVLfvn115coVTZgwweUFAgAAAHC/HDcGGzdu1IgRI1SjRg37WI0aNTR+/Hht3rzZpcUBAAAAnmaxeO6Wm+S4Mbh27Zr8/f2vG8/OzlZWVpZLigIAAADgWTluDJo1a6YZM2YoOTnZPnbmzBlNmDBBDzzwgEuLAwAAADzNYrF47Jab5LgxGDVqlLy8vNSgQQOlpqbqySefVMuWLRUYGKiRI0e6o0YAAAAAbpbjsxIVKVJEs2fP1pkzZxQbG6vMzExVrlxZVapUcUd9AAAAgEeZ9ToGOU4MJMlms+nUqVM6deqULl68qISEBFfXBQAAAMCDcpwYHDlyRH369NGlS5dUqVIl2Ww2nTx5UpUqVdLs2bNVoUIFd9QJAAAAeERum/vvKTlODEaPHq3w8HBt2bJFa9as0dq1a/X999+rfPnyrDEAAAAA8qgcNwYHDx5U7969VbhwYftYYGCgBgwYoN27d7u0OAAAAMDTLB685SY5bgzCw8O1devW68Z3796t0NBQlxQFAAAAwLNuaY1BdHS0/d8hISGaNGmStm/frjp16sjLy0u//vqrPv/8cz3//PNuKxQAAADwBC+TrjG4pcZg27ZtTvcjIiJ06dIlffvtt/ax8PBwxcTEuLY6AAAAAB5xS43B+++/7+46AAAAABgox6crlaRDhw7p6NGjys7OlvTHdQ2sVqsOHjyosWPHurRAAAAAwJNMOpMo541BdHS0oqOjVaJECV26dEmlS5dWQkKCsrKy9NBDD7mjRgAAAABuluOzEq1cuVJjx47VDz/8oLJly+r999/XTz/9pHvvvVd33HGHO2oEAAAAPMZisXjslpvkuDG4cuWKmjRpIkkKDQ3Vnj177NcxWL9+vcsLBAAAAOB+OW4MSpcurTNnzkiSqlSpooMHD0qSAgICdPnyZddWBwAAAHiYxeK5W26S4zUG7du316uvvqpJkyapRYsW6tKli0qVKqWffvpJd911lztqBAAAAOBmOW4MevXqpTJlysjf31916tTRsGHDtGLFCgUFBWnSpEnuqBE38d03mzR0YD+nsQebt1TUtJnGFAS3Sk9P16QJY/X1Vxvl6+unTl27qXOXbkaXBRdoG1FOE5+qdd14drZNtUd+Zb9fLyRIk56qpdZv/uDJ8uABvL/NheOde3GBsxxo27at/d/t27dX+/btlZaWpvj4eFfVhRw4cfyYGt//oIaNHGMf8/H1Na4guNX0aVN0MCZGC5csVVxcnEYOH6JyZcvpoVatjS4N/9AXB87rh6MJ9vveBSxa0q2+vj/y37FqpQM045lwpWdmG1Ei3Iz3t7lwvJHb3FZjcCM7duxQjx49dOjQIVftErfo5InjqlK1qoJLlDS6FLhZSkqK1q5epbfnLVRozTCF1gxT7LGjWvHBcv5Dkg+kZ2YrPdlqv//C/ZVlsVg0/ctfJUnt766g19pU19nLqQrwc9mfb+QSvL/NheOdu5k0MMj54mPkPieOx6piSCWjy4AH/HrksDIzM1W3boR9LKJepA7s32e/4CDyh6L+3up+fyXN+PKoMrJskqQm1Uto+Ecxeu/HUwZXB3fg/W0uHG/kRjQGeZzNZtPpkye17acf1f7xNnrysVZ6+63pysiw3vyHkeckxMcrKKiYCvr42MeCg0soPT1diYmJxhUGl/t3w4qKv5qujb9csI/1W75Xmw5eNLAquBPvb3PheOduXMfAg6xWq6ZOnaoHHnhA9erVU58+fRQbG+u0TUJCgkJDQ40oL085fy5OaWmpKujjo4lTpqvvgNf05Refa/aMaUaXBjdITUuVj8N/RCTZ72dYaQbzkycjK2j51tNGlwEP4v1tLhxv5Ea3NEl1x44dN93myJEjt/yk06dP17fffqvBgwfLZrNp2bJlevLJJzVt2jS1aNHCvp3NZrvlfZpV2XLl9eV3PykwsKgsFouq1whVdna2xr4+RK8MHKICBQoYXSJcyNfXV9a//Afjz/t+fn5GlAQ3qFU+UKWL+uqL/eeNLgUexPvbXDjeuZtZp9TcUmPQsWPHW9rZrcYhX3zxhaZPn67IyEhJ0iOPPKIpU6aof//+mjp1qtq0aZOj/Zld0aJBTvcrV75T6enp+j0pScWKFzemKLhFqVKllZh4RZmZmfL2/uPtm5AQLz8/PxUJDDS4OrhK4+oltOvkFf2elml0KfAg3t/mwvFGbnRLjcHhw4dd+qRpaWkKCgqy37dYLBoyZIi8vLz02muvydvbWxEREf97B7D7+acfNGr4a/r0i2/k5+8vSfr118MqGhREU5AP1bgrVN7e3tq/b6/qRdaXJO3ZvUthtWrLy8us32/kP7UrFNWeU4lGlwEP4/1tLhzv3M2sX04b8r+8hg0basqUKbp8+bLT+GuvvaZ///vfGjBggP7zn/8YUVqeUzs8Qr6+fpo0bpROnTyhn37YrOgZ0/R85+5GlwY38Pf312OPt9WEcWMUc2C/vvl6k957d4mefb6T0aXBhaqVDlDsxWtGlwEP4/1tLhxv5EaGnAh7xIgR6tevn+677z4tWrRI9913n/2xkSNHqlixYpo7d64RpeU5hQsX1ltzFmjG1DfU9bn2KlSosNo+9bSe78yVE/OrQYOHaeK4MXqha2cFFAnQS737qsVDLY0uCy4UHOCj31MzjC4DBuD9bS4c79zLy5yBgSw2A1f4Hj9+XCVLllSRIkWueyw2NlZff/21evTokeP9XknJckV5yCP8fVhgbSaRozcaXQI8aNdYPiQB+VVuvk5j/09cO43+78x8/C6PPdfNGHpI7rzzzv/5WJUqVVSlShUPVgMAAACY1201BllZWdqyZYtOnjypJ554QidOnNCdd955w2/+AQAAgLzErFOJctwYnDt3Tt27d1diYqKSkpLUvHlzLVq0SHv27NHixYtVo0YNd9QJAAAAwI1yfFaicePGKTIyUlu2bLFfoW/69Om69957NWHCBJcXCAAAAHiSxWLx2C03yXFjsHPnTnXr1s3piroFCxbUyy+/rJiYGJcWBwAAAMAzctwY+Pn56dKlS9eNnzhxQgEBAS4pCgAAADCKl8Vzt9wkx41Bhw4dNGrUKH333XeS/mgIVq9erZEjR+qpp55ydX0AAAAAPCDHi4979+6twMBAjRkzRqmpqerRo4eCg4PVpUsXde/O1XYBAACQt+Wyqf8ec1unK+3YsaM6duyolJQUZWVlcZpSAAAAII/LcWPw8ccf/+3jbdu2vc1SAAAAAON5mTQyyHFjMGvWLKf7WVlZunTpkry9vVWnTh0aAwAAACAPynFj8M0331w3du3aNY0aNYqLmwEAACDPy/HZefIJl7zuwoULq2/fvnrnnXdcsTsAAAAAHnZbi49v5PDhw8rOznbV7gAAAABDmHSJQc4bg44dO153+eZr167pyJEj6tKli6vqAgAAAOBBOW4MGjZseN2Yj4+PBg0apEaNGrmkKAAAAMAonJXoFiUmJqpTp06644473FEPAAAAAAPkePHxp59+Ki8vs67VBgAAQH5nsXjulpvkODHo0qWLxo4dqy5duqhcuXLy9fV1erxcuXIuKw4AAACAZ9z2Bc62bNkiSfaFyDabTRaLRYcOHXJheQAAAIBneeWyb/I95ZYagx07digiIkLe3t76+uuv3V0TAAAAAA+7pcagU6dO+uGHHxQcHKzy5cu7uyYAAAAAHnZLjYHNZnN3HQAAAECuYNbTld7y6YX+elEzAAAAAPnHLS8+fvLJJ2/pNKWsQQAAAEBeZtbvw2+5MejatauKFCnizloAAAAAGOSWGgOLxaJHHnlEwcHB7q4HAAAAMJRZT1d6S2sMWHwMAAAA5G+3lBi0a9fuuiscAwAAAPmRReaMDG6pMYiKinJ3HQAAAAAMdMuLjwEAAAAzYI0BAAAAANMiMQAAAAAckBgAAAAAMC0SAwAAAMCBxaSXPiYxAAAAAEBiAAAAADhijQEAAAAA0yIxAAAAAByYdIkBiQEAAAAAGgMAAAAAojEAAAAAnHhZLB673a4ePXpo6NCh9vsHDx5U+/btFR4erieffFIxMTE5f923XQ0AAAAAj1u3bp2+//57+/2UlBT16NFD9evX15o1axQREaGePXsqJSUlR/ulMQAAAAAceFk8d8upxMRETZkyRbVr17aPrV+/Xr6+vho8eLCqVKmiESNGqHDhwtqwYUPOXnfOywEAAABghMmTJ+vxxx9X1apV7WP79u1TZGSk/YrNFotF9erV0969e3O0bxoDAAAAwIHF4rmb1WpVcnKy081qtd6wrq1bt2rnzp16+eWXncbj4+NVqlQpp7Hg4GCdP38+R6+bxgAAAAAwyPz58xUZGel0mz9//nXbpaena/To0Ro1apT8/PycHktNTZWPj4/TmI+Pz/9sMP4XLnAGAAAAOPCS565w9mLPnuratavT2F8/5EtSdHS0atWqpSZNmlz3mK+v73VNgNVqva6BuJl82RgULEAQYibZNpvRJcCDvnqtqdElwIOKPTbD6BLgQVc+G2B0CYDH+fj43LAR+Kt169YpISFBERERkmRvBL788ks9+uijSkhIcNo+ISHhuulFN5MvGwMAAADgdv2Dywu4zfvvv6/MzEz7/WnTpkmSBg0apB07dmjhwoWy2WyyWCyy2WzavXu3evXqlaPnoDEAAAAAcrny5cs73S9cuLAkKSQkRMHBwXrzzTc1ceJEdejQQStWrFBqaqratGmTo+dgzg0AAADgIDdfx+BGAgICNH/+fO3atUtPPPGE9u3bpwULFqhQoUI52g+JAQAAAJDHvPHGG07369Spo7Vr1/6jfdIYAAAAAA68cuMiAw9gKhEAAAAAEgMAAADAkUkDAxIDAAAAACQGAAAAgBPWGAAAAAAwLRIDAAAAwIFJAwMSAwAAAAA0BgAAAADEVCIAAADAiVm/OTfr6wYAAADggMQAAAAAcGAx6epjEgMAAAAAJAYAAACAI3PmBSQGAAAAAERiAAAAADjxYo0BAAAAALMiMQAAAAAcmDMvIDEAAAAAIBIDAAAAwIlJlxiQGAAAAAAgMQAAAACccOVjAAAAAKZFYgAAAAA4MOs352Z93QAAAAAckBgAAAAADlhjAAAAAMC0aAwAAAAAMJUIAAAAcGTOiUQkBgAAAABEYgAAAAA4YfExAAAAANMiMQAAAAAcmPWbc7O+bgAAAAAOSAwAAAAAB6wxAAAAAGBaJAYAAACAA3PmBSQGAAAAAERiAAAAADgx6RIDEgMAAAAAJAYAAACAEy+TrjIgMQAAAABAYgAAAAA4Yo0B8qyLFy5o8Kv99GDjhmrd4n5Nnxql9PR0o8uCm1mtVj3V9jHt3L7N6FLgRlcuX9Looa/q0eb36rknH9aGzz82uiS4UMmi/vrPiEd1btVLilncVc+3qGl/LKR0oNZNelIJa/to9/xOal7vDgMrhTukp6dr9MjhanxPfTV/oLGWvrvE6JJgciQGeZzNZtPggf0UGFhUi95dpt+TkjR29Ah5eRVQ/4GDjS4PbpKenq7hgwcp9thRo0uBG9lsNo0c0l/ZWdmaMWexEuIvKmrscBUqHKD7H2xhdHlwgZUj/6UCBSxqPfQjlQsO0KJBrXU1xapPfjqmD0f9S7+cTNB9/f6jxxpV0cqR/1JEj6U6E3/V6LLhItOnTdHBmBgtXLJUcXFxGjl8iMqVLaeHWrU2ujTTs5h0jQGNQR538uQJHdi/Txu//UHBwSUkSb1e7quZ06fQGORTsbHHNHzwINlsNqNLgZv9evigftm/V8vXrFe58hVVrUaonunYTSuXvUNjkA/Uq1ZajcLKKbTrEp08n6R9sfGavmqHBjwVqcRr6bqzbFE9+OoKpaRn6siZy3qw7h3q1DJME5f/bHTpcIGUlBStXb1Kb89bqNCaYQqtGabYY0e14oPlNAYwDFOJ8rgSwSU0e+5Ce1Pwp+SryQZVBHfbtWOH7m7QUEuXrzC6FLhZ3G9nFFSsuMqVr2gfu7NqdR05dFCZmRkGVgZXqFymqC4mpujk+ST72IETCapXrbTuCyuvvccuKiU90/7YT7/8poahZY0oFW7w65HDyszMVN26EfaxiHqROrB/n7Kzsw2sDNIfaww8dctNclVikJmZqeTkZAUFBRldSp5RJDBQ997XxH4/OztbH65YrgYN7zGwKrjT0x2eMboEeEix4sFKvvq70tJS5efnL0m6eOG8srIydS05WUWDihlcIf6JC4nXFFTYV/6+3kr9/wagQskiKuhdQKWLF9K5y9ectr+YmKLyJYoYUSrcICE+XkFBxVTQx8c+FhxcQunp6UpMTFTx4sUNrA5mZVhisG7dOo0bN05ffvmlbDabJkyYoHr16qlRo0a67777tGzZMqNKy9Pemj5Vhw8d1Mt9+xtdCoB/qGZYHQWXLKVZ06KUmpqi386c1qoP3pMkZWSQGOR1Ow6f17nLyZr+0oMq5OutO8sWVb929SRJfgW9lZ6R5bR9ekaWfAsWMKJUuEFqWqp8HJoCSfb7GVarESUBxjQGixcv1ujRoxUfH6/Ro0fr5Zdf1qZNmzR16lR9/vnneu211zRv3jwtWLDAiPLyrFkzpumD5e9p/KQpqlqtutHlAPiHfHx9NWbSm9qzc7sebdZI/Xp21mPt2kuSChcOMLg6/FPpGVl6btI6NQ2vqIure2vTtH9r8fr9kqRsm+26JsC3YAGlpNMQ5he+vr6y/qUB+PO+n5+fESXBgZcsHrvlJoZMJVq+fLmmT5+u+++/X7t27dLzzz+vefPm6YEHHpAkValSRcWKFdPIkSPVo0cPI0rMc6ZEjddHH67Q+ElT1PyhVkaXA8BF7qpZSx98vEGXLyWoaNEg7dj2k4oGFZN/oUJGlwYX2PXrBYV2XaLSxQopISlVLSJDFJ+UouPnEtWiXojTtqWLFdb5v0wvQt5VqlRpJSZeUWZmpry9//g4lpAQLz8/PxUJDDS4OpiVIYnBlStXVKlSJUlSZGSkypYtqxIlnBfPVqhQQampqQZUl/csmButj1at1KTJb6pVm0eMLgeAi/yelKS+L3ZSUlKiigeXUAFvb/3842bVrVff6NLgAsUCfPX1tKdVvIifLlxJUVa2Ta3vrqwt+89q++Hzqlu1lPx8/psa3BtWTtsPnzewYrhSjbtC5e3trf379trH9uzepbBateXlxblhjGbWxceG/C+vXr16evvtt5WSkiJJ+uabbxQWFmZ//OLFi4qKilKjRo2MKC9POXE8VosWzFWXbi+qbr1IJSTE228A8rbAokWVmpqi+bOnK+63M1r3yWp98fnH6tCxm9GlwQWuJKersF9BTezeRJXKFFWXVrXUuWUtTf9op7YcOKuz8cla8Gorhd4RrEHt71b96mW09MsYo8uGi/j7++uxx9tqwrgxijmwX998vUnvvbtEzz7fyejSYGIWmwEnQz99+rR69OihmjVravr06U6Pbdq0SX379lWtWrU0Z84clSxZMsf7T043z/nd31m8QNFvTb/hY7v2H/ZwNcYw8xcrEbXu0sIlS1W/QUOjS/GYxGvmmmN9+tQJTX9jnI4c/EVlypVXj9791ajxA0aX5TFVnnnb6BLcqlr5Yoru11yR1cvo5PkkjXznB32x/YQk6c6yRTVvQEvdXaOMYuMS9dr87/Xt3tMGV+xeVz4bYHQJHpWamqqJ48Zo01cbFVAkQF26dtfznboYXZbH+OWqc2M623jIc1+wtgzN+WdddzGkMZD+uKJnQkLCdR/8L126pLNnz6p27duP0szUGMDcjYEZma0xMLv83hjAmdkaA7OjMfhDbmoMDDskFovlhmlAcHCwgoODDagIAAAAkCy57GxBnsJ3rQAAAABy15WPAQAAAKN5mTMwIDEAAAAAQGIAAAAAOGGNAQAAAADTIjEAAAAAHOS2KxJ7CokBAAAAABIDAAAAwBFrDAAAAACYFokBAAAA4IDrGAAAAAAwLRoDAAAAAEwlAgAAAByx+BgAAACAaZEYAAAAAA64wBkAAAAA0yIxAAAAAByYNDAgMQAAAABAYgAAAAA48TLpIgMSAwAAAAAkBgAAAIAjc+YFJAYAAAAARGIAAAAAODNpZEBiAAAAAIDEAAAAAHBkMWlkQGIAAAAAgMQAAAAAcGTSyxiQGAAAAAAgMQAAAACcmDQwIDEAAAAAQGIAAAAAODNpZEBiAAAAAIDGAAAAAABTiQAAAAAnXOAMAAAAgGmRGAAAAAAOuMAZAAAAANMiMQAAAAAcmDQwIDEAAAAAQGIAAAAAODNpZEBiAAAAAIDGAAAAAHBk8eD/5cSFCxfUr18/NWjQQE2aNFFUVJTS09MlSWfOnFGXLl1Ut25dPfzww/rhhx9y/LppDAAAAIBczmazqV+/fkpNTdXy5cs1Y8YMffvtt5o5c6ZsNpt69+6tEiVKaPXq1Xr88cfVp08fxcXF5eg5WGMAAAAAOMiN1zE4fvy49u7dqx9//FElSpSQJPXr10+TJ0/W/fffrzNnzmjFihUqVKiQqlSpoq1bt2r16tXq27fvLT8HiQEAAACQy5UsWVKLFi2yNwV/Sk5O1r59+1SzZk0VKlTIPh4ZGam9e/fm6DlIDAAAAAAHngwMrFarrFar05iPj498fHycxgIDA9WkSRP7/ezsbC1btkz33HOP4uPjVapUKaftg4ODdf78+RzVQmIAAAAAGGT+/PmKjIx0us2fP/+mPzd16lQdPHhQAwYMUGpq6nWNhI+Pz3UNx83ky8QgxZppdAnwIB9v+lszKR7gc/ONkG/Ef9zf6BLgQU0mf2d0CfCgHSOaGl3C/+bByKBnz57q2rWr09hfP+T/1dSpU7V06VLNmDFD1atXl6+vrxITE522sVqt8vPzy1Et+bIxAAAAAPKCG00b+jvjx4/XBx98oKlTp6pVq1aSpNKlS+vYsWNO2yUkJFw3vehm+KoVAAAAcJBbr2MQHR2tFStWaPr06XrkkUfs4+Hh4frll1+UlpZmH9u1a5fCw8NztH8aAwAAACCXi42N1Zw5c/Tiiy8qMjJS8fHx9luDBg1UtmxZDRs2TEePHtWCBQu0f/9+PfXUUzl6DqYSAQAAALnc119/raysLM2dO1dz5851euzIkSOaM2eORowYoSeeeEIhISF6++23Va5cuRw9h8Vms9lcWXRucPFqhtElwINYfGwufgULGF0CPCgzK9/9Jwp/48Fp3xtdAjwoNy8+PnA22WPPVbtCgMee62b4RAUAAACAqUQAAACAI09e4Cw3ITEAAAAAQGIAAAAAODFpZEBiAAAAAIDEAAAAAHCU0wuP5RckBgAAAABIDAAAAABHFnMGBiQGAAAAAEgMAAAAACcmDQxIDAAAAACQGAAAAADOTBoZkBgAAAAAIDEAAAAAHHEdAwAAAACmRWIAAAAAOOA6BgAAAABMi8YAAAAAAFOJAAAAAEcmnUlEYgAAAACAxAAAAABwZtLIgMQAAAAAAIkBAAAA4IgLnAEAAAAwLRIDAAAAwAEXOAMAAABgWiQGAAAAgAOTBgYkBgAAAABIDAAAAABnJo0MSAwAAAAAkBgAAAAAjriOAQAAAADTIjEAAAAAHHAdAwAAAACmRWIAAAAAODBpYEBiAAAAAIDEAAAAAHBm0siAxAAAAAAAjQEAAAAAphIBAAAATrjAGQAAAADTIjHI49Z/9rGixr5+3bjFYtHmHQcMqAieNKBPLxUrVlyjxk8yuhS4SXp6uiZNGKuvv9ooX18/deraTZ27dDO6LLjJxQsXNG3yRO3Yvk2+fr5q2aqNevd7Vb6+vkaXBhcoWMCiAS2qqlVYKWVk2fTpvnOa890JzXu+riJDgq7b/tN95zT+8yOeLxSmvcAZjUEe1/yh1mrYqLH9fmZmhvq/1F2NGj9gYFXwhI0b1uunHzbrkcfaGl0K3Gj6tCk6GBOjhUuWKi4uTiOHD1G5suX0UKvWRpcGF7PZbBo8sJ8CA4tq0bvL9HtSksaOHiEvrwLqP3Cw0eXBBQa2rKb6IUHqu2K/CvsU0MS2NXUuKU2DP4pRwQL/ncQRVr6IotqF6aNdcQZWCzOiMcjjfP385OvnZ7///jsLZbPZ1KvvAAOrgrslJSVq9oxpqhlW2+hS4EYpKSlau3qV3p63UKE1wxRaM0yxx45qxQfLaQzyoZMnT+jA/n3a+O0PCg4uIUnq9XJfzZw+hcYgHwj089bj4WXU+z/7dDDuqiRp+bazqlU+UGv3nLNv52WReje9U+//fFqHzl01qlzTM2lgQGOQn/yelKT/LF2iwa+PlY+Pj9HlwI1mTZ+qNo88poT4eKNLgRv9euSwMjMzVbduhH0sol6kFi2Yp+zsbHl5sUwsPykRXEKz5y60NwV/Sr6abFBFcKW6FYsqOT1Lu08n2ceWbj193XaP1imjQH9vLf3pjCfLAySx+Dhf+fijFQouWVIPtmhpdClwo53bf9be3TvVrcdLRpcCN0uIj1dQUDEVdGj0g4NLKD09XYmJicYVBrcoEhioe+9rYr+fnZ2tD1csV4OG9xhYFVylfJC/4pLS9HDt0lrVs4E+frmhujcOue6b6U6N7tAH288qNSPLkDrxB4vFc7fcJNc1BvXq1dOZM3TJOWWz2fT5J2v05L+fNboUuFF6erqixo/Ra8NGys9hChnyp9S01OvSvz/vZ1itRpQED3pr+lQdPnRQL/ftb3QpcAF/nwK6o5i/nogop3GfH9ZbX8fq3/XL69mGFezbRIYEqXSgrz52mFoEeJIhU4mGDRv2Px+zWq2aOnWqChcuLEmKioryVFl52uGDMbp44YJatGxjdClwo0Xz31ZoWC3dc2/jm2+MPM/X11fWvzQAf96nMczfZs2Ypg+Wv6eoKdNVtVp1o8uBC2Rl2xTg563XPz6o87+nS5LKBPrpychyWr7trCSp+V0l9VPsZf2elmlkqZBk1lUGhjQGly5d0ubNm1WnTh1VqVLFiBLynW1bf1R4vUgVCSxqdClwo682fKHLlxLUtFGkJMmakSFJ+mbTl/pu6y4jS4MblCpVWomJV5SZmSlv7z/+XCckxMvPz09FAgMNrg7uMiVqvD76cIXGT5qi5g+1MrocuEhCcrrSMrLsTYEknbqcotKB/z0VbaMqxbVg80kDqgP+YEhjsGDBAq1bt05Tp05Vo0aN1Lt3b3s8vmHDBr322muqWLGiEaXlWQdj9qt2eMTNN0SeNnfRu8rM/O83SdFvTZck9XnlVaNKghvVuCtU3t7e2r9vr+pF1pck7dm9S2G1arPwOJ9aMDdaH61aqUmT31SLlpx5Kj+J+e13+RUsoDuK++v05VRJUqXgQjqXlCZJKupfUBWK+Wv/2aS/2w08JLfN/fcUw/7L8sgjj+iTTz5RfHy8HnvsMf30009GlZIvnIg9pkqV7zS6DLhZ2XLlVfGOEPutcKHCKlyosCreEWJ0aXADf39/PfZ4W00YN0YxB/brm6836b13l+jZ5zsZXRrc4MTxWC1aMFddur2ouvUilZAQb78h7zt1OVVbjl7S6MfuUrVShXXPncXU+d47tPr/r1VQpWRhpWVk6bfENIMrhZkZerrSokWLatKkSdq6davGjBmjWrVqyWazGVlSnnX58iWmEQH50KDBwzRx3Bi90LWzAooE6KXefdXiIc48lh999+3XysrK0uIFc7V4wVynx3btP2xQVXClkZ8c1Gstq2lhpwilZWRr1c7ftHLnb5Kk4MIFlZzO2oLcwqSBgSy2XPJJ3Gq1avbs2Vq/fr2WLVumsmXL3va+Ll7NcGFlyO18vJlSYSZ+BQsYXQI8KDMrV/wnCh7y4LTvjS4BHrRjRFOjS/if4hI9d+a3ckG559pTuaYxcCUaA3OhMTAXGgNzoTEwFxoDc8nNjcG5JM81BmWL5p7GgE9UAAAAAIxdYwAAAADkNhaTrjIgMQAAAABAYwAAAACAqUQAAACAM3POJCIxAAAAAEBiAAAAADgxaWBAYgAAAACAxAAAAABwYjFpZEBiAAAAAIDEAAAAAHDEBc4AAAAAmBaJAQAAAODInIEBiQEAAAAAEgMAAADAiUkDAxIDAAAAACQGAAAAgBOuYwAAAADAtEgMAAAAAAdcxwAAAACAaZEYAAAAAA5YYwAAAADAtGgMAAAAANAYAAAAAKAxAAAAACAWHwMAAABOWHwMAAAAwLRIDAAAAAAHXOAMAAAAgGmRGAAAAAAOWGMAAAAAwLRIDAAAAAAHJg0MSAwAAAAAkBgAAAAAzkwaGZAYAAAAACAxAAAAABxxHQMAAAAApkViAAAAADjgOgYAAAAATIvEAAAAAHBg0sCAxAAAAAAAiQEAAADgzKSRAYkBAAAAABoDAAAAIC9IT0/X8OHDVb9+fTVu3FhLlixx6f6ZSgQAAAA4yK0XOJsyZYpiYmK0dOlSxcXFaciQISpXrpxat27tkv3TGAAAAAC5XEpKilatWqWFCxcqLCxMYWFhOnr0qJYvX+6yxoCpRAAAAIADi8Vzt1t1+PBhZWZmKiIiwj4WGRmpffv2KTs72yWvm8QAAAAAMIjVapXVanUa8/HxkY+Pj9NYfHy8ihUr5jReokQJpaenKzExUcWLF//HteTLxqBUkYJGlwAAcAXv3DnPF+6xY0RTo0sAJEl+HvyEPHv2fEVHRzuN9enTR3379nUaS01Nva5Z+PP+XxuL25UvGwMAAAAgL+jZs6e6du3qNPbXBkCSfH19r2sA/rzv5+fnklpoDAAAAACD3Gja0I2ULl1aV65cUWZmpry9//gIHx8fLz8/PwUGBrqkFhYfAwAAALlcaGiovL29tXfvXvvYrl27VLt2bXl5ueYjPY0BAAAAkMv5+/urbdu2GjNmjPbv369NmzZpyZIl6tSpk8uew2Kz2Wwu2xsAAAAAt0hNTdWYMWO0ceNGBQQEqHv37urSpYvL9k9jAAAAAICpRAAAAABoDAAAAACIxgAAAACAaAzyhfT0dA0fPlz169dX48aNtWTJEqNLggdYrVY9+uij2rZtm9GlwI0uXLigfv36qUGDBmrSpImioqKUnp5udFlwk1OnTql79+6KiIhQ06ZNtWjRIqNLgof06NFDQ4cONboMmBwXOMsHpkyZopiYGC1dulRxcXEaMmSIypUrp9atWxtdGtwkPT1dAwcO1NGjR40uBW5ks9nUr18/BQYGavny5UpKStLw4cPl5eWlIUOGGF0eXCw7O1s9evRQ7dq1tXbtWp06dUqvvvqqSpcurccee8zo8uBG69at0/fff6927doZXQpMjsQgj0tJSdGqVas0YsQIhYWF6aGHHtILL7yg5cuXG10a3OTYsWN6+umndfr0aaNLgZsdP35ce/fuVVRUlKpVq6b69eurX79++vzzz40uDW6QkJCg0NBQjRkzRpUqVdIDDzygRo0aadeuXUaXBjdKTEzUlClTVLt2baNLAWgM8rrDhw8rMzNTERER9rHIyEjt27dP2dnZBlYGd9m+fbsaNmyolStXGl0K3KxkyZJatGiRSpQo4TSenJxsUEVwp1KlSmnmzJkKCAiQzWbTrl27tGPHDjVo0MDo0uBGkydP1uOPP66qVasaXQrAVKK8Lj4+XsWKFZOPj499rESJEkpPT1diYqKKFy9uYHVwh2effdboEuAhgYGBatKkif1+dna2li1bpnvuucfAquAJzZo1U1xcnB588EG1atXK6HLgJlu3btXOnTv12WefacyYMUaXA5AY5HWpqalOTYEk+32r1WpESQDcZOrUqTp48KAGDBhgdClws1mzZmnevHk6dOiQoqKijC4HbpCenq7Ro0dr1KhR8vPzM7ocQBKJQZ7n6+t7XQPw533+0AD5x9SpU7V06VLNmDFD1atXN7ocuNmf883T09M1aNAgDR48+LovgZC3RUdHq1atWk6pIGA0GoM8rnTp0rpy5YoyMzPl7f3H4YyPj5efn58CAwMNrg6AK4wfP14ffPCBpk6dyrSSfCwhIUF79+5VixYt7GNVq1ZVRkaGkpOTmRqaz6xbt04JCQn2NYJ/fqn35Zdfas+ePUaWBhOjMcjjQkND5e3trb1796p+/fqSpF27dql27dry8mKmGJDXRUdHa8WKFZo+fTqnIM7nzp49qz59+uj7779X6dKlJUkxMTEqXrw4TUE+9P777yszM9N+f9q0aZKkQYMGGVUSQGOQ1/n7+6tt27YaM2aMJk2apIsXL2rJkiXMSQXygdjYWM2ZM0c9evRQZGSk4uPj7Y+VLFnSwMrgDrVr11ZYWJiGDx+uYcOG6bffftPUqVPVq1cvo0uDG5QvX97pfuHChSVJISEhRpQDSKIxyBeGDRumMWPGqHPnzgoICFDfvn3VsmVLo8sC8A99/fXXysrK0ty5czV37lynx44cOWJQVXCXAgUKaM6cORo/frz+/e9/y9/fXx07dlSnTp2MLg2ASVhsNpvN6CIAAAAAGItJ6AAAAABoDAAAAADQGAAAAAAQjQEAAAAA0RgAAAAAEI0BAAAAANEYAAAAABCNAQAAAADRGAAwkWbNmqlGjRr2W1hYmFq3bq13333Xpc/TsWNHzZ49W5I0dOhQDR069KY/Y7Va9eGHH972c65Zs0bNmjW74WPbtm1TjRo1bnvfNWrU0LZt227rZ2fPnq2OHTve9nMDADzH2+gCAMCThg8frocffliSlJmZqZ9//lkjRoxQUFCQ2rZt6/LnGzFixC1tt27dOs2bN09PP/20y2sAAOBWkBgAMJUiRYqoZMmSKlmypMqWLat27dqpUaNG2rhxo9uer0iRIjfdzmazueX5AQC4VTQGAEzP29tbBQsWlPTHNKDx48erefPmatq0qZKTk3Xu3Dn16tVL4eHhatasmaKjo5WVlWX/+a+++kqtWrVS3bp1NW7cOKfH/jqV6JNPPlHr1q0VHh6uDh066ODBg9q2bZuGDRum3377TTVq1NDZs2dls9n09ttvq3Hjxqpfv7569eqluLg4+34uXLigF154QXXr1lW7du10+vTp2379ycnJGjZsmBo1aqRatWqpdevW2rRpk9M2O3bsUMuWLRUeHq5XXnlFSUlJ9sd+/fVXdezYUXXq1FGrVq20fPny264FAGAcGgMAppWRkaGNGzfqxx9/VPPmze3ja9as0dSpUxUdHa3ChQurT58+Cg4O1tq1axUVFaXPPvtM8+bNkyQdO3ZM/fv31zPPPKPVq1crMzNTu3btuuHzbdmyRSNGjFDnzp316aefqlatWurZs6ciIiI0fPhwlSlTRj/88IPKli2rZcuW6bPPPtObb76plStXKjg4WN26dVNGRoYk6ZVXXlF2drZWrVqlF198UUuXLr3t38PEiRN14sQJLVmyRJ9//rnq16+vESNGyGq12rdZvny5RowYoeXLl+vEiROKioqSJKWlpenFF19UZGSkPv30Uw0ZMkRz5szRxx9/fNv1AACMwRoDAKYyevRojR8/XtIfH2r9/PzUuXNn/etf/7Jv07RpU9WrV0+StHXrVsXFxWnVqlXy8vLSnXfeqSFDhmjYsGHq3bu3Vq9erfr166tLly6SpJEjR+rbb7+94XOvXLlSjz76qJ555hlJ0uDBg1WwYEElJSWpSJEiKlCggEqWLClJWrRokUaPHq2GDRtKksaNG6fGjRtry5Ytqlixovbs2aNvv/1W5cqVU7Vq1RQTE6MNGzbc1u/k7rvvVteuXVW9enVJUrdu3bRq1SpdunRJZcuWlST16dNHDzzwgCTp9ddfV9euXfX666/riy++UHBwsPr37y9JqlSpkn777Te99957blmzAQBwHxoDAKbSr18/tWzZUpLk6+urkiVLqkCBAk7blC9f3v7v2NhYJSYmKjIy0j6WnZ2ttLQ0XblyRbGxsQoNDbU/VrBgQaf7jk6cOKEOHTrY7/v4+GjIkCHXbXft2jWdP39eAwYMkJfXf4PdtLQ0nTx5Uunp6QoKClK5cuXsj9WuXfu2G4O2bdtq06ZN+vDDD3X8+HH98ssvkuQ0Jap27dr2f9esWVOZmZk6ffq0jh8/rsOHDysiIsL+eFZW1nW/UwBA7kdjAMBUgoODFRIS8rfb+Pr62v+dmZmpO++8U3PmzLluuz8XFf914fCf6xX+ytv71v7k/vmB/K233lLlypWdHitatKi2bt16y895KwYPHqw9e/bo8ccf1zPPPKOSJUvq3//+t9M2jh/0/3zuggULKjMzU40aNdKoUaNu+/kBALkDawwA4G9UrlxZcXFxKl68uEJCQhQSEqKzZ89q1qxZslgsqlatmg4cOGDfPjs7W4cPH77hvkJCQpwey8rKUrNmzbRr1y5ZLBb7eGBgoIKDgxUfH29/zrJly2rq1Kk6ceKEqlevrqSkJJ06dcr+M4cOHbqt15ecnKzPP/9cM2bMUL9+/fTQQw/ZFxY7Nh+//vqr/d/79+9XwYIFVaFCBVWuXFknTpxQhQoV7LXu3btX77///m3VAwAwDo0BAPyNxo0bq3z58nrttdd05MgR7dy5UyNHjpS/v78KFCigp59+WjExMZo7d66OHz+uyZMnO509yFHHjh316aefau3atTp16pSioqJks9kUFhYmf39/JSUl6eTJk8rMzFSXLl00c+ZMffPNNzp58qRef/117d69W3feeaeqVKmiRo0aafjw4Tp8+LA2bdqkZcuW3fS1bN682em2bds2+fj4yN/fXxs3btTZs2e1ZcsWjRs3TpKcFh/PmDFDW7du1d69ezVhwgR16NBB/v7++te//qW0tDSNGjVKsbGx+v777zVx4kQFBwe75gAAADyGqUQA8DcKFCiguXPnavz48Xr66adVqFAhtW7d2r42ICQkRHPnzlVUVJTmzp2rFi1a2Bfp/tXdd9+t0aNH6+2331Z8fLxq1aqlefPmyc/PT/fcc49CQkL02GOP6T//+Y+6d++ua9euadSoUUpOTlatWrW0ePFiFS1aVNIfH9RHjhypDh06qFy5curYsaPWrFnzt6/lxRdfdLpfunRpbd68WVOnTtXkyZP1/vvvq0KFCnrppZc0c+ZMHTp0SFWqVJEkde3aVSNGjNCVK1fUpk0bDRo0SJIUEBCghQsXatKkSWrbtq2CgoL03HPPqWfPnv/o9w4A8DyLjavqAAAAAKbHVCIAAAAANAYAAAAAaAwAAAAAiMYAAAAAgGgMAAAAAIjGAAAAAIBoDAAAAACIxgAAAACAaAwAAAAAiMYAAAAAgGgMAAAAAEj6P0bYbhsZvKI3AAAAAElFTkSuQmCC"
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"conf_matrix = confusion_matrix(y_test, y_pred)\n",
"plt.figure(figsize=(10, 7))\n",
"sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues')\n",
"plt.xlabel('Predicted Label')\n",
"plt.ylabel('True Label')\n",
"plt.title('LSTM Confusion Matrix')\n",
"plt.show()"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-09T12:50:16.939224Z",
"end_time": "2024-06-09T12:50:17.351224Z"
}
}
},
{
"cell_type": "code",
"execution_count": 39,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" business 0.86 0.86 0.86 115\n",
"entertainment 0.92 0.79 0.85 72\n",
" politics 0.72 0.93 0.81 76\n",
" sport 0.96 0.88 0.92 102\n",
" tech 0.89 0.84 0.86 80\n",
"\n",
" accuracy 0.86 445\n",
" macro avg 0.87 0.86 0.86 445\n",
" weighted avg 0.87 0.86 0.86 445\n",
"\n"
]
}
],
"source": [
"print(classification_report(y_test, y_pred))"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-09T12:50:17.366224Z",
"end_time": "2024-06-09T12:50:17.553225Z"
}
}
},
{
"cell_type": "markdown",
"source": [
"## Trnsformers pipeline na pre-trenowanym modelu"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-09T12:39:04.264825Z",
"end_time": "2024-06-09T12:39:04.347285Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" business 0.86 0.82 0.84 115\n",
"entertainment 0.82 0.89 0.85 72\n",
" politics 0.88 0.83 0.85 76\n",
" sport 0.94 0.97 0.96 102\n",
" tech 0.81 0.82 0.82 80\n",
"\n",
" accuracy 0.87 445\n",
" macro avg 0.86 0.87 0.86 445\n",
" weighted avg 0.87 0.87 0.87 445\n",
"\n"
]
}
],
"execution_count": 16
},
{
"cell_type": "code",
"execution_count": 45,
"outputs": [],
"source": [
"# Encode labels\n",
"label_encoder = LabelEncoder()\n",
"df['label_encoded'] = label_encoder.fit_transform(df['label'])\n",
"\n",
"# Split data\n",
"X_train_full, X_test, y_train_full, y_test = train_test_split(df['text'], df['label_encoded'], test_size=0.2,\n",
" random_state=42)\n",
"X_train, X_val, y_train, y_val = train_test_split(X_train_full, y_train_full, test_size=0.2, random_state=42)\n"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-09T12:51:03.756087Z",
"end_time": "2024-06-09T12:51:03.772094Z"
}
}
},
{
"cell_type": "code",
"execution_count": 46,
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Some weights of DistilBertForSequenceClassification were not initialized from the model checkpoint at distilbert-base-uncased and are newly initialized: ['classifier.bias', 'classifier.weight', 'pre_classifier.bias', 'pre_classifier.weight']\n",
"You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n"
]
}
],
"source": [
"classifier = pipeline('text-classification', model='distilbert-base-uncased')\n",
"def get_predictions(texts):\n",
" predictions = []\n",
" for text in tqdm(texts, desc=\"Processing\"):\n",
" result = classifier(text, truncation=True)\n",
" predicted_label = int(result[0]['label'].split('_')[-1])\n",
" predictions.append(predicted_label)\n",
" return predictions\n"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-09T12:51:04.029028Z",
"end_time": "2024-06-09T12:51:04.740450Z"
}
}
},
{
"cell_type": "code",
"execution_count": 47,
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Processing: 100%|██████████| 356/356 [02:00<00:00, 2.96it/s]\n",
"Processing: 100%|██████████| 445/445 [02:47<00:00, 2.66it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Pre-trained Model Validation Accuracy: 0.20224719101123595\n",
"Pre-trained Model Test Accuracy: 0.25842696629213485\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"val_predictions = get_predictions(X_val)\n",
"test_predictions = get_predictions(X_test)\n",
"trans_val_accuracy = (val_predictions == y_val).mean()\n",
"trans_test_accuracy = (test_predictions == y_test).mean()\n",
"print(f'Pre-trained Model Validation Accuracy: {trans_val_accuracy}')\n",
"print(f'Pre-trained Model Test Accuracy: {trans_test_accuracy}')"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-09T12:51:04.733447Z",
"end_time": "2024-06-09T12:55:51.983791Z"
}
}
},
{
"cell_type": "code",
"execution_count": 48,
"outputs": [
{
"data": {
"text/plain": "<Figure size 1000x700 with 2 Axes>",
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAw0AAAJuCAYAAADy9u6gAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABb8ElEQVR4nO3dd3hT5f//8VdK6YBSRoFKQZlaSwulFBkKgogyBEEUBZUlCihDUfbeyBBEykYUBYUvAi4cCCKgIHuIzJYtii1SFFoa2ub3Bz/ySThwbDFpOp6P68p1kZPTnHdzp5p3Xvd9jsVms9kEAAAAALfg5ekCAAAAAGRvNA0AAAAATNE0AAAAADBF0wAAAADAFE0DAAAAAFM0DQAAAABM0TQAAAAAMEXTAAAAAMAUTQOQi3CtRiBv4W8eQFahaQBcpH379goNDXW6RUREqEGDBho1apQuXrzotmP//fff6t+/v3bs2OGS52vYsKEGDhzokuf6N2fOnFFoaKhWrlx508cHDhxoeF1vvLVv3z5Lav03hw8fVqtWrRQREaFmzZp5uhyX2rJli3r27Kl69eopMjJSjRs31sSJE3X+/Hm3HXPy5MmqWbOmqlWrpk8//dQlz7ly5UqFhobqzJkzLnm+jBwrNDRUx48fv+k+GzdutO+TGRn9m/+3vy8AyChvTxcA5CaVK1fWiBEj7PevXr2qX3/9VVOnTtXBgwf18ccfy2KxuPy4Bw8e1GeffaYnn3zSJc8XExOjgIAAlzzXf/XKK6+obdu29vuzZs3SgQMHFBMTY9+WXWqdOXOmzp49q5kzZ6pYsWKeLsdlpkyZogULFqhJkyYaMmSIihQposOHD2v+/Plas2aNFi9erFKlSrn0mEeOHNGCBQv09NNPq2XLlqpQoYJLnrdBgwZatmyZSpYs6ZLnywgvLy998803evnllw2PffXVV7f1nBn9my9ZsqSWLVumu+6667aOAwDX0TQALhQQEKBq1ao5bbvvvvt0+fJlvfPOO9q7d6/h8eyocuXKni7B7q677nL6wFOsWDH5+Phky9fxwoULuueee1S/fn1Pl+Iyq1ev1vz58zVo0CB16tTJvr127dqqX7++nnjiCY0bN86piXOFxMRESdJjjz2mGjVquOx5ixUrluUNXfXq1fX1118bmgar1aq1a9cqLCxMBw8edMuxs+vfCoCch+lJQBaIiIiQJJ09e1bStalMffv2Ve/evVWtWjV17txZkpSSkqJJkyapfv36ioiIUIsWLf71m8itW7eqQ4cOkqQOHTrYp+rc6hhnzpxR//79VbduXYWHh6tOnTrq37+/Lly4YH9Ox+lJ16c3fP311+rdu7eioqJUs2ZNDR06VElJSU61LF++XI899ph9WtaMGTOUlpbmtM+aNWv0+OOPq2rVqnriiSd06NCh23pNb7Ry5UpVrlxZy5cv1wMPPKCaNWsqNjZWaWlpmjdvnpo3b66qVauqWrVqatu2rX7++Wf7z86YMUOPPPKIfvjhB7Vo0UIRERFq3LixYUrMokWL1KRJE1WpUkX16tXTyJEjdenSJUlSaGiotm3bpu3btztNBzlx4oR69+6tBx54QNWqVVP79u21c+dO+3Nef33fe+89NWnSRJGRkVqxYoVmzJihJk2a6LvvvlPz5s1VpUoVtWzZUrt379aePXvUpk0bVa1aVc2bN9eWLVuc6jxy5Ii6deum6tWrq3r16urRo4dOnz5tf3zr1q0KDQ3V0qVL9dBDD6l69er66aefbvq6zps3T5UqVVLHjh0Nj5UrV079+vVTVFSUfW59SkqKZs6caX+dHn30Uc2bN0/p6en2n2vfvr2GDBmiefPmqUGDBqpSpYratm2rffv22cfj+vu4Y8eOatiwof01njFjhlMNM2bMcJra89dff+mNN97QAw88YH/NHMfxZtOTfvrpJz377LOKjo5WrVq19MYbb+j33393+pnKlStr7969euaZZ1SlShU99NBDevfdd2/6mt2oWbNmOnz4sGGK0saNG2WxWPTggw8afmb58uVq3bq1qlWrpqpVq6ply5b6+uuvJWXub95xelJaWpqeeuop1apVS3/99Zf9WAMHDlS1atV07NixDP0+APImmgYgC1z/sHDnnXfat3399dcqWLCgZs+erRdffFE2m009evTQ0qVL1blzZ82ePVtRUVHq06eP6Xzu8PBwDR8+XJI0fPhwp+lRNx4jOTlZHTp0UFxcnEaMGKF3331XHTp00OrVqzVt2jTT32HEiBEqXbq0Zs2apS5duuiTTz7R7Nmz7Y/PnTtXw4YNU506dTRnzhw999xzmj9/voYNG2bf5/vvv1fv3r0VGhqqmTNnqmnTpurXr1+mXkszaWlpWrhwocaNG6dBgwapYsWKmjJlimbNmqVnnnlGCxYs0JgxY5SYmKhXX31VycnJ9p+Nj4/X6NGj1aFDB82bN09lypTRgAEDFBcXJ0n68ssvNXnyZD333HN699131aNHD3322WcaM2aMJGnZsmWqXLmyKleurGXLlqlBgwaKjY1V69atdebMGQ0dOlRTpkyRxWJRx44dtW3bNqfaZ8yYoZdeekmTJk3SAw88IEn6448/9Oabb6p79+6aPn26/v77b/Xu3Vuvv/662rRpo5kzZ8pms6lPnz66cuWKpGvvtbZt2+r8+fOaOHGixo0bp9OnT6tdu3aG9QcxMTEaMGCAhg8frqioKMPrGR8fr0OHDqlBgwa3nFb37LPPqkuXLrJYLLLZbOrevbsWLFigNm3aaM6cOWrSpInefvttp/elJH377bdat26dhg4dqqlTpyohIUG9evVSWlqa2rRp4/SezkyK0a9fP8XFxWnUqFGaP3++KleurAEDBjg1iY4+/fRTvfDCCypVqpSmTp2qQYMGaffu3XrmmWecXq/09HS99tpratasmebNm6fq1atr0qRJ2rRp07/W9MADD6hw4cL65ptvnLZ/9dVXeuSRR5Q/f36n7UuWLNHw4cPVqFEjzZ07V1OmTJGPj4/69u2rP/74I1N/847y5cunN998U0lJSZo4caIkae3atVq1apX69+/vsilgAHInpicBLmSz2ZSammq/f/HiRW3bts3eAFxPHCQpf/78GjVqlHx8fCRd+7Zz06ZNmjZtmn0Rbb169ZScnKwpU6aoefPm8vY2/skGBASoUqVKkqRKlSrZ/32zYxw8eFB33HGHJk6caG9gateurb179xo+xN6ofv36GjBggCSpTp06+umnn/TDDz/ojTfe0D///GP/YD506FBJUt26dVWkSBENHTpUnTt31t13362ZM2eqatWqmjx5sv33k6S33noroy/xv+revbsaNGhgv//nn3+qT58+ToulfX191atXLx0+fNg+dSM5OVnjxo1TnTp1JF37Fv2hhx7Shg0bVLFiRW3btk1lypTRc889Jy8vL9WsWVMFChSwL3CvVq2afW3F9eccPXq0fHx89MEHH9gfa9CggZo3b65Jkybpk08+sdfUtGlTw/z05ORkjRgxwv5NdGxsrN566y2NGzdOTz31lCQpKSlJvXv31vHjxxUWFqaYmBj5+/vr/ffftx+zTp06atSokRYsWGAfQ+naB/4mTZrc8rW8/m17mTJlMvDKX/vmfPPmzZo6daoee+wxSdc+MPv5+Wn69Onq0KGD7r77bklSamqq3n33XXuNly9f1oABA3Tw4EFFREQ4vaczM11u27Zt6tGjhxo1aiRJqlmzpooUKWL/G3CUnp6uKVOmqG7duk7vwerVq6tZs2Z699131b9/f0nX/rZfeeUVtWnTRpIUHR2t7777Tj/88IP9fXwr3t7eatSokdMUpeTkZK1fv14zZ850Sp4k6fTp0+rSpYteeeUV+7bSpUurdevW2rlzpx577LEM/83fuOC7UqVK6tWrl9566y01atRII0eOVIMGDfTss8+a/g4AQNMAuND27dsVHh7utM3Ly0v333+/Ro8e7fRtbYUKFZw+yGzZskUWi0X169d3ajwaNmyozz//XEePHlVoaKjTNA9JN20kbnWMsLAwffTRR0pPT9eJEyd08uRJxcbG6tixY07HvJkb50Xfcccd+u233yRJu3fv1pUrV9SwYUND7dK1hujOO+/Ur7/+qldffdXpeZo2berSpiEsLMzp/vXn/uuvv3Ts2DGdPHlS69evl3RtTrkjx9/xjjvukCT7FKzatWtr2bJlat26tRo1aqT69eurRYsWpgvbt23bpoceeshpoba3t7cee+wxzZw5U5cvX75l3ddVr17d/u/ixYtLkiIjI+3bihQpIuna2XQk6eeff1bNmjXl5+dnH4uAgADVqFFDmzdvdnruWx3TsVZJhvfcrWzbtk3e3t6GRuTxxx/X9OnTtW3bNnvTUKlSJafXJTg4WJKc0p/bUatWLc2YMUMHDhxQvXr1nJrdGx0/flzx8fF64403nLbfddddioqKMjTSjmmMj4+PihUrZpiidyvNmjXTihUrdPz4cZUvX17r169XgQIFVKtWLUPTcH1q4N9//21/z27dulWS8T17oxv/5m+mS5cuWrt2rXr37q2iRYtq/PjxGfodAORtNA2AC4WHh2vUqFGSJIvFIl9fX5UqVeqmZ/cpWLCg0/3ExETZbDanD4mO/vzzT61du9YwVePw4cO3rOfGY0jSe++9pzlz5igxMVHFixdXRESE/P399c8//5j+bv7+/k73vby87PPYry9a7dq16y1rv3jxomw2m4oWLer0mKvPYlOgQAGn+7/88otGjRqlX375Rf7+/qpUqZJCQkIkGc9x7/g7enl5Oe3TrFkzpaen66OPPtKsWbM0Y8YMlS5dWn379r3l6VUvXrxo/6DvqHjx4rLZbPb1EDer+7qbvXduHAtHiYmJ+uqrr266FubGBcC3OuZ1pUqVksVisTeHN3Px4kV5e3urYMGCunjxoooWLap8+fI57VOiRAlJcnqP3ez9JGW8QbmVadOmac6cOfr666/17bffOjXtpUuXdtr3+vv2VmN04MABp21+fn6GmjN6nYTatWuraNGi9rMoffXVV2rSpInhtZKkU6dOafjw4dqyZYvy58+vChUq6N5775X079dluNnf/I3y5cunxx9/XHv37lXVqlUVFBSUod8BQN5G0wC4UMGCBVWlSpXb+tlChQqpQIEC+uCDD276eNmyZXXvvfc6Tb3JrC+++EJvvvmm+vXrp9atW9s/RL766qv65Zdfbvt5AwMDJV07NWe5cuUMjxcvXlxFihSRl5eXEhISnB67/sHNHS5duqQXX3xRoaGhWr16tSpUqCAvLy9t2LBB3377baafr3nz5mrevLn++ecf/fjjj5o/f7769eun6Oho+zfljgoXLmz4faVrawUkqWjRovrzzz8z/4uZKFSokO6//377wndHZqnUzRQtWlTh4eHatGmT+vXrd9NUJSYmRkuXLtX69etVuHBhXbhwQWlpaU4fhq//jjc2jLfjxoX1N37TX6hQIfXr10/9+vXTsWPHtG7dOs2aNUujRo3SvHnznPa9ntLcaoxcUe913t7eevTRR/XNN9+offv22rhxo95//33Dfunp6eratavy58+vTz75RGFhYfL29lZsbKw+++wzl9QSHx+vGTNmKCwsTOvXr9c333xjOk0NACQWQgPZRs2aNZWUlCSbzaYqVarYb0eOHNHMmTOVmpqq4OBgp8euNyg3+7byZnbu3KnAwEC9+OKL9obh8uXL2rlz53/6hjcyMlL58+fXuXPnnGrz9vbW1KlTdebMGfn6+ioqKkpr1qxx+rb0+++/v+3j/ptjx44pMTFRHTp0UKVKlezfZm/cuFFS5r7Vfu2119SjRw9J1z6YNm3aVK+88opSU1Nv+cH/vvvu0/r1650ShbS0NK1evVpVqlT512kkt+P6WaPCwsLs4xAREaH3339f3333Xaafr0uXLjpy5IgWL15seCw2NlYrVqzQ/fffr+LFi6tmzZpKTU01LPj9/PPPJV1bB/BfBAQE6Ny5c07bdu3aZf/3b7/9pvr169uPX6FCBb300ku6//777Wcuc1S+fHmVKFFCX375pdP206dPa8+ePbdM/W5Xs2bNdOjQIb333nsqXrz4TRefX7hwQcePH9dTTz1l/xuSjO/ZjP7N38zw4cOVL18+vf/++3r44Yc1atQop7MpAcDNkDQA2UT9+vV133336ZVXXtErr7yiihUrat++fXrnnXdUr14903PLFypUSJL0ww8/qHDhwvapDDeqWrWqPv74Y7355pt66KGH9Oeff+rdd99VQkKCChcufNu1Fy1aVC+++KKmT5+uS5cuqVatWjp37pymT58ui8Vir+f1119Xx44d1bNnTz3zzDM6fvy45syZc9vH/Tfly5dXQECA5syZI29vb3l7e+vbb7+1L0DOzPz52rVra8SIEZo4caIefPBB/f3334qJiVG5cuVu+Xr37NlTGzduVIcOHezfHi9evFinT5/WggULXPI73uj6xfC6deumdu3aydfXV8uWLdPatWv1zjvvZPr5mjVrps2bN2vs2LHau3evmjRpogIFCmjfvn167733VLRoUY0dO1aS9OCDD6pWrVoaOnSozp07p3vvvVfbtm3T/Pnz9cQTTzgt2L0dDRo00OrVqxUZGamyZctq5cqVOnnypP3x0qVL64477tDYsWN16dIl3XXXXdq/f782bNigbt26GZ7Py8tLr7/+ugYNGqQ33nhDjz/+uC5cuKCYmBgVLlz4pmnNf1GzZk2VKFFCc+fOVadOnW6a3AQFBal06dJasmSJ7rjjDgUGBmrTpk32BPL6ezajf/M3+vTTT/X999/rrbfeUpEiRTR8+HA1a9ZMI0eOvK33B4C8g6YByCa8vLw0b948TZ8+XXPnztX58+cVHByszp0727/hvpW7775bzZs315IlS7Rp0ybDN6fXPfHEEzpz5oxWrFihjz76SMHBwapfv76effZZDRs2THFxcapYseJt1f/aa6+pRIkS+uijj7RgwQIVLlxYderU0euvv27/gFOjRg3Nnz9fU6dOVc+ePVWmTBmNHz9e3bt3v61j/ptChQpp1qxZmjRpkl599VUVLFhQYWFhWrx4sV566SXt2LHDvlj737Rt21ZXr17V0qVL9dFHH8nPz0916tRRv379DKfMvO7uu+/WRx99ZD+Vp8ViUdWqVfXBBx+49IJlju69914tWbJE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2Zh5u+W9WXas/8IjTcN1x44dU4kSJVSoUCHDY3FxcVq3bp26du2a6efNC00D/ievNQ0AAOQGNA3X5JSmwaPDVaFChVs+VrFiRVWsWDELqwEAAABwM7fVNKSlpWnTpk06ceKEWrdurePHj6tChQo3TQwAAACAnMSLddAGmW4afv/9d3Xp0kWJiYm6ePGiHn74YS1YsEC7d+/Wu+++q9DQUHfUCQAAAMBDMn32pNGjRys6OlqbNm2yX7lw6tSpuv/++zV27FiXFwgAAABkJYvFkmW3nCLTTcOOHTv0wgsvKF++fPZt+fPn1yuvvKL9+/e7tDgAAAAAnpfppsHPz0/nz583bD9+/LgCAgJcUhQAAADgKV6WrLvlFJluGtq2bavhw4frhx9+kHStWVixYoWGDRump556ytX1AQAAAPCwTC+E7tGjhwIDAzVy5EglJyera9euCgoKUqdOndSlSxd31AgAAABkmRy01CDL3NYpV9u3b6/27dsrKSlJaWlpnGoVAAAAyMUy3TR8+umnpo+3atXqNksBAAAAPM+LqMEg003DO++843Q/LS1N58+fl7e3t6pWrUrTAAAAAOQymW4avv/+e8O2y5cva/jw4VzYDQAAADleps8UlAe45DUpWLCgevXqpffee88VTwcAAAAgG7mthdA3c+jQIaWnp7vq6QAAAACPYEmDUaabhvbt2xsueX358mUdPnxYnTp1clVdAAAAALKJTDcNtWrVMmzz8fFR3759VadOHZcUBQAAAHgKZ08yynTTkJiYqA4dOuiuu+5yRz0AAAAAsplML4T+/PPP5eXFmnIAAADkThZL1t1yikwnDZ06ddKoUaPUqVMnhYSEyNfX1+nxkJAQlxUHAAAAwPNu++JumzZtkiT7omibzSaLxaKDBw+6sDwAAAAga3nloAQgq2Soadi+fbuioqLk7e2tdevWubsmAAAAANlIhpqGDh066Mcff1RQUJBKly7t7poAAAAAZCMZahpsNpu76wAAAACyBU65apTh0yDdeEE3AAAAAHlDhhdCP/nkkxk61SprHgAAAJCT8V25UYabhs6dO6tQoULurAUAAABANpShpsFiseixxx5TUFCQu+sBAAAAPIpTrhplaE0DC6EBAACAvCtDScMTTzxhuPIzAAAAkBtZRNRwoww1DRMmTHB3HQAAAACyqQwvhAYAAADyAtY0GGX4Og0AAAAA8iaSBgAAAMABSYMRSQMAAAAAUyQNAAAAgAMLl4Q2IGkAAAAAYIqkAQAAAHDAmgYjkgYAAAAApkgaAAAAAAcsaTAiaQAAAABgiqYBAAAAgCmmJwEAAAAOvJifZEDSAAAAAMAUSQMAAADggFOuGpE0AAAAADBF0gAAAAA4YEmDEUkDAAAAAFMkDQAAAIADLxE13ChXNg0H9pz0dAnIQsnWNE+XgCzk75PP0yUAAJDn5MqmAQAAALhdrGkwYk0DAAAAAFMkDQAAAIADrtNgRNIAAAAAwBRJAwAAAODAi0UNBiQNAAAAAEyRNAAAAAAOCBqMSBoAAAAAmCJpAAAAABywpsGIpAEAAACAKZIGAAAAwAFBgxFJAwAAAABTNA0AAAAATDE9CQAAAHDAt+pGvCYAAAAATJE0AAAAAA4srIQ2IGkAAAAAYIqkAQAAAHBAzmBE0gAAAADAFEkDAAAA4MCLNQ0GJA0AAAAATNE0AAAAAA4sWXi7XV27dtXAgQPt9w8cOKA2bdooMjJSTz75pPbv3/8fnt2IpgEAAADIQVavXq0NGzbY7yclJalr166qUaOGVq5cqaioKHXr1k1JSUkuOyZNAwAAAODAYsm6W2YlJiZq0qRJqlKlin3bV199JV9fX/Xv318VK1bUkCFDVLBgQX3zzTcue01oGgAAAIAcYuLEiWrZsqUqVapk37Z3715FR0fbL0pnsVhUvXp17dmzx2XHpWkAAAAAHFgsliy7Wa1WXbp0yelmtVpvWteWLVu0Y8cOvfLKK07b4+PjVbJkSadtQUFB+uOPP1z2mtA0AAAAAB4yd+5cRUdHO93mzp1r2C8lJUUjRozQ8OHD5efn5/RYcnKyfHx8nLb5+Pjcsvm4HVynAQAAAHCQld+qd+vWTZ07d3badmMDIEkxMTGKiIhQvXr1DI/5+voaGgSr1WpoLv4LmgYAAADAQ3x8fG7aJNxo9erVSkhIUFRUlCTZm4Rvv/1WzZs3V0JCgtP+CQkJhilL/wVNAwAAAODAcjunNXKzDz/8UKmpqfb7U6ZMkST17dtX27dv1/z582Wz2WSxWGSz2bRr1y51797dZcenaQAAAACyudKlSzvdL1iwoCSpbNmyCgoK0ltvvaVx48apbdu2Wrp0qZKTk9W0aVOXHZ+F0AAAAEAOFhAQoLlz52rnzp1q3bq19u7dq3nz5qlAgQIuOwZJAwAAAOAg+01OMnrzzTed7letWlWrVq1y2/FIGgAAAACYImkAAAAAHGTHhdCeRtIAAAAAwBRJAwAAAOCAb9WNeE0AAAAAmCJpAAAAABywpsGIpAEAAACAKZIGAAAAwAE5gxFJAwAAAABTJA0AAACAA5Y0GJE0AAAAADBF0gAAAAA48GJVgwFJAwAAAABTJA0AAACAA9Y0GNE05EDFA/00tUstNYgopb/+uaJJq37RRxviNPvl+/Vc/UqG/Tfs/10txn7ngUrhDj98v1YD3+jttO2hhx/VhClve6YguFVKSorGjx2ldd+tka+vnzp0fkEdO73g6bLgJox33sJ4IyehaciBPnqjgfJ5WdR8zBqFFPPX3Ffq6p+kqxrw/naN+GiXfb+yJQK0enhjzfnmkAerhasdPxarug8+pEHDRtq3+fj6eq4guNXUKZN0YP9+zV+4SGfPntWwwQMUUipEjzRu4unS4AaMd97CeGdfFtY0GNA05DBRFYJUO7SkqvZeqRN/XtK+E9K0z/fr1Rbh+mL7Kf2dfNW+79xX6urTrSe0esdpzxUMlztx/JgqVqqkoOIlPF0K3CwpKUmrVizXzDnzFVY5XGGVwxUXe1RLP17Ch4pciPHOWxhv5DQshM5hypUMUPzFZJ3485J926+nLiiqQpC88/2vK64fcYfuDyupUUt3e6JMuNHxY3G6s2w5T5eBLHDk8CGlpqaqWrUo+7ao6tH6Zd9epaene7AyuAPjnbcw3tmbxZJ1t5wiWzUNqampSkxM9HQZ2dqfF6+ocEEf+fvks28rHVRQ+b29FFjAx76tz+MRWrIhTr+dT/JEmXATm82mUydOaOvmn9SmZVM92aKxZk6fqqtXrZ4uDW6QEB+vIkWKKr/P//62g4KKKyUlhf9W5kKMd97CeCOn8VjTsHr1ao0ePVrffvutbDabxo4dq+rVq6tOnTp64IEHtHjxYk+Vlq3tiI3X7xeSNblzTRXw9VaF4ELq2ayyJMnH+9pwlisZoPoRd2guaxlynT9+P6srV5KV38dH4yZNVa8+/fTt119qxrQpni4NbpB8JVk+Dh8oJNnvX7XSKOY2jHfewngjp/HImoZ3331Xs2fPVp06dTRixAh9+umnOnjwoCZPnqxKlSrpl19+0ZQpU5SUlKSuXbt6osRsK+VqujpO26D3X3tQv73XVvEXr2j6F79qQof79E/StfUMj9csq30nLujwbxc9XC1crVRIaX37w2YFBhaWxWLRPaFhSk9P16ihA/TqGwOUL1++f38S5Bi+vr6y3vDh4fp9Pz8/T5QEN2K88xbGO3vj4m5GHmkalixZoqlTp+rBBx/Uzp079fzzz2vOnDmqX7++JKlixYoqWrSohg0bRtNwE7uOnVfV3qtUsrCfzv+Tooerhijh7yu6nJIqSWpULUSrd5zycJVwl8KFizjdL1++glJSUvT3xYsqWqyYZ4qCW5QsGazExAtKTU2Vt/e1/1wnJMTLz89PhQIDPVwdXI3xzlsYb+Q0HpmedOHCBZUrV06SFB0drVKlSql48eJO+5QpU0bJyckeqC57K1rQR9+ObKJiAb768+IVpaXb1DiqtDYd+MO+T/UKQfr5cLwHq4S7/Lz5Rz3aoI6uOPxtHDlySIWLFKFhyIVC7w2Tt7e39u3dY9+2e9dOhUdUkZdXtlqSBhdgvPMWxjt7YyG0kUfeldWrV9fMmTOVlHRtke7333+v8PBw++N//vmnJkyYoDp16niivGztwmWrCvp5a/Rz1VWuZIA6PFRJzz9USdM//1WSdFeJggos4KNDZxI9WyjcokpklHx9/TR+9HCdPHFcm3/cqJhpU/R8xy6eLg1u4O/vrxYtW2ns6JHa/8s+fb9urT54f6Gefb6Dp0uDGzDeeQvjjZzGYrPZbFl90FOnTqlr166qXLmypk6d6vTY2rVr1atXL0VERGjWrFkqUSLz56IPbPuBq0rNliqVCtT0l2qreoUgnYy/pJEf79I3u36TJNWoVFzfj22m4s8vljU1b5yy7eTC5zxdQpY6FndU0ya/qV9/2asCBQqq1VNPq0vXV2TJSV9X/AeOZw7LC5KTkzVu9Eit/W6NAgoFqFPnLnq+QydPlwU3Ybzzlrw+3n7Z+Gphaw5m3YyNR8NyxnWXPNI0SNdOHZmQkGBoCs6fP68zZ86oSpXbj+dye9MAZ3mtacjr8lrTAAC5FU3DNTmlafDYcFkslpumCEFBQQoKCvJARQAAAIBk4exJBqy0AQAAAGAqGwdDAAAAQNbzImgwIGkAAAAAYIqkAQAAAHDAmgYjkgYAAAAApkgaAAAAAAd55NJHmULSAAAAAMAUSQMAAADggDUNRiQNAAAAAEyRNAAAAAAOuE6DEUkDAAAAAFM0DQAAAABMMT0JAAAAcMBCaCOSBgAAAACmSBoAAAAAB1zczYikAQAAAIApkgYAAADAAUGDEUkDAAAAAFMkDQAAAIADLxY1GJA0AAAAADBF0gAAAAA4IGcwImkAAAAAYIqkAQAAAHBE1GBA0gAAAADAFEkDAAAA4MBC1GBA0gAAAADAFEkDAAAA4IDLNBiRNAAAAAAwRdIAAAAAOCBoMCJpAAAAAGCKpAEAAABwRNRgQNIAAAAAwBRNAwAAAABTTE8CAAAAHHBxNyOSBgAAAACmSBoAAAAAB1zczYikAQAAAIApkgYAAADAAUGDEUkDAAAAAFMkDQAAAIAjogYDkgYAAAAApkgaAAAAAAdcp8GIpAEAAACAKZIGAAAAwAHXaTAiaQAAAABgiqQBAAAAcEDQYETSAAAAAMBUrkwayoeW9nQJyEL+Pvk8XQIAAMhNiBoMSBoAAAAAmMqVSQMAAABwu7hOgxFJAwAAAABTNA0AAAAATDE9CQAAAHDAxd2MSBoAAAAAmCJpAAAAABwQNBiRNAAAAAA5wLlz59S7d2/VrFlT9erV04QJE5SSkiJJOn36tDp16qRq1aqpWbNm+vHHH116bJoGAAAAwJElC28ZZLPZ1Lt3byUnJ2vJkiWaNm2a1q9fr7fffls2m009evRQ8eLFtWLFCrVs2VI9e/bU2bNn/+srYcf0JAAAACCbO3bsmPbs2aOffvpJxYsXlyT17t1bEydO1IMPPqjTp09r6dKlKlCggCpWrKgtW7ZoxYoV6tWrl0uOT9MAAAAAOMiOF3crUaKEFixYYG8Yrrt06ZL27t2rypUrq0CBAvbt0dHR2rNnj8uOT9MAAAAAeIjVapXVanXa5uPjIx8fH6dtgYGBqlevnv1+enq6Fi9erNq1ays+Pl4lS5Z02j8oKEh//PGHy+pkTQMAAADgwGLJutvcuXMVHR3tdJs7d+6/1jh58mQdOHBAffr0UXJysqHJ8PHxMTQj/wVJAwAAAOAh3bp1U+fOnZ223dgA3Gjy5MlatGiRpk2bpnvuuUe+vr5KTEx02sdqtcrPz89lddI0AAAAAA6yckXDzaYimRkzZow+/vhjTZ48WY0bN5YkBQcHKzY21mm/hIQEw5Sl/4LpSQAAAEAOEBMTo6VLl2rq1Kl67LHH7NsjIyP166+/6sqVK/ZtO3fuVGRkpMuOTdMAAAAAOMqG12mIi4vTrFmz9NJLLyk6Olrx8fH2W82aNVWqVCkNGjRIR48e1bx587Rv3z499dRT//WVsGN6EgAAAJDNrVu3TmlpaZo9e7Zmz57t9Njhw4c1a9YsDRkyRK1bt1bZsmU1c+ZMhYSEuOz4FpvNZnPZs2UTkSPWeboEZKGtwx72dAkAACCT/LLxV9eHfk/KsmPdW6rAv++UDTA9CQAAAICpbNzjAQAAAFnPkv0uCO1xJA0AAAAATNE0AAAAADDF9CQAAADAAbOTjEgaAAAAAJgiaQAAAAAcETUYkDQAAAAAMEXSAAAAADiwEDUYkDQAAAAAMEXSAAAAADjg4m5GJA0AAAAATJE0AAAAAA4IGoxIGgAAAACYImkAAAAAHBE1GJA0AAAAADBF0gAAAAA44DoNRiQNAAAAAEyRNAAAAAAOuE6DEUkDAAAAAFMkDQAAAIADggYjkgYAAAAApkgaAAAAAEdEDQYkDQAAAABM0TQAAAAAMMX0JAAAAMABF3czImkAAAAAYIqmIQcKDvTVjGcj9dOg+vrqtfv1XO077Y/de0eAFr9UQz8PaaAlXe9TWKlCHqwU7pCSkqIRwwarbu0aerh+XS16f6GnS4IbMd55C+OdtzDe2ZfFknW3nILpSTnQ5Ker6PfEK2o3d5sqlCioN5+K0O+JV7Ql7rxinq+mr/b9oWGrDqjNfWUU81ykmk/frOSr6Z4uGy4ydcokHdi/X/MXLtLZs2c1bPAAhZQK0SONm3i6NLgB4523MN55C+ONnISmIYcp5OetyDsLa/TnB3Xqr2Sd+itZP8WeV60KRRXo762Uq+mauiZWkjTp6yOqe3eQHgkP1ud7fvdw5XCFpKQkrVqxXDPnzFdY5XCFVQ5XXOxRLf14Cf+TyYUY77yF8c5bGO/sLQcFAFmG6Uk5TEpqupKtaWoZVUreXhaVDSqgancW1qE//lGVMoW1+1Si0/57TiUq8s7CnikWLnfk8CGlpqaqWrUo+7ao6tH6Zd9epaeTJuU2jHfewnjnLYw3chqahhzGmpqu8asP66no0to6tIE+711HP8We16pdv6tEIR/F/5PitP9fl60qGejroWrhagnx8SpSpKjy+/jYtwUFFVdKSooSExM9VxjcgvHOWxjvvIXxzt5Y02CU7ZqG6tWr6/Tp054uI1urUKKANhxJUPsFOzRs1QE1qlxSzaoEyy9/PlnTnL+dsKba5JMv2w0zblPylWT5OPwPRpL9/lWr1RMlwY0Y77yF8c5bGG/kNB5Z0zBo0KBbPma1WjV58mQVLFhQkjRhwoSsKitHqFm+qJ6oXlqPvvWjUlLTdeDsPyoZ6KuX6pfXmQvJhgbBx9uiK1fTPFQtXM3X11fWG/5ncv2+n5+fJ0qCGzHeeQvjnbcw3tldDooAsohHvoI+f/68Vq1apbi4OE8cPkerHFJIp84nKSX1f4nCod//UanCfvrz7xQFBTh/axEU4KuES3xjkVuULBmsxMQLSk1NtW9LSIiXn5+fCgUGerAyuAPjnbcw3nkL442cxiNJw7x587R69WpNnjxZderUUY8ePeyR3DfffKN+/frpzjvv/JdnyZvi/7HqzmL+8s5nUWqaTZJUvngBnU1M1i9nLuqFuuWc9q92Z2Et2Hgi6wuFW4TeGyZvb2/t27tH1aNrSJJ279qp8Igq8vJiGlpuw3jnLYx33sJ4Z285aa1BVvHYu/Kxxx7TZ599pvj4eLVo0UKbN2/2VCk5yobD8UpNt2nk42EqG+Sv+vcUV5d65fTR1jP67sCfKuTnrf5N71GFEgXVv+k98vfJpzW/nvN02XARf39/tWjZSmNHj9T+X/bp+3Vr9cH7C/Xs8x08XRrcgPHOWxjvvIXxRk5jsdlsNk8XsWXLFo0cOVIRERFat26dvvjii/+UNESOWOfC6rKfaw3B3YooXVgXLlu1dNsZLfn52uLxiNKBGto8VOVLFNTRc5c09otDOvTHJQ9X7F5bhz3s6RKyVHJyssaNHqm1361RQKEAdercRc936OTpsuAmjHfewnjnLXl9vP2y8dXCziZm3dTukCI+/75TNpAtmgbp2uKfGTNm6KuvvtLixYtVqlSp236u3N40wFleaxoAAMgNaBquoWnwIJqGvIWmAQCAnCc7Nw2/X8y6pqFU4ZzRNLDSBgAAAICpbNzjAQAAAFnPwnUaDEgaAAAAAJiiaQAAAABgiulJAAAAgCNmJxmQNAAAAAAwRdIAAAAAOCBoMCJpAAAAAGCKpAEAAABwYCFqMCBpAAAAAGCKpAEAAABwwMXdjEgaAAAAAJgiaQAAAAAcETQYkDQAAAAAMEXSAAAAADggaDAiaQAAAABgiqQBAAAAcMB1GoxIGgAAAACYImkAAAAAHHCdBiOSBgAAAACmSBoAAAAAB6xpMCJpAAAAAGCKpgEAAACAKZoGAAAAAKZoGgAAAACYYiE0AAAA4ICF0EYkDQAAAABMkTQAAAAADri4mxFJAwAAAABTJA0AAACAA9Y0GJE0AAAAADBF0gAAAAA4IGgwImkAAAAAYIqkAQAAAHBE1GBA0gAAAADAFEkDAAAA4IDrNBiRNAAAAAAwRdIAAAAAOOA6DUYkDQAAAABMkTQAAAAADggajEgaAAAAAJgiaQAAAAAcETUYkDQAAAAAMEXTAAAAAOQAKSkpGjx4sGrUqKG6detq4cKFWXZspicBAAAADrLrxd0mTZqk/fv3a9GiRTp79qwGDBigkJAQNWnSxO3HpmkAAAAAsrmkpCQtX75c8+fPV3h4uMLDw3X06FEtWbIkS5oGpicBAAAADiyWrLtl1KFDh5SamqqoqCj7tujoaO3du1fp6elueBWckTQAAAAAHmK1WmW1Wp22+fj4yMfHx2lbfHy8ihYt6rS9ePHiSklJUWJioooVK+bWOnNl07B31MOeLgEAAAA5lF8WfkKeMWOuYmJinLb17NlTvXr1ctqWnJxsaCSu37+x6XCHXNk0AAAAADlBt27d1LlzZ6dtNzYHkuTr62toDq7f9/Pzc1+B/x9NAwAAAOAhN5uKdDPBwcG6cOGCUlNT5e197SN8fHy8/Pz8FBgY6O4yWQgNAAAAZHdhYWHy9vbWnj177Nt27typKlWqyMvL/R/paRoAAACAbM7f31+tWrXSyJEjtW/fPq1du1YLFy5Uhw4dsuT4FpvNZsuSIwEAAAC4bcnJyRo5cqTWrFmjgIAAdenSRZ06dcqSY9M0AAAAADDF9CQAAAAApmgaAAAAAJiiaQAAAABgiqYhF0hJSdHgwYNVo0YN1a1bVwsXLvR0ScgCVqtVzZs319atWz1dCtzo3Llz6t27t2rWrKl69eppwoQJSklJ8XRZcJOTJ0+qS5cuioqKUoMGDbRgwQJPl4Qs0rVrVw0cONDTZQC3xMXdcoFJkyZp//79WrRokc6ePasBAwYoJCRETZo08XRpcJOUlBS98cYbOnr0qKdLgRvZbDb17t1bgYGBWrJkiS5evKjBgwfLy8tLAwYM8HR5cLH09HR17dpVVapU0apVq3Ty5Em9/vrrCg4OVosWLTxdHtxo9erV2rBhg5544glPlwLcEklDDpeUlKTly5dryJAhCg8P1yOPPKIXX3xRS5Ys8XRpcJPY2Fg9/fTTOnXqlKdLgZsdO3ZMe/bs0YQJE3T33XerRo0a6t27t7788ktPlwY3SEhIUFhYmEaOHKly5cqpfv36qlOnjnbu3Onp0uBGiYmJmjRpkqpUqeLpUgBTNA053KFDh5SamqqoqCj7tujoaO3du1fp6ekerAzusm3bNtWqVUvLli3zdClwsxIlSmjBggUqXry40/ZLly55qCK4U8mSJfX2228rICBANptNO3fu1Pbt21WzZk1PlwY3mjhxolq2bKlKlSp5uhTAFNOTcrj4+HgVLVpUPj4+9m3FixdXSkqKEhMTVaxYMQ9WB3d49tlnPV0CskhgYKDq1atnv5+enq7Fixerdu3aHqwKWaFhw4Y6e/asHnroITVu3NjT5cBNtmzZoh07duiLL77QyJEjPV0OYIqkIYdLTk52ahgk2e9brVZPlATATSZPnqwDBw6oT58+ni4FbvbOO+9ozpw5OnjwoCZMmODpcuAGKSkpGjFihIYPHy4/Pz9PlwP8K5KGHM7X19fQHFy/z3+EgNxj8uTJWrRokaZNm6Z77rnH0+XAza7Pb09JSVHfvn3Vv39/wxdEyNliYmIUERHhlCYC2RlNQw4XHBysCxcuKDU1Vd7e14YzPj5efn5+CgwM9HB1AFxhzJgx+vjjjzV58mSmquRiCQkJ2rNnjxo1amTfVqlSJV29elWXLl1iumkus3r1aiUkJNjXJF7/wu/bb7/V7t27PVkacFM0DTlcWFiYvL29tWfPHtWoUUOStHPnTlWpUkVeXsw+A3K6mJgYLV26VFOnTuU0yrncmTNn1LNnT23YsEHBwcGSpP3796tYsWI0DLnQhx9+qNTUVPv9KVOmSJL69u3rqZIAUzQNOZy/v79atWqlkSNHavz48frzzz+1cOFC5sACuUBcXJxmzZqlrl27Kjo6WvHx8fbHSpQo4cHK4A5VqlRReHi4Bg8erEGDBum3337T5MmT1b17d0+XBjcoXbq00/2CBQtKksqWLeuJcoB/RdOQCwwaNEgjR45Ux44dFRAQoF69eunRRx/1dFkA/qN169YpLS1Ns2fP1uzZs50eO3z4sIeqgrvky5dPs2bN0pgxY/TMM8/I399f7du3V4cOHTxdGgDIYrPZbJ4uAgAAAED2xaR3AAAAAKZoGgAAAACYomkAAAAAYIqmAQAAAIApmgYAAAAApmgaAAAAAJiiaQAAAABgiqYBAAAAgCmaBgB5RsOGDRUaGmq/hYeHq0mTJnr//fddepz27dtrxowZkqSBAwdq4MCB//ozVqtV//d//3fbx1y5cqUaNmx408e2bt2q0NDQ237u0NBQbd269bZ+dsaMGWrfvv1tHxsAkD14e7oAAMhKgwcPVrNmzSRJqamp+vnnnzVkyBAVKVJErVq1cvnxhgwZkqH9Vq9erTlz5ujpp592eQ0AAPxXJA0A8pRChQqpRIkSKlGihEqVKqUnnnhCderU0Zo1a9x2vEKFCv3rfjabzS3HBwDAFWgaAOR53t7eyp8/v6RrU4vGjBmjhx9+WA0aNNClS5f0+++/q3v37oqMjFTDhg0VExOjtLQ0+89/9913aty4sapVq6bRo0c7PXbj9KTPPvtMTZo0UWRkpNq2basDBw5o69atGjRokH777TeFhobqzJkzstlsmjlzpurWrasaNWqoe/fuOnv2rP15zp07pxdffFHVqlXTE088oVOnTt3273/p0iUNGjRIderUUUREhJo0aaK1a9c67bN9+3Y9+uijioyM1KuvvqqLFy/aHzty5Ijat2+vqlWrqnHjxlqyZMlt1wIAyJ5oGgDkWVevXtWaNWv0008/6eGHH7ZvX7lypSZPnqyYmBgVLFhQPXv2VFBQkFatWqUJEyboiy++0Jw5cyRJsbGxeu2119SuXTutWLFCqamp2rlz502Pt2nTJg0ZMkQdO3bU559/roiICHXr1k1RUVEaPHiw7rjjDv34448qVaqUFi9erC+++EJvvfWWli1bpqCgIL3wwgu6evWqJOnVV19Venq6li9frpdeekmLFi267ddh3LhxOn78uBYuXKgvv/xSNWrU0JAhQ2S1Wu37LFmyREOGDNGSJUt0/PhxTZgwQZJ05coVvfTSS4qOjtbnn3+uAQMGaNasWfr0009vux4AQPbDmgYAecqIESM0ZswYSdc+8Pr5+aljx456/PHH7fs0aNBA1atXlyRt2bJFZ8+e1fLly+Xl5aUKFSpowIABGjRokHr06KEVK1aoRo0a6tSpkyRp2LBhWr9+/U2PvWzZMjVv3lzt2rWTJPXv31/58+fXxYsXVahQIeXLl08lSpSQJC1YsEAjRoxQrVq1JEmjR49W3bp1tWnTJt15553avXu31q9fr5CQEN19993av3+/vvnmm9t6Te677z517txZ99xzjyTphRde0PLly3X+/HmVKlVKktSzZ0/Vr19fkjR06FB17txZQ4cO1ddff62goCC99tprkqRy5crpt99+0wcffOCWNSIAAM+gaQCQp/Tu3VuPPvqoJMnX11clSpRQvnz5nPYpXbq0/d9xcXFKTExUdHS0fVt6erquXLmiCxcuKC4uTmFhYfbH8ufP73Tf0fHjx9W2bVv7fR8fHw0YMMCw3+XLl/XHH3+oT58+8vL6XyB85coVnThxQikpKSpSpIhCQkLsj1WpUuW2m4ZWrVpp7dq1+r//+z8dO3ZMv/76qyQ5TbOqUqWK/d+VK1dWamqqTp06pWPHjunQoUOKioqyP56WlmZ4TQEAORtNA4A8JSgoSGXLljXdx9fX1/7v1NRUVahQQbNmzTLsd32B842LmK+vj7iRt3fG/pN7/cP69OnTVb58eafHChcurC1btmT4mBnRv39/7d69Wy1btlS7du1UokQJPfPMM077ODYB14+dP39+paamqk6dOho+fPhtHx8AkP2xpgEATJQvX15nz55VsWLFVLZsWZUtW1ZnzpzRO++8I4vForvvvlu//PKLff/09HQdOnTops9VtmxZp8fS0tLUsGFD7dy5UxaLxb49MDBQQUFBio+Ptx+zVKlSmjx5so4fP6577rlHFy9e1MmTJ+0/c/Dgwdv6/S5duqQvv/xS06ZNU+/evfXII4/YFzk7NiZHjhyx/3vfvn3Knz+/ypQpo/Lly+v48eMqU6aMvdY9e/boww8/vK16AADZE00DAJioW7euSpcurX79+unw4cPasWOHhg0bJn9/f+XLl09PP/209u/fr9mzZ+vYsWOaOHGi01mOHLVv316ff/65Vq1apZMnT2rChAmy2WwKDw+Xv7+/Ll68qBMnTig1NVWdOnXS22+/re+//14nTpzQ0KFDtWvXLlWoUEEVK1ZUnTp1NHjwYB06dEhr167V4sWL//V32bhxo9Nt69at8vHxkb+/v9asWaMzZ85o06ZNGj16tCQ5LYSeNm2atmzZoj179mjs2LFq27at/P399fjjj+vKlSsaPny44uLitGHDBo0bN05BQUGuGQAAQLbA9CQAMJEvXz7Nnj1bY8aM0dNPP60CBQqoSZMm9rUIZcuW1ezZszVhwgTNnj1bjRo1si8YvtF9992nESNGaObMmYqPj1dERITmzJkjPz8/1a5dW2XLllWLFi300UcfqUuXLrp8+bKGDx+uS5cuKSIiQu+++64KFy4s6dqH+GHDhqlt27YKCQlR+/bttXLlStPf5aWXXnK6HxwcrI0bN2ry5MmaOHGiPvzwQ5UpU0Yvv/yy3n77bR08eFAVK1aUJHXu3FlDhgzRhQsX1LRpU/Xt21eSFBAQoPnz52v8+PFq1aqVihQpoueee07dunX7T687ACB7sdi4ohAAAAAAE0xPAgAAAGCKpgEAAACAKZoGAAAAAKZoGgAAAACYomkAAAAAYIqmAQAAAIApmgYAAAAApmgaAAAAAJiiaQAAAABgiqYBAAAAgCmaBgAAAACm/h8YsNg2rAs44gAAAABJRU5ErkJggg=="
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"conf_matrix = confusion_matrix(y_test, test_predictions)\n",
"plt.figure(figsize=(10, 7))\n",
"sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues')\n",
"plt.xlabel('Predicted Label')\n",
"plt.ylabel('True Label')\n",
"plt.title('Pre-trained Transformer Confusion Matrix')\n",
"plt.show()"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-09T12:55:51.986789Z",
"end_time": "2024-06-09T12:55:52.299790Z"
}
}
},
{
"cell_type": "code",
"execution_count": 49,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" 0 0.26 0.99 0.41 115\n",
" 1 0.14 0.01 0.03 72\n",
" 2 0.00 0.00 0.00 76\n",
" 3 0.00 0.00 0.00 102\n",
" 4 0.00 0.00 0.00 80\n",
"\n",
" accuracy 0.26 445\n",
" macro avg 0.08 0.20 0.09 445\n",
"weighted avg 0.09 0.26 0.11 445\n",
"\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\adamw\\PycharmProjects\\pythonProject\\venv\\lib\\site-packages\\sklearn\\metrics\\_classification.py:1327: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
" _warn_prf(average, modifier, msg_start, len(result))\n",
"C:\\Users\\adamw\\PycharmProjects\\pythonProject\\venv\\lib\\site-packages\\sklearn\\metrics\\_classification.py:1327: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
" _warn_prf(average, modifier, msg_start, len(result))\n",
"C:\\Users\\adamw\\PycharmProjects\\pythonProject\\venv\\lib\\site-packages\\sklearn\\metrics\\_classification.py:1327: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
" _warn_prf(average, modifier, msg_start, len(result))\n"
]
}
],
"source": [
"print(classification_report(y_test, test_predictions))"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-09T12:55:52.303793Z",
"end_time": "2024-06-09T12:55:52.408796Z"
}
}
},
{
"cell_type": "markdown",
"source": [
"## Podsumowanie"
],
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Processing: 17%|█▋ | 59/356 [00:12<01:01, 4.80it/s]\n",
"Exception ignored in: <function WeakKeyDictionary.__init__.<locals>.remove at 0x000002CD5CAEE290>\n",
"Traceback (most recent call last):\n",
" File \"C:\\Users\\adamw\\AppData\\Local\\Programs\\Python\\Python310\\lib\\weakref.py\", line 371, in remove\n",
" self = selfref()\n",
"KeyboardInterrupt: \n",
"\n",
"KeyboardInterrupt\n",
"\n"
]
}
],
"execution_count": 36
},
{
"cell_type": "code",
"execution_count": 50,
"outputs": [
{
"data": {
"text/plain": "<Figure size 1000x600 with 1 Axes>",
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA0sAAAIhCAYAAACfXCH+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABWa0lEQVR4nO3deVhU5f//8dcACigugEalRi6BiogIormkoSkuJa65hKkt9nHLzCJ31MxM2xR3w/1jH03TMjVF08rc18wlt1yiFNdUlPX8/vDr/Jo46oyB4/J8XBfXxdznPue85wwc5sW5zz0WwzAMAQAAAABsuDi7AAAAAAC4GxGWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWANwRMTExCgwMtPmqUKGC6tSpoyFDhujChQs5vs///ve/CgwM1JIlS3J827kpMjJS77zzTq5sOyYmRjExMQ6t88477ygyMvKGyzdu3KjAwEBt3Ljx35Z3W/U56uOPP1ZQUJA2bNjg0Hq5+brcyMKFCxUYGKgTJ05IuvVrYbbOnWJPbbfDWc/nZm7nZ/6f64wdO1aBgYG5VSKAHOLm7AIAPDjKly+vwYMHWx+np6frl19+0UcffaS9e/dq7ty5slgsObKvtLQ0TZo0Sf/5z3/UpEmTHNnmnRIfHy8vLy9nl3FfOn/+vGbPnq2BAweqWrVqDq17N7wuXbt2VYcOHZxaw43kVm116tTR//73Pz300EM5vm1natWqlWrVquXsMgDcAmEJwB3j5eWlSpUq2bRVqVJFly9f1pgxY7Rz585sy2+XYRiaNm2aSpYsmSPbu5PKly/v7BLuW3ny5NHChQvl7+/v8Lp3w+vy2GOPObuEG8qt2nx8fOTj45Mr23amhx9+WA8//LCzywBwCwzDA+B0FSpUkCQlJSVZ25YuXarmzZsrNDRUNWrU0KBBg2yG6o0dO1bPPPOM4uPjFRERoZo1a+rChQvKzMzUnDlz1LJlS0VHR+vpp5/W6NGjlZqaKkkaMWKEIiIilJWVZd1Wv379FBgYqGPHjlnbpk+frsqVKystLU3vvPOOOnbsqAULFqhBgwaqUKGCmjZtqu+//97meWzevFkvvfSSqlSpogoVKigyMlJjx4617uvEiRMKDAzUsmXL1LNnT4WGhioiIkIDBgxQSkqKdTv/HO6VmpqqDz74QLVr11aFChX07LPPaunSpbc8rklJSerevbvCwsJUo0YNTZs2LVuf68fr2WefVcWKFVWnTh2b42Vmz549Cg8P1yuvvKK0tDSbZRkZGZKkxMREtWvXTqGhoapQoYKioqI0Z84ch+uLjIzUmDFjNHLkSFWvXl0VK1bUSy+9pN9++82m37p169SuXTuFhYWpatWqevPNN/XHH39Yl2dlZenjjz/Ws88+q8aNGysyMlIffvih0tPTrX0uXbqkYcOGqVatWqpUqZJatGihNWvW2NRyo2F4M2fOVNmyZXXu3Dlr27hx4xQYGKj169db2xITE1W2bFmdPHnS7uP0d/8c6paVlaXx48erTp06CgkJUdeuXU2HtNqzn1OnTik2NlZPPvmkQkND9cILL2j79u2SpJ49e+qpp56y+b2RpP79+6tBgwamtdn72m3ZskUvvPCCQkJCFBERodjYWJ09e9a63J5heIGBgZo7d67eeecdhYWFKSIiQu+++66uXr2qkSNHqlq1aqpatar69+9v87OdmpqqcePGKSoqSsHBwapfv74mT56c7Xl+/vnnatCggSpWrKgXXnjB5lx1XVJSknr37q2IiAiFhIToxRdf1J49e25YM8PwgHsDYQmA0x05ckSSVKJECUnS+PHj1bt3b1WqVEljxoxRt27d9O233yomJkZXr161rpeUlKS1a9fq448/Vt++fVWoUCENGjRII0aMUL169TRhwgS1b99es2fPVteuXWUYhurUqaMLFy5o9+7d1u1cv3dl8+bN1rYffvhBNWrUUN68eSVJu3fv1meffaaePXtq3LhxcnV1VY8ePaxvTPft26eOHTuqcOHC+vjjjzVhwgSFh4crPj5ey5Yts3m+gwcPVrFixTR+/Hi99NJL+uKLLzRhwgTTY2MYhrp166bPP/9cnTp10oQJExQaGqo33nhDixYtuuExTUlJ0QsvvKBff/1Vw4YN08CBAzV//nzrm9/rbnW8/unQoUN66aWXFBISonHjxlmPjyTNmTNHa9eu1Zo1a9StWzcFBQVp/PjxGjt2rEqUKKGhQ4dq586dDtUnXQsihw8f1ogRI/Tuu+9q9+7dio2NtS5ftGiROnfurEceeUQfffSR+vbtq+3bt+v555/XmTNnJElTpkzR3Llz1a1bNyUkJKht27b6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tJKSktSsWTNnlQ8AAADgPue0YXiS1LdvX8XFxenFF1+Ul5eXevToofr160uSatasqREjRqh58+Zq1KiRLl++rEmTJunPP/9UuXLlNGPGDIcndwAAAAAAezk1LHl6emrkyJEaOXJktmX79++3edyqVSu1atXqTpUGAAAA4AHntGF4AAAAAHA3IywBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAmHw1JKSkpu1AEAAAAAdxWHw1L16tXVq1cvJSYmKi0tLTdqAgAAAACnczgszZ49W8WLF9f777+v6tWrKzY2VmvXrlVmZmZu1AcAAAAATuFwWKpQoYL69OmjxMREJSQkqGjRoho9erRq1KihQYMGadOmTblRJwAAAADcUf9qggd/f3+VLFlSjz32mK5cuaLdu3fr7bffVlRUlLZt25ZTNQIAAADAHefm6Arnzp1TYmKili9fro0bN8rf31+NGzdWbGysHnvsMRmGoeHDh6tXr176/vvvc6NmAAAAAMh1DoelmjVrys/PT40aNdJbb72lsmXL2iy3WCyqVauWfv311xwrEgAAAADuNIfD0qxZs1S5cmWlpaUp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RIRmzpxpXTZr1iwdPHhQBQsWlJ+fn907LleunNzc3LRjxw6Fh4dLkrZu3arg4GCbyR0qVqyoFStW2Kxbv359vfvuu6pRo4bd+wMAAAAAR9gVlgYMGKDly5fr5Zdflre3txo1aqTnnntO5cqVk8Viua1JFzw9PRUdHa24uDi99957OnXqlBISEjRixAhJ164yFShQQB4eHvL398+2vp+fn3x9fR3eLwAAAADYw65heM8995zGjx+vn376SW+88YaOHDmi1q1bq1GjRho3bpyOHTt2Wzvv27evgoKC9OKLL2rIkCHq0aOH6tevL0mqWbOmli5delvbBQAAAIB/y6EJHry8vBQdHa3o6GhdunRJK1eu1PLlyzVp0iQFBgbq2WefVYcOHezenqenp0aOHKmRI0dmW7Z///4brnezZQAAAACQE+y6smTGy8tLzZo106RJkzR58mRlZGRYh9ABAAAAwL3O4anDJckwDG3evFkrVqxQYmKiUlJSVK9ePb311ls5XR8AAAAAOIXdYSkjI0M//fSTVq5cqVWrViklJUW1a9fWgAED9NRTT2X7gFkAAAAAuJfZFZbeeustrV27VikpKXryySf19ttv65lnnlH+/HxCPQAAAID7k11hKSkpSb169VJUVJR8fHxyuyYAAAAAcDq7wtKcOXNyuw4AAAAAuKvc9mx4AAAAAHA/IywBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwB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yitasGCBVq9ebf2sLwD3lp9++kkpKSmKi4uztvn7+2vPnj2aN2+eGjRooMKFC1uX5cuXL9u54LqwsDBt3LhRJ0+elJ+fn7U9MTFRlSpV0qlTp3LzqQA5okCBAjY/382aNdOSJUu0YsWKHAtL/3ZS5fz58+dIHY76+3HJkyeP8uXLZ3ouuBMuXrwoSXrqqadksVicUgNujGF4yDW9evXSyZMn9dlnn92wz9atW9W2bVuFhISoUqVKeuWVV6xvQv4+DK9169YaM2aMzbpt2rTR+PHjJUm//vqrYmJiVLFiRTVo0EBz5sxxuN58+fLZPJ4/f76ioqJUoUIFVa1aVUOGDFFmZqb++OMPlS1bVr/88ou175kzZ1S+fHkdPXpUkvT5558rMjJSoaGhiomJ0f79+619169fr6ZNmyo4OFh169bV559/7nCtALJzcXHR5cuXtWPHDpv2N998U++++65D23rkkUdUvnx5rV692tqWlpamH3/8kSF4uKe5ubkpT548kq4NSx02bJjq1q2rOnXq6NKlS/rjjz/02muvKSQkRJGRkYqPj1dmZqbpthYuXKj4+Hht2rTJekUkMjJSo0aNUs2aNRUdHS3DMLRq1SpFR0crODhY4eHh6t27ty5fvizJdhjewoULFRMTozFjxqhq1aoKDw/XiBEjbALZzf6+Xrp0Sb1791ZoaKgaNGign3/++baP09ixY9W1a1e1b99eERER2rRpk06ePKmePXuqSpUqqlChgpo1a6atW7dKkk6cOKHAwECtWLFC9erVU3BwsLp06aLz589LktLT0zVgwABVrVpVoaGheu2113Ty5Elt3LjR+vzLli1rvdL93XffqVmzZqpYsaIaNWqkFStWWGv75+u2f/9+BQYGas2aNdZj8+677+rXX39V8+bNValSJXXp0kWXLl2y6ziavYYPMsISco2fn5969uypiRMn6vjx49mWX7x4UV26dFGNGjW0ZMkSffbZZzp27JgmT56crW+jRo20cuVK6+OTJ09qx44daty4sa5evapXXnlFYWFh+uqrrxQbG6vx48fbPYbaMAwlJibqt99+0zPPPCNJ2rRpk95991317t1by5cv15AhQ/TFF19o1apVeuSRRxQWFqZvv/3Wuo1vv/1W5cqVk7+/v1avXq34+HgNHDhQX375pcLCwtShQwdduHBBmZmZ6tWrl6Ki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Um3bts2R53Kz44jsGIaHO6Zly5ZasGCB9T8xDRs21ObNm9WzZ09ZLBYFBwcrNjZWY8eOveGJp3Hjxvrpp59swpKXl5emTJmi9957T9HR0SpcuLDat2+vLl263LCW7du3W+8/cnFxUdGiRdW0aVP17NlTktS9e3f17dtXzz//vLy8vFS7dm21bdtWe/futdnvU089pUuXLtkEs0aNGun06dMaM2aMTp8+rTJlymjChAl6/PHHJUnjx4/Xe++9p+eee0758+dXy5Yt1apVq9s7qMAD6Pr9hn+3YsUK+fv7a+7cufr000/VvXt3Xbx4UY8++qhatmypl1566bb25ebmpqeeekrbtm1TuXLl/m3pwF3N1dVVEyZM0LBhw9S6dWvly5dPUVFRio2NveE6zzzzjD7//HM1btzYdJRETEyM9uzZo44dO8rd3V1VqlRRt27d9M033zhc363+vg4cOFDDhg1Tp06dVKhQIcXExGjkyJEO78fMww8/rLi4OI0bN04fffSRSpYsqQEDBig2NlZ79uy55URN7du3159//qm33npLFy5cUIUKFTRhwgTTEBoSEqIPPvhAY8eO1ahRo1SyZEl98skn2YbN3a5bHUfYshgP+uTpwL/Qpk0btWrVSi1atHB2KQAAAMhhXFkCbsOGDRu0bds2HTp0yGYIHgAAAO4fhCXgNixevFirVq3S0KFDrR8GBwAAgPsLw/AAAAAAwASz4QEAAACACcISAAAAAJggLAEAAACACcISAAAAAJggLAEAAACACcISAOCeEBgYqMDAQCUlJWVbNnfuXAUGBmrs2LG3te2NGzcqMDDQrr4LFy5UZGTkbe0HAHBvISwBAO4ZefLk0erVq7O1JyYmymKxOKEiAMD9jLAEALhnhIeHZwtLly5d0vbt21W+fHknVQUAuF8RlgAA94y6detq06ZNunTpkrVtzZo1Cg8PV/78+W36Lly4UA0bNlTFihXVvHlzbd682brs0qVL6t27t0JDQ9WgQQP9/PPPNuv+8ccfeu211xQSEqLIyEjFx8crMzMzd58cAOCuQ1gCANwzAgIC5Ofnp++//97atnLlStWrV8+m38KFCzVs2DB16dJFixYtUvXq1fXqq6/q5MmTkqTBgwfr8OHDmj17tgYMGKBp06ZZ1zUMQ927d5evr6++/PJLjRgxQl9//bUmTpx4Z54kAOCuQVgCANxT6tatax2Kl5aWpnXr1qlu3bo2fWbNmqWYmBhFR0erVKlS6tOnjwICAjR79mxdvHhRy5Yt04ABAxQUFKRatWqpa9eu1nU3bNigpKQkDRs2TKVKlVLVqlUVGxurmTNn3tHnCQBwPjdnFwAAgCPq1q2rnj17KiMjQ+vXr1dAQIB8fX1t+hw6dEjdunWzaatUqZIOHTqkI0eOKDMzU2XLlrUuCw4Otln3/PnzCgsLs7ZlZWXp6tWrOnfuXC49KwDA3YiwBAC4p1wPMVu3blViYqKeeeaZbH3c3d2ztWVmZiorK8t0m3nz5rV+n5GRoVKlSmn8+PHZ+hUoUOB2ywYA3IMYhgcAuKe4ubmpdu3aWr16tb777rts9ytJUsmSJbVz506btp07d6pkyZIqVaqU8uTJYzOpw549e2zWTUpKko+Pj/z9/eXv768TJ05ozJgxTE8OAA8YwhIA4J5Tt25dzZ8/X76+vipRokS25R07dtTs2bO1aNEiHTlyRKNHj9a+ffvUsmVLeXl5qWnTpho2bJh27typjRs3Kj4+3rpuzZo1VaxYMb311lvav3+/tmzZooEDB8rT01Ourq538mkCAJyMYXgAgHtOzZo1lZGRYXpVSZIaNWqk06dPa8yYMUpOTla5cuWUkJCg0qVLS5IGDhyoYcOGqVOnTipUqJBiYmI0cuRISZKrq6smTJigYcOGqXXr1sqXL5+ioqIUGxt7x54fAODuYDEMw3B2EQAAAABwt2EYHgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACYICwBAAAAgAnCEgAAAACY+H/RugpUUAOa9QAAAABJRU5ErkJggg=="
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": "<Figure size 1000x600 with 1 Axes>",
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA0sAAAIhCAYAAACfXCH+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABR10lEQVR4nO3deVgV5f//8ReLgFsqaGSa5hKobCIoqZSI+5Jrmkuamqm55UfrY5r7bpp9AtwL07Qsc8td0bRyF5cyw9xyyVJccENBYH5/+PX8OjEWR4GD+nxcl9flueeemfcZzhnOi7nnPg6GYRgCAAAAAFhxtHcBAAAAAJATEZYAAAAAwARhCQAAAABMEJYAAAAAwARhCQAAAABMEJYAAAAAwARhCQAAAABMEJYAAAAAwARhCQCAHCCrviOe754HgPtHWAKQo3Xo0EHe3t5W/3x9fRUWFqaRI0fqypUrmb7Pzz//XN7e3lq5cmWmbzsrhYeH6913382SbXfo0EEdOnSwaZ13331X4eHh91y+c+dOeXt7a+fOnQ9a3n3VZ6sPP/xQPj4+2rFjh03r/dvP5c8//1S3bt30+++/P2iJVq5evar//ve/2rNnT6Zu935k5s86s5w5c0be3t5asmTJfa+zZMkSeXt768yZM1lVJgA7c7Z3AQDwbypUqKDhw4dbHt++fVs///yzpkyZol9++UVffPGFHBwcMmVfycnJmjlzpt588001btw4U7aZXaKiopQvXz57l/FISkhI0Pz58zV06FA9//zzNq37bz+Xbdu2acuWLQ9aYjq//PKLli9frpYtW2b6tm3l4+OjL7/8UmXLlrV3KZkqLCxMX375pZ588kl7lwIgixCWAOR4+fLlU8WKFa3aKleurBs3bigiIkIHDhxIt/x+GYahOXPmqFSpUpmyvexUoUIFe5fwyMqVK5eWLFmikiVL2rwuPxfz9/CjwN3dXe7u7vYuA0AWYhgegIeWr6+vJOns2bOWttWrV6tFixYKDAxU9erVNWzYMKuhepGRkapTp46ioqJUpUoVhYaG6sqVK0pNTdWCBQv08ssvq1mzZqpZs6YmT56spKQkSdL48eNVpUoVpaWlWbY1ePBgeXt769SpU5a2Tz/9VJUqVVJycrLeffddderUSYsXL1a9evXk6+urpk2b6rvvvrN6Hrt379brr7+uypUry9fXV+Hh4YqMjLTs6+7QnzVr1qhv374KDAxUlSpVNGTIECUmJlq28/fhXklJSXr//fdVo0YN+fr66qWXXtLq1av/9biePXtWvXv3VlBQkKpXr645c+ak63P3eL300kvy9/dXWFiY1fEyc+jQIQUHB+uNN95QcnKy1bKUlBRJUkxMjNq1a6fAwED5+vqqfv36WrBggc31hYeHKyIiQhMnTlS1atXk7++v119/Xb/99ptVv61bt6pdu3YKCgpSSEiIBgwYoD/++MOyPC0tTR9++KFeeuklNWrUSOHh4frggw90+/ZtS5/r169r9OjReuGFF1SxYkW1bNlSmzdvtqrlXsPwlixZokGDBkmSatWqZdVv0aJFatSokWXYaWRkpFJTUy3LL126pAEDBqh69ery8/NT06ZNtWzZMkl3hr117NhRktSxY0erIYr/9B6ZN2+eypUrp8uXL1v6T506Vd7e3tq+fbulLSYmRuXKldO5c+ckSb/++qu6d++uSpUqqVKlSurVq5dOnz5t6Z+RYXjh4eGKiorSuHHjFBISosDAQA0YMEA3btzQrFmz9OKLLyooKEh9+vSxqi+jr8X169erSZMm8vf3V/PmzRUXF5euhoSEBA0bNkzVqlWTn5+fWrdubfW8/45heMCjj7AE4KF14sQJSdIzzzwjSZo2bZr69++vihUrKiIiQr169dK6devUoUMH3bp1y7Le2bNntWXLFn344YcaNGiQChQooGHDhmn8+PGqXbu2pk+frvbt22v+/Pnq2bOnDMNQWFiYrly5ooMHD1q2c/feld27d1vavv/+e1WvXl0uLi6SpIMHD+qTTz5R3759NXXqVDk5OalPnz6WD6dxcXHq1KmTChYsqA8//FDTp09XcHCwoqKitGbNGqvnO3z4cBUrVkzTpk3T66+/rq+//lrTp083PTaGYahXr15auHChOnfurOnTpyswMFD/+c9/LB+ozSQmJurVV1/Vr7/+qtGjR2vo0KFatGiR9u3bZ9Xv347X3x07dkyvv/66AgICNHXqVMvxkaQFCxZoy5Yt2rx5s3r16iUfHx9NmzZNkZGReuaZZzRq1CgdOHDApvqkOx/8jx8/rvHjx2vMmDE6ePCgBg4caFm+bNkydenSRUWLFtWUKVM0aNAg7du3T6+88oouXrwoSZo9e7a++OIL9erVS9HR0Wrbtq0++eQTy3FPTU1V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AOBRlWPDUmhoqFavXi1Jypcvn2bOnKnY2Fi1aNFCBw4c0KxZs5QnTx47VwkAAADgUeVgGI/XdAcXLjAbHgAAAPA4c3CQChf+99nwcuyVJQAAAACwJ8ISAAAAAJggLAEAAACACcISAAAAAJggLAEAAACACWd7F/CocXR0kKOjg73LAB46aWmG0tKYqhIAAOQchKVM5OjooIIF88jJiQt2gK1SU9OUkJBIYAIAADkGYSkTOTo6yMnJUUM+/14nzl+xdznAQ6PUkwU0pt0LcnR0ICwBAIAcg7CUBU6cv6K43y/ZuwwAAAAAD4DxYgAAAABggrAEAAAAACYISwAAAABggrAEAAAAACYISwAAAABggrAEAAAAACYISwAAAABggrAEAAAAACYISwAAAABggrAEAAAAACYISwAAAABggrAEAAAAACYISwAAAABggrAEAAAAACYISwAAAABggrAEAAAAACYISwAAAABggrAEAAAAACYISwAAAABggrAEAAAAACYISwAAAABggrAEAAAAACYISwAAAABggrAEAAAAACYISwAAAABggrAEAAAAACYISwAAAABggrAEAAAAACYISwAAAABggrAEAAAAACYISwAAAABggrAEAAAAACYISwAAAABggrAEAAAAACYISwAAAABggrAEAAAAACYISwAAAABggrAEAAAAACYISwAAAABggrAEAAAAACYISwAAAABggrAEAAAAACYISwAAAABggrAEAAAAACYISwAAAABgwtneBQDAo8jR0UGOjg72LgN4qKSlGUpLM+xdBgBYEJYAIJM5OjqoYME8cnLi4j1gi9TUNCUkJBKYAOQYhCUAyGSOjg5ycnLUkM+/14nzV+xdDvBQKPVkAY1p94IcHR0ISwByDMISAGSRE+evKO73S/YuAwAA3CfGiAAAAACACcISAAAAAJggLAEAAACACcISAAAAAJggLAEAAACACcISAAAAAJggLAEAAACACcISAAAAAJggLAEAAACACcISAAAAAJggLAEAAACACcISAAAAAJggLAEAAACACcISAAAAAJggLAEAAACACcISAAAAAJggLAEAAACACcISAAAAAJggLAEAAACACcISAAAAAJiwa1hKSkrS4MGDFRwcrNDQUEVHR9+z74YNG9SgQQMFBgaqbdu2+vnnn7OxUgAAAACPG7uGpffff18HDx7U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"
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"results = pd.DataFrame({\n",
" 'Model': ['Naive Bayes', 'LSTM', 'Pre-trained Transformer'],\n",
" 'Validation Accuracy': [nb_accuracy, val_accuracy, trans_val_accuracy],\n",
" 'Test Accuracy': [nb_accuracy, test_accuracy, trans_test_accuracy]\n",
"})\n",
"\n",
"plt.figure(figsize=(10, 6))\n",
"sns.barplot(x='Model', y='Validation Accuracy', data=results)\n",
"plt.title('Porównanie dokładności walidacyjnej modeli')\n",
"plt.ylabel('Validation Accuracy')\n",
"plt.show()\n",
"\n",
"plt.figure(figsize=(10, 6))\n",
"sns.barplot(x='Model', y='Test Accuracy', data=results)\n",
"plt.title('Porównanie dokładności testowej modeli')\n",
"plt.ylabel('Test Accuracy')\n",
"plt.show()"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2024-06-09T12:55:52.321794Z",
"end_time": "2024-06-09T12:55:52.681835Z"
}
}
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 0
}