{ "cells": [ { "cell_type": "markdown", "id": "c043d99f-80e3-4553-abec-f47d668d0811", "metadata": {}, "source": [ "# Economic News Identification Using an LSTM Neural Network Approach" ] }, { "cell_type": "markdown", "id": "0ab92f40-2ad3-4c69-8594-93bcc5780201", "metadata": {}, "source": [ "### Jan Maciejowski, Fabian Perez, Ali Rammal, Louis Golding, Abdullah Ghosheh, Ayah El Barq" ] }, { "cell_type": "markdown", "id": "28a4bf63", "metadata": {}, "source": [ "# Introduction" ] }, { "cell_type": "markdown", "id": "5021c11b", "metadata": {}, "source": [ "\n", "The main objective of this project is to create a machine learning model that can automatically classify a given piece of text as either an economical news article or a non-economical news article with a high degree of accuracy. This classification is achieved by training the model on a labeled dataset, where each instance of text is pre-identified relevant or non-relevant. The model learns to recognize patterns and features tied to high context keywords, enabling it to generalize and make accurate predictions on unseen data.\n", "\n", "This capability is crucial for applications such as content filtering, media analysis, and information retrieval, where distinguishing between journalistic content and other types of text is necessary. By automating this process, the model aims to assist in efficiently managing and categorizing large volumes of textual data, enhancing the effectiveness of digital content management systems, and providing valuable insights into the nature and distribution of information across various media platforms.\n", "\n", "\n", "\n", "\n", "\n" ] }, { "cell_type": "markdown", "id": "3bduh-46OHFK", "metadata": { "id": "3bduh-46OHFK" }, "source": [ "# Preprocess" ] }, { "cell_type": "markdown", "id": "f1bc12d3", "metadata": {}, "source": [ "## Primary Steps\n", "### Packages & NLTK Data Downloads\n", "Aside from the essential packages for data handling and visualization (pandas, numpy, matplotlib), tensorflow keras libraries are used for the completion of the objective, involving tokenizer and pad_sequences. Furthermore, the NLTK library is used for the text cleaning phase in order to fit text into vectorization. Packages such as Punkt - which divides a text into a list of sentences by using an unsupervised algorithm to build a model for abbreviation words, collocations, and words that start sentences; Stopwords - removes words that frequently appear in any language or corpus; Wordent - a lexical database of English which helps find conceptual relationships between words such as hypernyms, hyponyms, synonyms, antonyms etc.\n", "\n", "### Variable Selection and Cleaning\n", "As the dataset originally contains 14 variables in total, the most viable decision is to emphasize on the string variables which offer the context for economic newspaper detection. Furthermore, variables ‘text’ and ‘headline’ (the only ones used for model training) offer the needed context for a great generalizable model, while the rest of the variables strongly lack any relevance that facilitates proper predictions due to biased metrics based on low number of survey samples.\n", "\t\n", "The ‘relevance’ variable (originally in string type of data) was transformed into a binary variable where (1) = economic newspaper article & (0) = any other. Then, the dataset was reduced into a 50:50 ratio of relevant and non-relevant articles from merging a random sample of non-relevant articles with size length equal to all relevant articles. Headlines and the full text were embedded together into a single string. The training text data was cleaned through extra symbol removal, and split into words for the removal of the stop words and lemmatization. From this point, the text data is classified as clean string data. \n", "\n", "### Tokenization & Padding\n", "\n", "This step, also called vectorization, is performed through the tokenizer function form tensorflow turns each string into a sequence of numbers for the model to identify relevant articles with higher frequency of words related to the field of interest. By default, all punctuation is removed, turning the texts into space-separated sequences of words. These sequences are then split into vectorized lists of tokens. They will then be indexed or vectorized. After this process is performed, the train data is prepared for padding.\n", " \n", "The step of padding the vectorized sequences is required since the model expects similar observation sizes, and the text of each newspaper article is different from each other. For this, the padding process involves identifying the longest sequence and setting all observations to that longest size. Any extra space per observation is deemed a zero. \n", "\t\n", "From this point, our data was split into training, testing, and validation sets for the maximum assurance of our model’s generalizability towards new data. All these steps are seen below.\n" ] }, { "cell_type": "markdown", "id": "422b1866-5ebc-42cb-b8f3-13e50355d481", "metadata": {}, "source": [ "First, we must read in all necessary packages." ] }, { "cell_type": "code", "execution_count": 85, "id": "iUFDKHaVOHFN", "metadata": { "id": "iUFDKHaVOHFN" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\majon\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages\\tensorflow_addons\\utils\\tfa_eol_msg.py:23: UserWarning: \n", "\n", "TensorFlow Addons (TFA) has ended development and introduction of new features.\n", "TFA has entered a minimal maintenance and release mode until a planned end of life in May 2024.\n", "Please modify downstream libraries to take dependencies from other repositories in our TensorFlow community (e.g. Keras, Keras-CV, and Keras-NLP). \n", "\n", "For more information see: https://github.com/tensorflow/addons/issues/2807 \n", "\n", " warnings.warn(\n", "C:\\Users\\majon\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages\\tensorflow_addons\\utils\\ensure_tf_install.py:53: UserWarning: Tensorflow Addons supports using Python ops for all Tensorflow versions above or equal to 2.12.0 and strictly below 2.15.0 (nightly versions are not supported). \n", " The versions of TensorFlow you are currently using is 2.15.0 and is not supported. \n", "Some things might work, some things might not.\n", "If you were to encounter a bug, do not file an issue.\n", "If you want to make sure you're using a tested and supported configuration, either change the TensorFlow version or the TensorFlow Addons's version. \n", "You can find the compatibility matrix in TensorFlow Addon's readme:\n", "https://github.com/tensorflow/addons\n", " warnings.warn(\n" ] } ], "source": [ "import pandas as pd\n", "import numpy as np\n", "import re\n", "import matplotlib.pyplot as plt\n", "\n", "import nltk\n", "from nltk.corpus import stopwords\n", "from nltk.tokenize import word_tokenize\n", "from nltk.stem import WordNetLemmatizer\n", "\n", "import tensorflow as tf\n", "from tensorflow.keras.preprocessing.text import Tokenizer\n", "from tensorflow.keras.preprocessing.sequence import pad_sequences\n", "from tensorflow.keras.models import Sequential\n", "from tensorflow.keras.layers import Embedding, LSTM, Dense, Dropout, Bidirectional\n", "from tensorflow.keras.callbacks import EarlyStopping\n", "\n", "from sklearn.metrics import confusion_matrix\n", "\n", "from tensorflow.keras.optimizers import Adamax\n", "from tensorflow.keras.optimizers import Nadam\n", "import tensorflow_addons as tfa" ] }, { "cell_type": "markdown", "id": "29f0182f-e319-4777-a048-ee20ff91846b", "metadata": {}, "source": [ "In addition to that we need some NLTK datasets with english stopword, that must be removed and lemmatized." ] }, { "cell_type": "code", "execution_count": 2, "id": "69a7642b-c79a-4752-8864-7d2ffa7edc14", "metadata": {}, "outputs": [], "source": [ "# Ensure you have downloaded the necessary NLTK data\n", "# nltk.download('punkt')\n", "# nltk.download('stopwords')\n", "# nltk.download('wordnet')" ] }, { "cell_type": "markdown", "id": "6f88343b-9426-4b38-b585-8a301e490bd5", "metadata": {}, "source": [ "Reading the data" ] }, { "cell_type": "code", "execution_count": 3, "id": "beLBhgRLOHFP", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "beLBhgRLOHFP", "outputId": "fe017141-8c90-4f18-d260-b91583d3e971" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 8000 entries, 0 to 7999\n", "Data columns (total 15 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 _unit_id 8000 non-null int64 \n", " 1 _golden 8000 non-null bool \n", " 2 _unit_state 8000 non-null object \n", " 3 _trusted_judgments 8000 non-null int64 \n", " 4 _last_judgment_at 8000 non-null object \n", " 5 positivity 1420 non-null float64\n", " 6 positivity:confidence 3775 non-null float64\n", " 7 relevance 8000 non-null object \n", " 8 relevance:confidence 8000 non-null float64\n", " 9 articleid 8000 non-null object \n", " 10 date 8000 non-null object \n", " 11 headline 8000 non-null object \n", " 12 positivity_gold 0 non-null float64\n", " 13 relevance_gold 0 non-null float64\n", " 14 text 8000 non-null object \n", "dtypes: bool(1), float64(5), int64(2), object(7)\n", "memory usage: 882.9+ KB\n" ] } ], "source": [ "df = pd.read_csv(\"./US-Economic-News.csv\", delimiter=',', encoding= 'ISO-8859-1')\n", "\n", "df.info()" ] }, { "cell_type": "code", "execution_count": 4, "id": "2pZ91v4YOHFQ", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 573 }, "id": "2pZ91v4YOHFQ", "outputId": "2ecb5bf5-5337-4d44-bf14-f45d0725524e" }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
_unit_id_golden_unit_state_trusted_judgments_last_judgment_atpositivitypositivity:confidencerelevancerelevance:confidencearticleiddateheadlinepositivity_goldrelevance_goldtext
0842613455Falsefinalized312/5/15 17:483.00.6400yes0.640wsj_3982177888/14/91Yields on CDs Fell in the Latest WeekNaNNaNNEW YORK -- Yields on most certificates of dep...
1842613456Falsefinalized312/5/15 16:54NaNNaNno1.000wsj_3990195028/21/07The Morning Brief: White House Seeks to Limit ...NaNNaNThe Wall Street Journal Online</br></br>The Mo...
2842613457Falsefinalized312/5/15 1:59NaNNaNno1.000wsj_39828404811/14/91Banking Bill Negotiators Set Compromise --- Pl...NaNNaNWASHINGTON -- In an effort to achieve banking ...
3842613458Falsefinalized312/5/15 2:19NaN0.0000no0.675wsj_3979590186/16/86Manager's Journal: Sniffing Out Drug Abusers I...NaNNaNThe statistics on the enormous costs of employ...
4842613459Falsefinalized312/5/15 17:483.00.3257yes0.640wsj_39883805410/4/02Currency Trading: Dollar Remains in Tight Rang...NaNNaNNEW YORK -- Indecision marked the dollar's ton...
\n", "
" ], "text/plain": [ " _unit_id _golden _unit_state _trusted_judgments _last_judgment_at \\\n", "0 842613455 False finalized 3 12/5/15 17:48 \n", "1 842613456 False finalized 3 12/5/15 16:54 \n", "2 842613457 False finalized 3 12/5/15 1:59 \n", "3 842613458 False finalized 3 12/5/15 2:19 \n", "4 842613459 False finalized 3 12/5/15 17:48 \n", "\n", " positivity positivity:confidence relevance relevance:confidence \\\n", "0 3.0 0.6400 yes 0.640 \n", "1 NaN NaN no 1.000 \n", "2 NaN NaN no 1.000 \n", "3 NaN 0.0000 no 0.675 \n", "4 3.0 0.3257 yes 0.640 \n", "\n", " articleid date headline \\\n", "0 wsj_398217788 8/14/91 Yields on CDs Fell in the Latest Week \n", "1 wsj_399019502 8/21/07 The Morning Brief: White House Seeks to Limit ... \n", "2 wsj_398284048 11/14/91 Banking Bill Negotiators Set Compromise --- Pl... \n", "3 wsj_397959018 6/16/86 Manager's Journal: Sniffing Out Drug Abusers I... \n", "4 wsj_398838054 10/4/02 Currency Trading: Dollar Remains in Tight Rang... \n", "\n", " positivity_gold relevance_gold \\\n", "0 NaN NaN \n", "1 NaN NaN \n", "2 NaN NaN \n", "3 NaN NaN \n", "4 NaN NaN \n", "\n", " text \n", "0 NEW YORK -- Yields on most certificates of dep... \n", "1 The Wall Street Journal Online

The Mo... \n", "2 WASHINGTON -- In an effort to achieve banking ... \n", "3 The statistics on the enormous costs of employ... \n", "4 NEW YORK -- Indecision marked the dollar's ton... " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head(5)" ] }, { "cell_type": "markdown", "id": "411e6c10-3f9a-4d6d-b1ec-da281bc6109f", "metadata": {}, "source": [ "Removing unneccessary columns." ] }, { "cell_type": "code", "execution_count": 6, "id": "6dfFHenMOHFQ", "metadata": { "id": "6dfFHenMOHFQ" }, "outputs": [], "source": [ "df = df[['headline', 'text', 'relevance']]\n", "\n", "# We drop all irrelavant features to only keep headline and text for 2 reasons: \n", "# The other features seem either irrelevant or we lack documentation\n", "# With headline and text only, our final model will be more generalizable. We could in theory apply it to any article." ] }, { "cell_type": "markdown", "id": "50e304c5-f9ac-4ad2-b1b0-5ceac6fb6429", "metadata": {}, "source": [ "Balancing the dataset to 50% relevant and 50% not relevant." ] }, { "cell_type": "code", "execution_count": 7, "id": "609b72fc", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "relevance\n", "yes 1420\n", "no 1420\n", "Name: count, dtype: int64\n" ] } ], "source": [ "import pandas as pd\n", "import numpy as np\n", "\n", "df_yes = df[df['relevance'] == 'yes']\n", "df_no = df[df['relevance'] == 'no']\n", "\n", "df_no_sampled = df_no.sample(n=len(df_yes), random_state=42)\n", "\n", "# Concatenate the sampled 'no' rows with all 'yes' rows\n", "df_balanced = pd.concat([df_yes, df_no_sampled])\n", "\n", "print(df_balanced['relevance'].value_counts())" ] }, { "cell_type": "code", "execution_count": 8, "id": "2dd88fd1", "metadata": {}, "outputs": [], "source": [ "df = df_balanced" ] }, { "cell_type": "markdown", "id": "jK-dXnQAOHFR", "metadata": { "id": "jK-dXnQAOHFR" }, "source": [ "## Cleaning Strings" ] }, { "cell_type": "markdown", "id": "ea70a0cf-f409-4c35-a215-c5585b06953f", "metadata": {}, "source": [ "Here we merge the title and the full text into one string, we will process in whole." ] }, { "cell_type": "code", "execution_count": 9, "id": "hwsu0fkMOHFS", "metadata": { "id": "hwsu0fkMOHFS" }, "outputs": [], "source": [ "df['whole_txt'] = df['headline']+ ' ' + df['text']" ] }, { "cell_type": "code", "execution_count": 10, "id": "tGK5t8RyOHFT", "metadata": { "id": "tGK5t8RyOHFT" }, "outputs": [], "source": [ "wtxt_train = np.array(df['whole_txt'])" ] }, { "cell_type": "markdown", "id": "d43863c2-084d-47c6-ae75-62d2f9d46655", "metadata": {}, "source": [ "Removing of special signs, number ect." ] }, { "cell_type": "code", "execution_count": 11, "id": "8EX1KU3FOHFT", "metadata": { "id": "8EX1KU3FOHFT" }, "outputs": [], "source": [ "for i in range(len(wtxt_train)):\n", " # Taking out '
' in the 'whole_text' column\n", " wtxt_train[i] = re.sub(r'', ' ', wtxt_train[i])\n", " # Deletion of non-latin alfabet signs, also numbers\n", " wtxt_train[i] = re.sub(r'[^a-zA-Z]', ' ', wtxt_train[i])\n", " # Removing single letter works like 'a'.\n", " wtxt_train[i] = re.sub(r\"\\s+[a-zA-Z]\\s+\", ' ', wtxt_train[i])\n", " # Removing double spaces\n", " wtxt_train[i] = re.sub(r'\\s+', ' ', wtxt_train[i])\n", " # Lower case\n", " wtxt_train[i] = wtxt_train[i].lower()" ] }, { "cell_type": "markdown", "id": "OGok8jBiOHFT", "metadata": { "id": "OGok8jBiOHFT" }, "source": [ "## Split the words.\n", "We split the string into many strings representing words encoded here as elements of a list." ] }, { "cell_type": "code", "execution_count": 12, "id": "YLC_hbBPOHFT", "metadata": { "id": "YLC_hbBPOHFT" }, "outputs": [], "source": [ "for i in range(len(wtxt_train)):\n", " wtxt_train[i] = word_tokenize(wtxt_train[i])" ] }, { "cell_type": "markdown", "id": "nJcjnqLHOHFT", "metadata": { "id": "nJcjnqLHOHFT" }, "source": [ "## Removing stop words. \n", "We are removing stop words like for example: the, they, them, for. Those are words that bring no meritorical value to the articles topic since they are just a non meaning bringing punctuation necessary in the language. By removing them we can also save on size and therefore computational power." ] }, { "cell_type": "code", "execution_count": 13, "id": "7uoaH6INOHFT", "metadata": { "id": "7uoaH6INOHFT" }, "outputs": [], "source": [ "stop_words = set(stopwords.words('english'))\n", "\n", "for i in range(len(wtxt_train)):\n", " wtxt_train[i] = [word for word in wtxt_train[i] if word not in stop_words]" ] }, { "cell_type": "code", "execution_count": 14, "id": "74Ii4vxnOHFU", "metadata": { "id": "74Ii4vxnOHFU" }, "outputs": [ { "data": { "text/plain": [ "['yields',\n", " 'cds',\n", " 'fell',\n", " 'latest',\n", " 'week',\n", " 'new',\n", " 'york',\n", " 'yields',\n", " 'certificates',\n", " 'deposit',\n", " 'offered',\n", " 'major',\n", " 'banks',\n", " 'dropped',\n", " 'tenth',\n", " 'percentage',\n", " 'point',\n", " 'latest',\n", " 'week',\n", " 'reflecting',\n", " 'overall',\n", " 'decline',\n", " 'short',\n", " 'term',\n", " 'interest',\n", " 'rates',\n", " 'small',\n", " 'denomination',\n", " 'consumer',\n", " 'cds',\n", " 'sold',\n", " 'directly',\n", " 'banks',\n", " 'average',\n", " 'yield',\n", " 'six',\n", " 'month',\n", " 'deposits',\n", " 'fell',\n", " 'week',\n", " 'ended',\n", " 'yesterday',\n", " 'according',\n", " 'bank',\n", " 'survey',\n", " 'banxquote',\n", " 'money',\n", " 'markets',\n", " 'wilmington',\n", " 'del',\n", " 'information',\n", " 'service',\n", " 'three',\n", " 'month',\n", " 'consumer',\n", " 'deposits',\n", " 'average',\n", " 'yield',\n", " 'sank',\n", " 'week',\n", " 'according',\n", " 'banxquote',\n", " 'two',\n", " 'banks',\n", " 'banxquote',\n", " 'survey',\n", " 'citibank',\n", " 'new',\n", " 'york',\n", " 'corestates',\n", " 'pennsylvania',\n", " 'paying',\n", " 'less',\n", " 'threemonth',\n", " 'small',\n", " 'denomination',\n", " 'cds',\n", " 'declines',\n", " 'somewhat',\n", " 'smaller',\n", " 'five',\n", " 'year',\n", " 'consumer',\n", " 'cds',\n", " 'eased',\n", " 'banxquote',\n", " 'said',\n", " 'yields',\n", " 'three',\n", " 'month',\n", " 'six',\n", " 'month',\n", " 'treasury',\n", " 'bills',\n", " 'sold',\n", " 'monday',\n", " 'auction',\n", " 'plummeted',\n", " 'fifth',\n", " 'percentage',\n", " 'point',\n", " 'previous',\n", " 'week',\n", " 'respectively']" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "wtxt_train[0]\n", "# stop_words" ] }, { "cell_type": "markdown", "id": "0Ih9nJCDOHFU", "metadata": { "id": "0Ih9nJCDOHFU" }, "source": [ "## Lemmatization\n", "That means bringing the words with different endings to their initial meaning and form. " ] }, { "cell_type": "code", "execution_count": 15, "id": "tZq0soQFOHFU", "metadata": { "id": "tZq0soQFOHFU" }, "outputs": [], "source": [ "lemmatizer = WordNetLemmatizer()\n", "for i in range(len(wtxt_train)):\n", " wtxt_train[i] = [lemmatizer.lemmatize(word) for word in wtxt_train[i]]" ] }, { "cell_type": "code", "execution_count": 16, "id": "yh7EcIK7OHFU", "metadata": { "id": "yh7EcIK7OHFU" }, "outputs": [], "source": [ "df['whole_txt'] = wtxt_train\n", "df = df.drop(['headline', 'text'], axis = 1)" ] }, { "cell_type": "code", "execution_count": 17, "id": "T1TLLZZhOHFU", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 206 }, "id": "T1TLLZZhOHFU", "outputId": "127d4d92-3e49-4449-8bff-a5ab1fa375cc" }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
relevancewhole_txt
0yes[yield, cd, fell, latest, week, new, york, yie...
4yes[currency, trading, dollar, remains, tight, ra...
5yes[stock, fall, bofa, alcoa, slide, stock, decli...
9yes[u, dollar, fall, currency, decline, softened,...
12yes[defending, deflation, author, james, stewart,...
\n", "
" ], "text/plain": [ " relevance whole_txt\n", "0 yes [yield, cd, fell, latest, week, new, york, yie...\n", "4 yes [currency, trading, dollar, remains, tight, ra...\n", "5 yes [stock, fall, bofa, alcoa, slide, stock, decli...\n", "9 yes [u, dollar, fall, currency, decline, softened,...\n", "12 yes [defending, deflation, author, james, stewart,..." ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head(5)" ] }, { "cell_type": "markdown", "id": "2a9ecc91", "metadata": { "id": "2a9ecc91" }, "source": [ "### Data preparation\n", "* Initial Data Processing: Our first step is to encode the relevance label into both the Relevant (1) and non-Relevant labels (0). Then, we make it into a np.array to feed into the model.\n", "* Then, we begin to clean text data into pad sequences." ] }, { "cell_type": "code", "execution_count": 18, "id": "8d046d1e", "metadata": {}, "outputs": [], "source": [ "df.update(df[\"relevance\"].apply(lambda x: 0 if x == \"no\" else 1))" ] }, { "cell_type": "code", "execution_count": 19, "id": "c64fe00d", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
relevancewhole_txt
01[yield, cd, fell, latest, week, new, york, yie...
41[currency, trading, dollar, remains, tight, ra...
51[stock, fall, bofa, alcoa, slide, stock, decli...
91[u, dollar, fall, currency, decline, softened,...
121[defending, deflation, author, james, stewart,...
\n", "
" ], "text/plain": [ " relevance whole_txt\n", "0 1 [yield, cd, fell, latest, week, new, york, yie...\n", "4 1 [currency, trading, dollar, remains, tight, ra...\n", "5 1 [stock, fall, bofa, alcoa, slide, stock, decli...\n", "9 1 [u, dollar, fall, currency, decline, softened,...\n", "12 1 [defending, deflation, author, james, stewart,..." ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head(5)" ] }, { "cell_type": "markdown", "id": "bc686094", "metadata": { "id": "bc686094" }, "source": [ "### Tokenization\n", "First, we need to \"tokenize\" our sentences, i.e., convert them to sequences of numbers. For this task, we are going to use the `Tokenizer` from Tensorflow (documentation [here](https://www.tensorflow.org/api_docs/python/tf/keras/preprocessing/text/Tokenizer))" ] }, { "cell_type": "code", "execution_count": 20, "id": "cf9eaddf", "metadata": { "id": "cf9eaddf" }, "outputs": [], "source": [ "tokenizer = Tokenizer()\n", "tokenizer.fit_on_texts(wtxt_train) # fit our tokenizer on the dataset (i.e., assign a number to each word and keep a\n", " # dictionary with the correspondence of each word to a number)\n", "\n", "# see the language dictionary and the total number of words (please note that number 0 is reserved for the padding task)\n", "word_index = tokenizer.word_index\n", "total_words = len(word_index) + 1" ] }, { "cell_type": "code", "execution_count": 21, "id": "1bb124ce", "metadata": { "id": "1bb124ce" }, "outputs": [ { "data": { "text/plain": [ "{'year': 1,\n", " 'rate': 2,\n", " 'market': 3,\n", " 'said': 4,\n", " 'stock': 5,\n", " 'price': 6,\n", " 'new': 7,\n", " 'economy': 8,\n", " 'economic': 9,\n", " 'month': 10,\n", " 'federal': 11,\n", " 'would': 12,\n", " 'interest': 13,\n", " 'percent': 14,\n", " 'last': 15,\n", " 'week': 16,\n", " 'inflation': 17,\n", " 'bank': 18,\n", " 'billion': 19,\n", " 'fed': 20,\n", " 'dollar': 21,\n", " 'bond': 22,\n", " 'point': 23,\n", " 'growth': 24,\n", " 'investor': 25,\n", " 'one': 26,\n", " 'company': 27,\n", " 'million': 28,\n", " 'index': 29,\n", " 'since': 30,\n", " 'york': 31,\n", " 'quarter': 32,\n", " 'average': 33,\n", " 'first': 34,\n", " 'time': 35,\n", " 'tax': 36,\n", " 'increase': 37,\n", " 'reserve': 38,\n", " 'may': 39,\n", " 'government': 40,\n", " 'president': 41,\n", " 'report': 42,\n", " 'business': 43,\n", " 'day': 44,\n", " 'rose': 45,\n", " 'say': 46,\n", " 'consumer': 47,\n", " 'also': 48,\n", " 'yesterday': 49,\n", " 'two': 50,\n", " 'economist': 51,\n", " 'dow': 52,\n", " 'sale': 53,\n", " 'many': 54,\n", " 'job': 55,\n", " 'fund': 56,\n", " 'share': 57,\n", " 'could': 58,\n", " 'high': 59,\n", " 'gain': 60,\n", " 'higher': 61,\n", " 'trading': 62,\n", " 'cut': 63,\n", " 'deficit': 64,\n", " 'state': 65,\n", " 'analyst': 66,\n", " 'decline': 67,\n", " 'money': 68,\n", " 'spending': 69,\n", " 'fell': 70,\n", " 'mr': 71,\n", " 'recession': 72,\n", " 'financial': 73,\n", " 'term': 74,\n", " 'treasury': 75,\n", " 'policy': 76,\n", " 'even': 77,\n", " 'rise': 78,\n", " 'good': 79,\n", " 'industrial': 80,\n", " 'level': 81,\n", " 'unemployment': 82,\n", " 'much': 83,\n", " 'american': 84,\n", " 'department': 85,\n", " 'today': 86,\n", " 'trade': 87,\n", " 'low': 88,\n", " 'cent': 89,\n", " 'lower': 90,\n", " 'expected': 91,\n", " 'washington': 92,\n", " 'cost': 93,\n", " 'still': 94,\n", " 'plan': 95,\n", " 'budget': 96,\n", " 'jones': 97,\n", " 'three': 98,\n", " 'nation': 99,\n", " 'official': 100,\n", " 'house': 101,\n", " 'labor': 102,\n", " 'recent': 103,\n", " 'security': 104,\n", " 'home': 105,\n", " 'people': 106,\n", " 'next': 107,\n", " 'long': 108,\n", " 'exchange': 109,\n", " 'oil': 110,\n", " 'recovery': 111,\n", " 'make': 112,\n", " 'record': 113,\n", " 'news': 114,\n", " 'industry': 115,\n", " 'end': 116,\n", " 'investment': 117,\n", " 'back': 118,\n", " 'credit': 119,\n", " 'number': 120,\n", " 'second': 121,\n", " 'income': 122,\n", " 'profit': 123,\n", " 'past': 124,\n", " 'issue': 125,\n", " 'chairman': 126,\n", " 'data': 127,\n", " 'strong': 128,\n", " 'board': 129,\n", " 'short': 130,\n", " 'big': 131,\n", " 'according': 132,\n", " 'le': 133,\n", " 'chief': 134,\n", " 'service': 135,\n", " 'friday': 136,\n", " 'administration': 137,\n", " 'major': 138,\n", " 'late': 139,\n", " 'like': 140,\n", " 'world': 141,\n", " 'reported': 142,\n", " 'yield': 143,\n", " 'drop': 144,\n", " 'currency': 145,\n", " 'well': 146,\n", " 'mortgage': 147,\n", " 'loan': 148,\n", " 'earlier': 149,\n", " 'group': 150,\n", " 'firm': 151,\n", " 'fall': 152,\n", " 'inc': 153,\n", " 'earnings': 154,\n", " 'street': 155,\n", " 'rising': 156,\n", " 'per': 157,\n", " 'loss': 158,\n", " 'country': 159,\n", " 'worker': 160,\n", " 'way': 161,\n", " 'work': 162,\n", " 'central': 163,\n", " 'another': 164,\n", " 'co': 165,\n", " 'third': 166,\n", " 'get': 167,\n", " 'move': 168,\n", " 'future': 169,\n", " 'early': 170,\n", " 'wall': 171,\n", " 'sign': 172,\n", " 'national': 173,\n", " 'bill': 174,\n", " 'program': 175,\n", " 'january': 176,\n", " 'figure': 177,\n", " 'congress': 178,\n", " 'bush': 179,\n", " 'part': 180,\n", " 'annual': 181,\n", " 'capital': 182,\n", " 'take': 183,\n", " 'see': 184,\n", " 'trader': 185,\n", " 'close': 186,\n", " 'likely': 187,\n", " 'change': 188,\n", " 'made': 189,\n", " 'june': 190,\n", " 'demand': 191,\n", " 'among': 192,\n", " 'housing': 193,\n", " 'half': 194,\n", " 'july': 195,\n", " 'pay': 196,\n", " 'nearly': 197,\n", " 'nasdaq': 198,\n", " 'little': 199,\n", " 'march': 200,\n", " 'system': 201,\n", " 'result': 202,\n", " 'debt': 203,\n", " 'come': 204,\n", " 'raise': 205,\n", " 'problem': 206,\n", " 'concern': 207,\n", " 'rally': 208,\n", " 'show': 209,\n", " 'four': 210,\n", " 'standard': 211,\n", " 'committee': 212,\n", " 'product': 213,\n", " 'small': 214,\n", " 'corp': 215,\n", " 'keep': 216,\n", " 'foreign': 217,\n", " 'forecast': 218,\n", " 'corporate': 219,\n", " 'ago': 220,\n", " 'continued': 221,\n", " 'u': 222,\n", " 'april': 223,\n", " 'city': 224,\n", " 'yen': 225,\n", " 'real': 226,\n", " 'global': 227,\n", " 'greenspan': 228,\n", " 'meeting': 229,\n", " 'help': 230,\n", " 'however': 231,\n", " 'employment': 232,\n", " 'sector': 233,\n", " 'fear': 234,\n", " 'far': 235,\n", " 'value': 236,\n", " 'based': 237,\n", " 'despite': 238,\n", " 'ahead': 239,\n", " 'including': 240,\n", " 'poor': 241,\n", " 'hit': 242,\n", " 'executive': 243,\n", " 'several': 244,\n", " 'go': 245,\n", " 'might': 246,\n", " 'survey': 247,\n", " 'volume': 248,\n", " 'period': 249,\n", " 'current': 250,\n", " 'session': 251,\n", " 'benefit': 252,\n", " 'measure': 253,\n", " 'put': 254,\n", " 'order': 255,\n", " 'large': 256,\n", " 'pace': 257,\n", " 'public': 258,\n", " 'set': 259,\n", " 'added': 260,\n", " 'area': 261,\n", " 'japan': 262,\n", " 'compared': 263,\n", " 'think': 264,\n", " 'increased': 265,\n", " 'start': 266,\n", " 'going': 267,\n", " 'commerce': 268,\n", " 'biggest': 269,\n", " 'tuesday': 270,\n", " 'five': 271,\n", " 'better': 272,\n", " 'need': 273,\n", " 'fiscal': 274,\n", " 'pressure': 275,\n", " 'international': 276,\n", " 'continue': 277,\n", " 'white': 278,\n", " 'finance': 279,\n", " 'united': 280,\n", " 'thursday': 281,\n", " 'energy': 282,\n", " 'largest': 283,\n", " 'least': 284,\n", " 'six': 285,\n", " 'percentage': 286,\n", " 'revenue': 287,\n", " 'though': 288,\n", " 'general': 289,\n", " 'mark': 290,\n", " 'growing': 291,\n", " 'february': 292,\n", " 'sell': 293,\n", " 'sharply': 294,\n", " 'crisis': 295,\n", " 'august': 296,\n", " 'latest': 297,\n", " 'ended': 298,\n", " 'dropped': 299,\n", " 'monday': 300,\n", " 'buy': 301,\n", " 'came': 302,\n", " 'deal': 303,\n", " 'october': 304,\n", " 'best': 305,\n", " 'wednesday': 306,\n", " 'member': 307,\n", " 'already': 308,\n", " 'office': 309,\n", " 'senate': 310,\n", " 'previous': 311,\n", " 'slightly': 312,\n", " 'december': 313,\n", " 'enough': 314,\n", " 'november': 315,\n", " 'export': 316,\n", " 'technology': 317,\n", " 'around': 318,\n", " 'risk': 319,\n", " 'manager': 320,\n", " 'began': 321,\n", " 'euro': 322,\n", " 'yet': 323,\n", " 'supply': 324,\n", " 'composite': 325,\n", " 'lost': 326,\n", " 'health': 327,\n", " 'whether': 328,\n", " 'weak': 329,\n", " 'top': 330,\n", " 'buying': 331,\n", " 'september': 332,\n", " 'boost': 333,\n", " 'clinton': 334,\n", " 'wage': 335,\n", " 'face': 336,\n", " 'outlook': 337,\n", " 'thing': 338,\n", " 'making': 339,\n", " 'right': 340,\n", " 'showed': 341,\n", " 'look': 342,\n", " 'falling': 343,\n", " 'monetary': 344,\n", " 'reagan': 345,\n", " 'estimate': 346,\n", " 'war': 347,\n", " 'closed': 348,\n", " 'activity': 349,\n", " 'force': 350,\n", " 'america': 351,\n", " 'lowest': 352,\n", " 'action': 353,\n", " 'expect': 354,\n", " 'declined': 355,\n", " 'although': 356,\n", " 'hour': 357,\n", " 'highest': 358,\n", " 'return': 359,\n", " 'gold': 360,\n", " 'effort': 361,\n", " 'private': 362,\n", " 'fourth': 363,\n", " 'management': 364,\n", " 'banking': 365,\n", " 'republican': 366,\n", " 'run': 367,\n", " 'total': 368,\n", " 'mean': 369,\n", " 'food': 370,\n", " 'effect': 371,\n", " 'maker': 372,\n", " 'import': 373,\n", " 'advance': 374,\n", " 'retail': 375,\n", " 'almost': 376,\n", " 'worry': 377,\n", " 'post': 378,\n", " 'indicator': 379,\n", " 'amount': 380,\n", " 'sharp': 381,\n", " 'key': 382,\n", " 'selling': 383,\n", " 'political': 384,\n", " 'expectation': 385,\n", " 'production': 386,\n", " 'without': 387,\n", " 'question': 388,\n", " 'want': 389,\n", " 'coming': 390,\n", " 'manufacturing': 391,\n", " 'hope': 392,\n", " 'released': 393,\n", " 'domestic': 394,\n", " 'note': 395,\n", " 'become': 396,\n", " 'confidence': 397,\n", " 'law': 398,\n", " 'every': 399,\n", " 'overall': 400,\n", " 'chip': 401,\n", " 'director': 402,\n", " 'computer': 403,\n", " 'auto': 404,\n", " 'soon': 405,\n", " 'vice': 406,\n", " 'slow': 407,\n", " 'call': 408,\n", " 'strength': 409,\n", " 'gained': 410,\n", " 'employee': 411,\n", " 'blue': 412,\n", " 'support': 413,\n", " 'decade': 414,\n", " 'leader': 415,\n", " 'jobless': 416,\n", " 'cash': 417,\n", " 'give': 418,\n", " 'led': 419,\n", " 'view': 420,\n", " 'taking': 421,\n", " 'offer': 422,\n", " 'research': 423,\n", " 'university': 424,\n", " 'democrat': 425,\n", " 'open': 426,\n", " 'full': 427,\n", " 'old': 428,\n", " 'car': 429,\n", " 'surge': 430,\n", " 'called': 431,\n", " 'seen': 432,\n", " 'proposal': 433,\n", " 'insurance': 434,\n", " 'industrials': 435,\n", " 'line': 436,\n", " 'account': 437,\n", " 'power': 438,\n", " 'net': 439,\n", " 'amid': 440,\n", " 'p': 441,\n", " 'adjusted': 442,\n", " 'care': 443,\n", " 'reason': 444,\n", " 'turn': 445,\n", " 'near': 446,\n", " 'trend': 447,\n", " 'head': 448,\n", " 'retailer': 449,\n", " 'contract': 450,\n", " 'later': 451,\n", " 'europe': 452,\n", " 'asset': 453,\n", " 'lead': 454,\n", " 'monthly': 455,\n", " 'japanese': 456,\n", " 'longer': 457,\n", " 'remain': 458,\n", " 'senior': 459,\n", " 'slowdown': 460,\n", " 'lot': 461,\n", " 'saving': 462,\n", " 'control': 463,\n", " 'find': 464,\n", " 'hold': 465,\n", " 'option': 466,\n", " 'social': 467,\n", " 'purchase': 468,\n", " 'school': 469,\n", " 'expansion': 470,\n", " 'european': 471,\n", " 'county': 472,\n", " 'toward': 473,\n", " 'association': 474,\n", " 'decision': 475,\n", " 'left': 476,\n", " 'told': 477,\n", " 'mixed': 478,\n", " 'reduce': 479,\n", " 'china': 480,\n", " 'believe': 481,\n", " 'election': 482,\n", " 'slowing': 483,\n", " 'target': 484,\n", " 'output': 485,\n", " 'performance': 486,\n", " 'secretary': 487,\n", " 'bad': 488,\n", " 'evidence': 489,\n", " 'announced': 490,\n", " 'store': 491,\n", " 'gross': 492,\n", " 'unit': 493,\n", " 'important': 494,\n", " 'case': 495,\n", " 'producer': 496,\n", " 'must': 497,\n", " 'recently': 498,\n", " 'productivity': 499,\n", " 'john': 500,\n", " 'leading': 501,\n", " 'took': 502,\n", " 'helped': 503,\n", " 'claim': 504,\n", " 'held': 505,\n", " 'life': 506,\n", " 'family': 507,\n", " 'council': 508,\n", " 'region': 509,\n", " 'following': 510,\n", " 'statement': 511,\n", " 'hand': 512,\n", " 'condition': 513,\n", " 'summer': 514,\n", " 'push': 515,\n", " 'campaign': 516,\n", " 'away': 517,\n", " 'congressional': 518,\n", " 'talk': 519,\n", " 'obama': 520,\n", " 'robert': 521,\n", " 'lending': 522,\n", " 'remains': 523,\n", " 'within': 524,\n", " 'meanwhile': 525,\n", " 'alan': 526,\n", " 'broad': 527,\n", " 'place': 528,\n", " 'begin': 529,\n", " 'looking': 530,\n", " 'agency': 531,\n", " 'grew': 532,\n", " 'jumped': 533,\n", " 'union': 534,\n", " 'impact': 535,\n", " 'district': 536,\n", " 'raising': 537,\n", " 'institution': 538,\n", " 'due': 539,\n", " 'payroll': 540,\n", " 'payment': 541,\n", " 'reduction': 542,\n", " 'banker': 543,\n", " 'former': 544,\n", " 'operation': 545,\n", " 'personal': 546,\n", " 'seven': 547,\n", " 'great': 548,\n", " 'factor': 549,\n", " 'individual': 550,\n", " 'local': 551,\n", " 'development': 552,\n", " 'steel': 553,\n", " 'posted': 554,\n", " 'mutual': 555,\n", " 'holding': 556,\n", " 'know': 557,\n", " 'study': 558,\n", " 'rule': 559,\n", " 'statistic': 560,\n", " 'rather': 561,\n", " 'generally': 562,\n", " 'democratic': 563,\n", " 'charge': 564,\n", " 'party': 565,\n", " 'signal': 566,\n", " 'prospect': 567,\n", " 'gdp': 568,\n", " 'conference': 569,\n", " 'estate': 570,\n", " 'climbed': 571,\n", " 'buyer': 572,\n", " 'found': 573,\n", " 'steady': 574,\n", " 'morgan': 575,\n", " 'hard': 576,\n", " 'fact': 577,\n", " 'reached': 578,\n", " 'modest': 579,\n", " 'across': 580,\n", " 'card': 581,\n", " 'others': 582,\n", " 'equity': 583,\n", " 'stimulus': 584,\n", " 'fixed': 585,\n", " 'black': 586,\n", " 'adviser': 587,\n", " 'getting': 588,\n", " 'course': 589,\n", " 'used': 590,\n", " 'mid': 591,\n", " 'followed': 592,\n", " 'raised': 593,\n", " 'instead': 594,\n", " 'revised': 595,\n", " 'often': 596,\n", " 'history': 597,\n", " 'especially': 598,\n", " 'jump': 599,\n", " 'beginning': 600,\n", " 'manufacturer': 601,\n", " 'final': 602,\n", " 'probably': 603,\n", " 'predicted': 604,\n", " 'example': 605,\n", " 'chicago': 606,\n", " 'customer': 607,\n", " 'significant': 608,\n", " 'sold': 609,\n", " 'minute': 610,\n", " 'seems': 611,\n", " 'closing': 612,\n", " 'given': 613,\n", " 'traded': 614,\n", " 'step': 615,\n", " 'center': 616,\n", " 'building': 617,\n", " 'benchmark': 618,\n", " 'commodity': 619,\n", " 'german': 620,\n", " 'package': 621,\n", " 'gap': 622,\n", " 'improvement': 623,\n", " 'shift': 624,\n", " 'position': 625,\n", " 'construction': 626,\n", " 'maryland': 627,\n", " 'virginia': 628,\n", " 'range': 629,\n", " 'advanced': 630,\n", " 'weakness': 631,\n", " 'cutting': 632,\n", " 'meet': 633,\n", " 'turned': 634,\n", " 'use': 635,\n", " 'started': 636,\n", " 'factory': 637,\n", " 'defense': 638,\n", " 'comment': 639,\n", " 'rebound': 640,\n", " 'single': 641,\n", " 'airline': 642,\n", " 'agreement': 643,\n", " 'rest': 644,\n", " 'act': 645,\n", " 'straight': 646,\n", " 'agreed': 647,\n", " 'attack': 648,\n", " 'sept': 649,\n", " 'list': 650,\n", " 'noted': 651,\n", " 'west': 652,\n", " 'got': 653,\n", " 'quickly': 654,\n", " 'heavy': 655,\n", " 'trillion': 656,\n", " 'side': 657,\n", " 'bear': 658,\n", " 'borrowing': 659,\n", " 'inventory': 660,\n", " 'moving': 661,\n", " 'possible': 662,\n", " 'idea': 663,\n", " 'try': 664,\n", " 'grow': 665,\n", " 'taken': 666,\n", " 'slump': 667,\n", " 'crash': 668,\n", " 'ford': 669,\n", " 'unchanged': 670,\n", " 'press': 671,\n", " 'strategist': 672,\n", " 'provide': 673,\n", " 'really': 674,\n", " 'clear': 675,\n", " 'uncertainty': 676,\n", " 'something': 677,\n", " 'proposed': 678,\n", " 'cause': 679,\n", " 'crude': 680,\n", " 'journal': 681,\n", " 'known': 682,\n", " 'continuing': 683,\n", " 'fee': 684,\n", " 'middle': 685,\n", " 'afternoon': 686,\n", " 'holiday': 687,\n", " 'initial': 688,\n", " 'bernanke': 689,\n", " 'finished': 690,\n", " 'hurt': 691,\n", " 'financing': 692,\n", " 'morning': 693,\n", " 'strategy': 694,\n", " 'largely': 695,\n", " 'ever': 696,\n", " 'officer': 697,\n", " 'worst': 698,\n", " 'pushed': 699,\n", " 'moved': 700,\n", " 'household': 701,\n", " 'light': 702,\n", " 'along': 703,\n", " 'plant': 704,\n", " 'c': 705,\n", " 'commission': 706,\n", " 'oct': 707,\n", " 'huge': 708,\n", " 'moderate': 709,\n", " 'motor': 710,\n", " 'utility': 711,\n", " 'carter': 712,\n", " 'stronger': 713,\n", " 'slower': 714,\n", " 'warned': 715,\n", " 'living': 716,\n", " 'employer': 717,\n", " 'whose': 718,\n", " 'declining': 719,\n", " 'discount': 720,\n", " 'aid': 721,\n", " 'behind': 722,\n", " 'increasing': 723,\n", " 'downturn': 724,\n", " 'break': 725,\n", " 'showing': 726,\n", " 'project': 727,\n", " 'bit': 728,\n", " 'relatively': 729,\n", " 'commercial': 730,\n", " 'expects': 731,\n", " 'drug': 732,\n", " 'suggests': 733,\n", " 'upward': 734,\n", " 'continues': 735,\n", " 'boom': 736,\n", " 'working': 737,\n", " 'dividend': 738,\n", " 'author': 739,\n", " 'easing': 740,\n", " 'fuel': 741,\n", " 'remained': 742,\n", " 'information': 743,\n", " 'changed': 744,\n", " 'eight': 745,\n", " 'balance': 746,\n", " 'positive': 747,\n", " 'sent': 748,\n", " 'saying': 749,\n", " 'available': 750,\n", " 'particularly': 751,\n", " 'certain': 752,\n", " 'tech': 753,\n", " 'basis': 754,\n", " 'seasonally': 755,\n", " 'saw': 756,\n", " 'class': 757,\n", " 'dealer': 758,\n", " 'portfolio': 759,\n", " 'different': 760,\n", " 'faster': 761,\n", " 'reading': 762,\n", " 'book': 763,\n", " 'focus': 764,\n", " 'response': 765,\n", " 'potential': 766,\n", " 'add': 767,\n", " 'equipment': 768,\n", " 'greater': 769,\n", " 'governor': 770,\n", " 'vote': 771,\n", " 'smaller': 772,\n", " 'issued': 773,\n", " 'additional': 774,\n", " 'event': 775,\n", " 'peak': 776,\n", " 'thought': 777,\n", " 'regulator': 778,\n", " 'jan': 779,\n", " 'slide': 780,\n", " 'matter': 781,\n", " 'paul': 782,\n", " 'seem': 783,\n", " 'never': 784,\n", " 'lender': 785,\n", " 'fallen': 786,\n", " 'david': 787,\n", " 'chance': 788,\n", " 'weekly': 789,\n", " 'legislation': 790,\n", " 'free': 791,\n", " 'climb': 792,\n", " 'needed': 793,\n", " 'retirement': 794,\n", " 'california': 795,\n", " 'trust': 796,\n", " 'related': 797,\n", " 'estimated': 798,\n", " 'analysis': 799,\n", " 'rail': 800,\n", " 'reform': 801,\n", " 'appears': 802,\n", " 'larger': 803,\n", " 'bureau': 804,\n", " 'active': 805,\n", " 'economics': 806,\n", " 'drive': 807,\n", " 'college': 808,\n", " 'kind': 809,\n", " 'worse': 810,\n", " 'corporation': 811,\n", " 'speech': 812,\n", " 'suggest': 813,\n", " 'offering': 814,\n", " 'ground': 815,\n", " 'deposit': 816,\n", " 'bring': 817,\n", " 'consecutive': 818,\n", " 'running': 819,\n", " 'surplus': 820,\n", " 'george': 821,\n", " 'serious': 822,\n", " 'core': 823,\n", " 'limit': 824,\n", " 'bet': 825,\n", " 'soared': 826,\n", " 'barrel': 827,\n", " 'went': 828,\n", " 'improved': 829,\n", " 'ease': 830,\n", " 'sluggish': 831,\n", " 'bull': 832,\n", " 'regional': 833,\n", " 'source': 834,\n", " 'debate': 835,\n", " 'trying': 836,\n", " 'inflationary': 837,\n", " 'direction': 838,\n", " 'broader': 839,\n", " 'mostly': 840,\n", " 'attention': 841,\n", " 'prime': 842,\n", " 'able': 843,\n", " 'william': 844,\n", " 'expert': 845,\n", " 'caused': 846,\n", " 'process': 847,\n", " 'weekend': 848,\n", " 'paid': 849,\n", " 'indicated': 850,\n", " 'review': 851,\n", " 'hiring': 852,\n", " 'pushing': 853,\n", " 'wholesale': 854,\n", " 'gas': 855,\n", " 'aug': 856,\n", " 'flat': 857,\n", " 'stay': 858,\n", " 'double': 859,\n", " 'similar': 860,\n", " 'attempt': 861,\n", " 'paper': 862,\n", " 'common': 863,\n", " 'risen': 864,\n", " 'presidential': 865,\n", " 'whole': 866,\n", " 'partner': 867,\n", " 'associated': 868,\n", " 'community': 869,\n", " 'let': 870,\n", " 'sen': 871,\n", " 'release': 872,\n", " 'difficult': 873,\n", " 'indeed': 874,\n", " 'worth': 875,\n", " 'received': 876,\n", " 'broker': 877,\n", " 'word': 878,\n", " 'widely': 879,\n", " 'anticipated': 880,\n", " 'robust': 881,\n", " 'machine': 882,\n", " 'answer': 883,\n", " 'spring': 884,\n", " 'warning': 885,\n", " 'temporary': 886,\n", " 'organization': 887,\n", " 'asia': 888,\n", " 'suggested': 889,\n", " 'negative': 890,\n", " 'germany': 891,\n", " 'gave': 892,\n", " 'main': 893,\n", " 'season': 894,\n", " 'track': 895,\n", " 'opportunity': 896,\n", " 'student': 897,\n", " 'conservative': 898,\n", " 'plunge': 899,\n", " 'game': 900,\n", " 'name': 901,\n", " 'ending': 902,\n", " 'include': 903,\n", " 'seemed': 904,\n", " 'brokerage': 905,\n", " 'sure': 906,\n", " 'bottom': 907,\n", " 'page': 908,\n", " 'tokyo': 909,\n", " 'asked': 910,\n", " 'dec': 911,\n", " 'finally': 912,\n", " 'adding': 913,\n", " 'th': 914,\n", " 'correction': 915,\n", " 'trouble': 916,\n", " 'weaker': 917,\n", " 'failed': 918,\n", " 'feel': 919,\n", " 'fight': 920,\n", " 'series': 921,\n", " 'cap': 922,\n", " 'sense': 923,\n", " 'surged': 924,\n", " 'seek': 925,\n", " 'closely': 926,\n", " 'nine': 927,\n", " 'always': 928,\n", " 'check': 929,\n", " 'special': 930,\n", " 'ap': 931,\n", " 'offered': 932,\n", " 'doubt': 933,\n", " 'fast': 934,\n", " 'canada': 935,\n", " 'done': 936,\n", " 'south': 937,\n", " 'situation': 938,\n", " 'wide': 939,\n", " 'men': 940,\n", " 'appeared': 941,\n", " 'keeping': 942,\n", " 'rapidly': 943,\n", " 'tell': 944,\n", " 'difference': 945,\n", " 'texas': 946,\n", " 'imf': 947,\n", " 'quarterly': 948,\n", " 'layoff': 949,\n", " 'picture': 950,\n", " 'san': 951,\n", " 'easy': 952,\n", " 'bigger': 953,\n", " 'brother': 954,\n", " 'taxpayer': 955,\n", " 'woman': 956,\n", " 'either': 957,\n", " 'actually': 958,\n", " 'beyond': 959,\n", " 'using': 960,\n", " 'spokesman': 961,\n", " 'giving': 962,\n", " 'consider': 963,\n", " 'addition': 964,\n", " 'forecaster': 965,\n", " 'volatility': 966,\n", " 'losing': 967,\n", " 'item': 968,\n", " 'bid': 969,\n", " 'nothing': 970,\n", " 'kept': 971,\n", " 'increasingly': 972,\n", " 'boston': 973,\n", " 'client': 974,\n", " 'slowed': 975,\n", " 'passed': 976,\n", " 'projected': 977,\n", " 'optimism': 978,\n", " 'role': 979,\n", " 'edged': 980,\n", " 'boosted': 981,\n", " 'usually': 982,\n", " 'consensus': 983,\n", " 'richard': 984,\n", " 'volcker': 985,\n", " 'interview': 986,\n", " 'voter': 987,\n", " 'military': 988,\n", " 'competition': 989,\n", " 'spend': 990,\n", " 'indicate': 991,\n", " 'possibility': 992,\n", " 'gasoline': 993,\n", " 'tumbled': 994,\n", " 'appear': 995,\n", " 'finish': 996,\n", " 'institute': 997,\n", " 'approved': 998,\n", " 'accounting': 999,\n", " 'asian': 1000,\n", " ...}" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "word_index" ] }, { "cell_type": "code", "execution_count": 22, "id": "d8bc0b15", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "d8bc0b15", "outputId": "bc0c8ab2-9e8f-470d-a17e-89b96cd00afd" }, "outputs": [ { "data": { "text/plain": [ "20936" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "total_words" ] }, { "cell_type": "markdown", "id": "016c30d7", "metadata": { "id": "016c30d7" }, "source": [ "### Padding Sequences\n", "Sentences and sequences tend to have different lengths, however our model is expecting equally sized observations.\n", "Here we want to convert our texts to sequences and make them of the same length (in general, the lenght of the longest of our sequences). We are going to use here `pad_sequences` from Tensorflow (documentation [here](https://www.tensorflow.org/api_docs/python/tf/keras/utils/pad_sequences)), to add zeroes to the tokenized sentences until they all reach the same length." ] }, { "cell_type": "code", "execution_count": 23, "id": "ea518a6d", "metadata": { "id": "ea518a6d" }, "outputs": [], "source": [ "sequences = tokenizer.texts_to_sequences(wtxt_train)\n", "padded_sequences = pad_sequences(sequences)" ] }, { "cell_type": "code", "execution_count": 24, "id": "6a3a19b1", "metadata": { "id": "6a3a19b1" }, "outputs": [ { "data": { "text/plain": [ "[143,\n", " 2582,\n", " 70,\n", " 297,\n", " 16,\n", " 7,\n", " 31,\n", " 143,\n", " 2405,\n", " 816,\n", " 932,\n", " 138,\n", " 18,\n", " 299,\n", " 2041,\n", " 286,\n", " 23,\n", " 297,\n", " 16,\n", " 1055,\n", " 400,\n", " 67,\n", " 130,\n", " 74,\n", " 13,\n", " 2,\n", " 214,\n", " 7581,\n", " 47,\n", " 2582,\n", " 609,\n", " 1698,\n", " 18,\n", " 33,\n", " 143,\n", " 285,\n", " 10,\n", " 816,\n", " 70,\n", " 16,\n", " 298,\n", " 49,\n", " 132,\n", " 18,\n", " 247,\n", " 6514,\n", " 68,\n", " 3,\n", " 12016,\n", " 3663,\n", " 743,\n", " 135,\n", " 98,\n", " 10,\n", " 47,\n", " 816,\n", " 33,\n", " 143,\n", " 1832,\n", " 16,\n", " 132,\n", " 6514,\n", " 50,\n", " 18,\n", " 6514,\n", " 247,\n", " 3307,\n", " 7,\n", " 31,\n", " 12017,\n", " 3308,\n", " 1042,\n", " 133,\n", " 12018,\n", " 214,\n", " 7581,\n", " 2582,\n", " 67,\n", " 1020,\n", " 772,\n", " 271,\n", " 1,\n", " 47,\n", " 2582,\n", " 1165,\n", " 6514,\n", " 4,\n", " 143,\n", " 98,\n", " 10,\n", " 285,\n", " 10,\n", " 75,\n", " 174,\n", " 609,\n", " 300,\n", " 1056,\n", " 2042,\n", " 1110,\n", " 286,\n", " 23,\n", " 311,\n", " 16,\n", " 2406]" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sequences[0]" ] }, { "cell_type": "code", "execution_count": 25, "id": "bf5a3374", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "bf5a3374", "outputId": "99253544-bbca-48ca-e1d5-b86689138957" }, "outputs": [ { "data": { "text/plain": [ "array([[ 0, 0, 0, ..., 311, 16, 2406],\n", " [ 0, 0, 0, ..., 239, 232, 42],\n", " [ 0, 0, 0, ..., 325, 326, 23],\n", " ...,\n", " [ 0, 0, 0, ..., 203, 4375, 59],\n", " [ 0, 0, 0, ..., 159, 9, 169],\n", " [ 0, 0, 0, ..., 12015, 7108, 7444]])" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "padded_sequences" ] }, { "cell_type": "code", "execution_count": 26, "id": "89dd0de2", "metadata": {}, "outputs": [], "source": [ "df['pad_seq'] = padded_sequences.tolist()" ] }, { "cell_type": "code", "execution_count": 27, "id": "4f444fcc", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
relevancepad_seq
01[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
41[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
51[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
91[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
121[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
.........
78100[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
6770[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
47940[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
58690[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
29770[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
\n", "

2840 rows × 2 columns

\n", "
" ], "text/plain": [ " relevance pad_seq\n", "0 1 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...\n", "4 1 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...\n", "5 1 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...\n", "9 1 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...\n", "12 1 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...\n", "... ... ...\n", "7810 0 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...\n", "677 0 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...\n", "4794 0 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...\n", "5869 0 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...\n", "2977 0 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...\n", "\n", "[2840 rows x 2 columns]" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.drop(['whole_txt'], axis = 1)" ] }, { "cell_type": "markdown", "id": "f45a3397-5ac9-411b-ad79-1142ae01e578", "metadata": {}, "source": [ "Here we end up with padded sequences and the binarly encoded relevance." ] }, { "cell_type": "code", "execution_count": 28, "id": "561a6b0d", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
relevancewhole_txtpad_seq
01[yield, cd, fell, latest, week, new, york, yie...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
41[currency, trading, dollar, remains, tight, ra...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
51[stock, fall, bofa, alcoa, slide, stock, decli...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
91[u, dollar, fall, currency, decline, softened,...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
121[defending, deflation, author, james, stewart,...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
\n", "
" ], "text/plain": [ " relevance whole_txt \\\n", "0 1 [yield, cd, fell, latest, week, new, york, yie... \n", "4 1 [currency, trading, dollar, remains, tight, ra... \n", "5 1 [stock, fall, bofa, alcoa, slide, stock, decli... \n", "9 1 [u, dollar, fall, currency, decline, softened,... \n", "12 1 [defending, deflation, author, james, stewart,... \n", "\n", " pad_seq \n", "0 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", "4 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", "5 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", "9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", "12 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... " ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head(5)" ] }, { "cell_type": "markdown", "id": "83826301", "metadata": {}, "source": [ "### Train-Test Split" ] }, { "cell_type": "markdown", "id": "6ed341c3-6983-4f48-ae74-fa16944a8e93", "metadata": {}, "source": [ "Over here we do the Train-Test Split, we designate the X and y variables using the padded sequences and revelance respectively. The split is done in proportions 80% to 20% using a random state, in order to mix the relevant and non relevant cases more less equaly by each split. Then from the product of the training split we create another split into the true train part of the data and the validation set, by 80-20% as well. At the end we finish with 3 sets train, validation and test. The sizes of each array are given below. The arrays for the y variable are turned into numpy arrays and they contain only integer values, since those are the only ones tensorflow will accept given a binary crossentropy. " ] }, { "cell_type": "code", "execution_count": 29, "id": "f00e30da", "metadata": {}, "outputs": [], "source": [ "X = padded_sequences\n", "y = df['relevance']" ] }, { "cell_type": "code", "execution_count": 30, "id": "fB_vM2GQkf-Y", "metadata": { "id": "fB_vM2GQkf-Y" }, "outputs": [], "source": [ "from sklearn.model_selection import train_test_split\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)" ] }, { "cell_type": "code", "execution_count": 31, "id": "4e0850ba", "metadata": {}, "outputs": [], "source": [ "X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.2, random_state=42)" ] }, { "cell_type": "code", "execution_count": 32, "id": "19ab3a73", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0, 0, 0, ..., 61, 362, 66],\n", " [ 0, 0, 0, ..., 4569, 6281, 1252],\n", " [ 0, 0, 0, ..., 3415, 95, 4],\n", " ...,\n", " [ 0, 0, 0, ..., 479, 96, 64],\n", " [ 0, 0, 0, ..., 27, 246, 609],\n", " [ 0, 0, 0, ..., 10, 391, 24]])" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train" ] }, { "cell_type": "code", "execution_count": 33, "id": "d51f8bcb", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1817, 404)" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train.shape" ] }, { "cell_type": "code", "execution_count": 34, "id": "5f8059d8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "6965 1\n", "2156 0\n", "1103 0\n", "7486 1\n", "5865 1\n", " ..\n", "2245 1\n", "1956 1\n", "3711 0\n", "506 1\n", "3821 1\n", "Name: relevance, Length: 1817, dtype: object" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_train" ] }, { "cell_type": "code", "execution_count": 35, "id": "128bd1f8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1817,)" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_train.shape" ] }, { "cell_type": "code", "execution_count": 36, "id": "adde4bc3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(455,)" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_val.shape" ] }, { "cell_type": "code", "execution_count": 37, "id": "aa0a8eba", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(568,)" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_test.shape" ] }, { "cell_type": "code", "execution_count": null, "id": "616e3170-d789-4ac1-a12d-fea71a5dcab4", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 38, "id": "0f0eab78", "metadata": {}, "outputs": [], "source": [ "y_train = np.array(y_train)\n", "y_val = np.array(y_val)\n", "y_test = np.array(y_test)" ] }, { "cell_type": "code", "execution_count": 39, "id": "35c078ca", "metadata": {}, "outputs": [], "source": [ "y_train = y_train.astype('int')\n", "y_val = y_val.astype('int')\n", "y_test = y_test.astype('int')" ] }, { "cell_type": "markdown", "id": "0fe8e8b2", "metadata": { "id": "0fe8e8b2" }, "source": [ "### Building the model\n", "\n", "We are going to build multiple models that include:\n", "- `Embedding` layer with an output representation of each word as a vector of dim 100, 200 or 300\n", "- `LSTM` with an intermediate state of 100 nodes, though this number can vary depending on the model in subject\n", "- An output layer `Dense` that connects the output of the LSTM and creates an output of 1. It either activates if found relevant or not if otherwise. It uses a sigmoid activation which traverses between a 0 and a 1.\n", "- `Dropout` a function that drops a given percentage of links in a random manner after layer training, a good option to try to limit the overfitting effects.\n", "- `Bidirectional` a both way LSTM layer, by that it captures both past and future information to train on." ] }, { "cell_type": "markdown", "id": "f36d316c-3966-4939-b735-79dd2d1ff936", "metadata": {}, "source": [ "### Early Stopping\n", "Early Stopping allows us to stop training in order to aviod overfitting as soon as we are getting same or worse loss scores on the validation set. Such a stop is executed when the loss drop occures 3 times in a row. For a poorer accuracy, it restores the previous better weights." ] }, { "cell_type": "code", "execution_count": 40, "id": "02feafd7-481d-4930-8680-4a873789e53d", "metadata": {}, "outputs": [], "source": [ "early_stopping = EarlyStopping(monitor='val_loss', patience=3, restore_best_weights=True)" ] }, { "cell_type": "markdown", "id": "1101ccfc", "metadata": { "id": "1101ccfc" }, "source": [ "# Training the models" ] }, { "cell_type": "markdown", "id": "f64f5dc1", "metadata": {}, "source": [ "## Model Building\n" ] }, { "cell_type": "markdown", "id": "41b902f6", "metadata": {}, "source": [ "Regarding model building, we first tried to create a solid model through in depth hyperparameter tuning, but our results were always roughly the same; slightly better than random. We were obtaining training accuracy of 1.0 and test accuracy of 0.83 at most. These results may seem satisfying at first, but we actually had an imbalanced dataset. In fact, our y variable contained 82% of articles that were “economically irrelevant” and only 18% of relevant. Our first intuition was to use 100, 200 or 300 words for the final model in training and to make an excel to keep track of the model parameters used, training parameters and results. \n", "\n", "We then decided to employ regularization methods to reduce over-fitting. We also used graphs to see the loss and what happens at each epoch by defining a history variable and then plotting history when training is done. We did all of this to gain insights and these steps helped us figure out the deeper problem: the imbalance of the y variable in our original dataset. Thus, we finally chose to balance our original dataset by using as many relevant as irrelevant articles, while keeping all of the relevant ones of which we only had 18% in our original dataset. So our final dataset consists of 50% of irrelevant articles and 50% of relevant ones. We then re-ran all our code and models on this new dataset and our results drastically improved, as you can see below.\n", "\n", "Other models were run along in different files, using different configurations, however the document you are reading worked the best for our given task, those incluse:\n", "* The original 80 - 20 % Full Text modeling (Worst Performing)\n", "* The 50 - 50 % Full Text modeling (Best Performing, DESCRIBED HERE)\n", "* The 50 - 50 % Headlines Only modeling (Worse Performance by around ~ 10%)\n", "* The 50 - 50 % Headlines + First N Words of Text modeling (Slightly Worse Performance Highly Dependant on the Value of N)\n", "* The 50 - 50 % Full Text 'word2vec' modeling (Depending on model, slightly better or worse)\n", "\n", "In the word2vec case we decided to keep it out due to computation complications, not much better results often slightly worse, longer waiting times and over all it increased vastly the model complexity, which we wanted to avoid.\n", "\n", "All files can be found on GitHub, some of them are not described and in a more 'dirty' format.\n", "\n", "https://github.com/Majon911/EconNewsMLIdent" ] }, { "cell_type": "markdown", "id": "55429b96", "metadata": {}, "source": [ "### MODEL 1 (The base model)" ] }, { "cell_type": "markdown", "id": "92e8cb02", "metadata": {}, "source": [ "* Our base model defines LSTM as a great foundation for its usability in sequence data such as NLP \n", "* On the other side, we come with ideally the final output from a classification of all outputs from the LSTM, and use the dense layer to reduce to that one most likely prediction; hence the '1' of output dimension. Finally, the adam optimizer was initialized with, which would tend to overfit through the model training.\n", "\n", "- At 56% validation accuracy, this model overfits at 99%." ] }, { "cell_type": "code", "execution_count": 41, "id": "ed54e838-0fc1-4c04-bc93-08c58aa4804c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From C:\\Users\\majon\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages\\keras\\src\\backend.py:873: The name tf.get_default_graph is deprecated. Please use tf.compat.v1.get_default_graph instead.\n", "\n", "WARNING:tensorflow:From C:\\Users\\majon\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages\\keras\\src\\optimizers\\__init__.py:309: The name tf.train.Optimizer is deprecated. Please use tf.compat.v1.train.Optimizer instead.\n", "\n" ] } ], "source": [ "# We are going to build our model with the Sequential API\n", "model = Sequential()\n", "model.add(Embedding(total_words, # number of words to process as input\n", " 100, # output representation\n", " input_length=len(padded_sequences[0]))) # total length of each observation\n", "model.add(LSTM(100, return_sequences=False))\n", "model.add(Dense(1, activation='sigmoid')) # Change activation based on the number of classes\n", "\n", "model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])" ] }, { "cell_type": "code", "execution_count": 42, "id": "db0965d6-b675-4106-82bc-e28b1f13e9d2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model(padded_sequences)" ] }, { "cell_type": "code", "execution_count": 43, "id": "d96f15a2-949e-4342-9550-6454ea7429a8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"sequential\"\n", "_________________________________________________________________\n", " Layer (type) Output Shape Param # \n", "=================================================================\n", " embedding (Embedding) (None, 404, 100) 2093600 \n", " \n", " lstm (LSTM) (None, 100) 80400 \n", " \n", " dense (Dense) (None, 1) 101 \n", " \n", "=================================================================\n", "Total params: 2174101 (8.29 MB)\n", "Trainable params: 2174101 (8.29 MB)\n", "Non-trainable params: 0 (0.00 Byte)\n", "_________________________________________________________________\n" ] } ], "source": [ "model.summary()" ] }, { "cell_type": "code", "execution_count": 44, "id": "826df8ad", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "826df8ad", "outputId": "954999b9-e6f3-43a2-dc81-a5c10a8e6ef1" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/10\n", "WARNING:tensorflow:From C:\\Users\\majon\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages\\keras\\src\\utils\\tf_utils.py:492: The name tf.ragged.RaggedTensorValue is deprecated. Please use tf.compat.v1.ragged.RaggedTensorValue instead.\n", "\n", "WARNING:tensorflow:From C:\\Users\\majon\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages\\keras\\src\\engine\\base_layer_utils.py:384: The name tf.executing_eagerly_outside_functions is deprecated. Please use tf.compat.v1.executing_eagerly_outside_functions instead.\n", "\n", "57/57 [==============================] - 13s 195ms/step - loss: 0.6880 - accuracy: 0.5498 - val_loss: 0.6759 - val_accuracy: 0.6484\n", "Epoch 2/10\n", "57/57 [==============================] - 9s 162ms/step - loss: 0.5424 - accuracy: 0.7870 - val_loss: 0.6902 - val_accuracy: 0.5978\n", "Epoch 3/10\n", "57/57 [==============================] - 9s 163ms/step - loss: 0.2517 - accuracy: 0.9086 - val_loss: 0.9096 - val_accuracy: 0.6066\n", "Epoch 4/10\n", "57/57 [==============================] - 10s 172ms/step - loss: 0.0673 - accuracy: 0.9818 - val_loss: 1.2419 - val_accuracy: 0.5824\n", "Epoch 5/10\n", "57/57 [==============================] - 10s 172ms/step - loss: 0.0200 - accuracy: 0.9961 - val_loss: 1.4963 - val_accuracy: 0.5670\n", "Epoch 6/10\n", "57/57 [==============================] - 9s 152ms/step - loss: 0.0251 - accuracy: 0.9950 - val_loss: 1.3650 - val_accuracy: 0.5604\n", "Epoch 7/10\n", "57/57 [==============================] - 9s 159ms/step - loss: 0.0163 - accuracy: 0.9950 - val_loss: 1.8727 - val_accuracy: 0.5868\n", "Epoch 8/10\n", "57/57 [==============================] - 9s 158ms/step - loss: 0.0078 - accuracy: 0.9978 - val_loss: 1.6632 - val_accuracy: 0.5736\n", "Epoch 9/10\n", "57/57 [==============================] - 10s 169ms/step - loss: 0.0045 - accuracy: 0.9989 - val_loss: 2.0763 - val_accuracy: 0.5978\n", "Epoch 10/10\n", "57/57 [==============================] - 10s 178ms/step - loss: 0.0041 - accuracy: 0.9989 - val_loss: 1.6814 - val_accuracy: 0.5692\n" ] } ], "source": [ "hist = model.fit(X_train, y_train, epochs=10, validation_data = (X_val, y_val))" ] }, { "cell_type": "code", "execution_count": 46, "id": "286d9981", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "{'loss': [0.6879979968070984,\n", " 0.5423904061317444,\n", " 0.25165560841560364,\n", " 0.0672721192240715,\n", " 0.01998290978372097,\n", " 0.02507256343960762,\n", " 0.01631668023765087,\n", " 0.007824108004570007,\n", " 0.004535376559942961,\n", " 0.004056017845869064],\n", " 'accuracy': [0.5498073697090149,\n", " 0.7870115637779236,\n", " 0.9086406230926514,\n", " 0.9818381667137146,\n", " 0.9961475133895874,\n", " 0.9950467944145203,\n", " 0.9950467944145203,\n", " 0.9977985620498657,\n", " 0.9988992810249329,\n", " 0.9988992810249329],\n", " 'val_loss': [0.675902247428894,\n", " 0.6902332901954651,\n", " 0.9096015691757202,\n", " 1.2418750524520874,\n", " 1.4963206052780151,\n", " 1.3650264739990234,\n", " 1.8727422952651978,\n", " 1.663246750831604,\n", " 2.076326608657837,\n", " 1.6813592910766602],\n", " 'val_accuracy': [0.6483516693115234,\n", " 0.5978022217750549,\n", " 0.6065934300422668,\n", " 0.5824176073074341,\n", " 0.5670329928398132,\n", " 0.5604395866394043,\n", " 0.58681321144104,\n", " 0.5736263990402222,\n", " 0.5978022217750549,\n", " 0.5692307949066162]}" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "hist.history" ] }, { "cell_type": "code", "execution_count": 47, "id": "b2af0489", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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In4nvoXfh2/h91F7/GICKwAAaLgCemQEAACYRxkBAABGUUYAAIBRlBEAAGBUQJeRGTNmqF27dgoNDVViYqJWrFhhOlJASklJUb9+/RQeHq7o6Ghddtll2rhxo+lYKPX444/LYrFowoQJpqMErF27dumaa67RKaecorCwMJ1xxhlatWqV6VgBy+l06r777lP79u0VFhamjh076uGHHz7h9VdQtYAtI/Pnz1dycrIeeOABrV69Wr169dLw4cOVlZVlOlrA+frrrzVu3DgtX75cixcvVnFxsYYNG6b8/HzT0QLeypUr9dJLL6lnz56mowSs/fv3a/DgwQoODtZnn32mn3/+WU8//bSaNWtmOlrAmjJlil588UVNnz5dv/zyi6ZMmaInnnhCzz//vOlofitgv9qbmJiofv36afr06ZI817+Ji4vTbbfdpkmTJhlOF9j27t2r6Ohoff311zrrrLNMxwlYeXl56tOnj1544QU98sgjio+P17Rp00zHCjiTJk3St99+q2+++cZ0FJS65JJLFBMTo5dffrls31//+leFhYXpjTfeMJjMfwXkyEhRUZHS09OVlJRUts9qtSopKUlpaWkGk0GScnJyJEnNmzc3nCSwjRs3ThdffHGF/05Q/z766CP17dtXV1xxhaKjo9W7d2/Nnj3bdKyANmjQIKWmpmrTpk2SpB9++EHLli3ThRdeaDiZ//KLC+XVtuzsbDmdTsXExFTYHxMTow0bNhhKBckzQjVhwgQNHjxYPXr0MB0nYM2bN0+rV6/WypUrTUcJeFu3btWLL76o5ORk3X333Vq5cqVuv/12hYSEaMyYMabjBaRJkybJ4XCoS5custlscjqdevTRR3X11Vebjua3ArKMwHeNGzdO69at07Jly0xHCVg7d+7U+PHjtXjxYoWGhpqOE/BcLpf69u2rxx57TJLUu3dvrVu3TjNnzqSMGPL222/rzTff1Ny5c9W9e3etXbtWEyZMUKtWrfid1FBAlpGoqCjZbDZlZmZW2J+ZmanY2FhDqXDrrbfqk08+0dKlS9WmTRvTcQJWenq6srKy1KdPn7J9TqdTS5cu1fTp01VYWCibzWYwYWBp2bKlunXrVmFf165d9e677xpKhH//+9+aNGmSrrzySknSGWecod9++00pKSmUkRoKyDkjISEhSkhIUGpqatk+l8ul1NRUDRw40GCywOR2u3Xrrbfq/fff15dffqn27dubjhTQzjvvPP30009au3Zt2a1v3766+uqrtXbtWopIPRs8ePAxX3XftGmTTj31VEOJcPDgQVmtFd8+bTabXC6XoUT+LyBHRiQpOTlZY8aMUd++fdW/f39NmzZN+fn5Gjt2rOloAWfcuHGaO3euPvzwQ4WHhysjI0OSFBkZqbCwMMPpAk94ePgx83UaN26sU045hXk8BkycOFGDBg3SY489pr/97W9asWKFZs2apVmzZpmOFrBGjBihRx99VG3btlX37t21Zs0aTZ06Vdddd53paP7LHcCef/55d9u2bd0hISHu/v37u5cvX246UkCSVOntlVdeMR0Npc4++2z3+PHjTccIWB9//LG7R48ebrvd7u7SpYt71qxZpiMFNIfD4R4/fry7bdu27tDQUHeHDh3c99xzj7uwsNB0NL8VsOuMAAAA3xCQc0YAAIDvoIwAAACjKCMAAMAoyggAADCKMgIAAIyijAAAAKMoIwAAwCjKCAAAMIoyAgAAjKKMAAAAoygjAADAKMoIAAAw6v8B9IJrJkLA9fUAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(hist.history['loss'])\n", "plt.plot(hist.history['accuracy'])" ] }, { "cell_type": "code", "execution_count": 111, "id": "6ea199d8-f2c3-4288-a9e3-23d0b7ca3ec9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "15/15 [==============================] - 1s 58ms/step - loss: 1.6814 - accuracy: 0.5692\n" ] } ], "source": [ "loss, accuracy = model.evaluate(X_val, y_val)" ] }, { "cell_type": "markdown", "id": "2bfff715-714f-40a8-9a43-4b7bba724575", "metadata": {}, "source": [ "As we can see the model using Adam optimizer, vastly overfits as we can see on the graph, the loss line drops dramatically to nealy 0 just after the first 3 epochs. That had to be changed because with such an agressive rate, we will often overfit and the scores on the validation set were not much better." ] }, { "cell_type": "markdown", "id": "781be31e", "metadata": {}, "source": [ "### Model 1 Testing" ] }, { "cell_type": "markdown", "id": "d772ed0c-9a19-44c8-b920-c64118782de0", "metadata": {}, "source": [ "For comparision reasons, we decided to run a test using this model, the test set accuracy is given below and does not stand away from the validation accuracy. The threshold is set to 0.5, that means >0.5 means a positive case, below means a negative case." ] }, { "cell_type": "code", "execution_count": 267, "id": "76c6df0e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "18/18 [==============================] - 1s 64ms/step - loss: 1.6087 - accuracy: 0.5757\n" ] } ], "source": [ "loss, accuracy = model.evaluate(X_test, y_test)" ] }, { "cell_type": "code", "execution_count": 268, "id": "f3526a9c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "18/18 [==============================] - 1s 56ms/step\n" ] } ], "source": [ "#Prection and Confusion Matrix\n", "y_pred = model.predict(X_test)\n", "bin_y_pred = (y_pred > 0.5).astype(int)" ] }, { "cell_type": "code", "execution_count": 269, "id": "062c9c2c", "metadata": {}, "outputs": [], "source": [ "bin_y_pred = np.squeeze(bin_y_pred)" ] }, { "cell_type": "code", "execution_count": 270, "id": "23edf0b7", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0,\n", " 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1,\n", " 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0,\n", " 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0,\n", " 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1,\n", " 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1,\n", " 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0,\n", " 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1,\n", " 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1,\n", " 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0,\n", " 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0,\n", " 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1,\n", " 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,\n", " 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1,\n", " 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1,\n", " 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0,\n", " 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0,\n", " 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0,\n", " 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1,\n", " 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0,\n", " 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0,\n", " 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0,\n", " 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0,\n", " 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0,\n", " 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0,\n", " 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1])" ] }, "execution_count": 270, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bin_y_pred" ] }, { "cell_type": "code", "execution_count": 271, "id": "e345456a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Predicted No Predicted Yes \n", "Actual No 152 130 \n", "Actual Yes 111 175 \n", "\n", "Precision: 0.5738\n", "Recall: 0.6119\n", "Accuracy: 0.5757\n" ] } ], "source": [ "y_true = y_test\n", "y_pred = bin_y_pred\n", "\n", "cm = confusion_matrix(y_true, y_pred)\n", "\n", "TN, FP, FN, TP = cm.ravel()\n", "\n", "print(f\"{'':<20}{'Predicted No':<20}{'Predicted Yes':<20}\")\n", "print(f\"{'Actual No':<20}{TN:<20}{FP:<20}\")\n", "print(f\"{'Actual Yes':<20}{FN:<20}{TP:<20}\")\n", "\n", "print(\"\\nPrecision:\", round(TP/(TP + FP), 4))\n", "print(\"Recall:\", round(TP/(TP + FN), 4))\n", "print(\"Accuracy:\", round((TP+TN)/(TP + TN + FP + FN), 4))" ] }, { "cell_type": "markdown", "id": "04a80b4c-9237-499c-b40a-7fdfb4af6aba", "metadata": {}, "source": [ "The precision for the base model is 0.57, above we can see its confusion matrix and precision and recall values." ] }, { "cell_type": "markdown", "id": "f5437a9f", "metadata": {}, "source": [ "### MODEL 2" ] }, { "cell_type": "markdown", "id": "cef564db", "metadata": {}, "source": [ "* In this model, the idea of the Dropout layer's implementation is aimed at the reduction of parameter memorization to make the model reduce overfitting with the train data, the 0.2 drops around 20% of the output parameters from the LSTM layer before feeding the Dense layer. This model showed great improvement with 65% validation acuracy." ] }, { "cell_type": "code", "execution_count": 124, "id": "e790349c", "metadata": {}, "outputs": [], "source": [ "# We are going to build our model with the Sequential API\n", "model2 = Sequential()\n", "\n", "model2.add(Embedding(total_words, # number of words to process as input\n", " 50, # output representation\n", " input_length=len(padded_sequences[0]))) # total length of each observation\n", "\n", "model2.add(LSTM(50, return_sequences=False))\n", "\n", "model2.add(Dropout(0.2))\n", "\n", "model2.add(Dense(1, activation='sigmoid')) \n", "\n", "model2.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])" ] }, { "cell_type": "code", "execution_count": 125, "id": "a4fded32", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"sequential_12\"\n", "_________________________________________________________________\n", " Layer (type) Output Shape Param # \n", "=================================================================\n", " embedding_12 (Embedding) (None, 404, 50) 1046800 \n", " \n", " lstm_13 (LSTM) (None, 50) 20200 \n", " \n", " dropout_8 (Dropout) (None, 50) 0 \n", " \n", " dense_12 (Dense) (None, 1) 51 \n", " \n", "=================================================================\n", "Total params: 1067051 (4.07 MB)\n", "Trainable params: 1067051 (4.07 MB)\n", "Non-trainable params: 0 (0.00 Byte)\n", "_________________________________________________________________\n" ] } ], "source": [ "model2.summary()" ] }, { "cell_type": "code", "execution_count": 126, "id": "2cc28f7c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/10\n", "57/57 [==============================] - 11s 151ms/step - loss: 0.6919 - accuracy: 0.5311 - val_loss: 0.6797 - val_accuracy: 0.6659\n", "Epoch 2/10\n", "57/57 [==============================] - 7s 123ms/step - loss: 0.5895 - accuracy: 0.7369 - val_loss: 0.6224 - val_accuracy: 0.6593\n", "Epoch 3/10\n", "57/57 [==============================] - 7s 125ms/step - loss: 0.3292 - accuracy: 0.8690 - val_loss: 0.8046 - val_accuracy: 0.5978\n", "Epoch 4/10\n", "57/57 [==============================] - 7s 127ms/step - loss: 0.1286 - accuracy: 0.9576 - val_loss: 1.1220 - val_accuracy: 0.5824\n", "Epoch 5/10\n", "57/57 [==============================] - 7s 126ms/step - loss: 0.0530 - accuracy: 0.9862 - val_loss: 1.2956 - val_accuracy: 0.5670\n" ] } ], "source": [ "hist2 = model2.fit(X_train, y_train, epochs=10, validation_data = (X_val, y_val), callbacks=[early_stopping])" ] }, { "cell_type": "code", "execution_count": 127, "id": "4efbb897-0571-4ccc-a81f-c9e34aff2f71", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 127, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(hist2.history['loss'])\n", "plt.plot(hist2.history['accuracy'])" ] }, { "cell_type": "code", "execution_count": 128, "id": "a59b099a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "15/15 [==============================] - 1s 42ms/step - loss: 0.6224 - accuracy: 0.6593\n" ] } ], "source": [ "loss, accuracy = model2.evaluate(X_val, y_val)" ] }, { "cell_type": "markdown", "id": "81711f2f-c8ac-47ed-9e98-3e0085a94d40", "metadata": {}, "source": [ "Thanks to the dropout layer, we reduced the effects of overfitting, and increased our accuracy by a good 5% on validation data. In here we also reduced the number of nodes in the LSTM layer to 50 to try to reduce the effects of overfitting." ] }, { "cell_type": "markdown", "id": "83c8e04a", "metadata": {}, "source": [ "### MODEL 3" ] }, { "cell_type": "markdown", "id": "875b245c", "metadata": {}, "source": [ "* Model 3, along with the following models begins to explore the optimization of parameters, given the increase of output representation and a reduction of nodes at the dropout layer. Accuracy: 62%" ] }, { "cell_type": "code", "execution_count": 113, "id": "cce897ae", "metadata": {}, "outputs": [], "source": [ "model3 = Sequential()\n", "\n", "model3.add(Embedding(total_words, # number of words to process as input\n", " 200, # output representation\n", " input_length=len(padded_sequences[0]))) # total length of each observation\n", "\n", "model3.add(LSTM(200, return_sequences=False))\n", "\n", "model3.add(Dropout(0.2))\n", "\n", "model3.add(Dense(1, activation='sigmoid')) \n", "\n", "model3.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])" ] }, { "cell_type": "code", "execution_count": 114, "id": "8a14b1ec", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"sequential_11\"\n", "_________________________________________________________________\n", " Layer (type) Output Shape Param # \n", "=================================================================\n", " embedding_11 (Embedding) (None, 404, 200) 4187200 \n", " \n", " lstm_12 (LSTM) (None, 200) 320800 \n", " \n", " dropout_7 (Dropout) (None, 200) 0 \n", " \n", " dense_11 (Dense) (None, 1) 201 \n", " \n", "=================================================================\n", "Total params: 4508201 (17.20 MB)\n", "Trainable params: 4508201 (17.20 MB)\n", "Non-trainable params: 0 (0.00 Byte)\n", "_________________________________________________________________\n" ] } ], "source": [ "model3.summary()" ] }, { "cell_type": "code", "execution_count": 115, "id": "6963b196", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/10\n", "57/57 [==============================] - 34s 566ms/step - loss: 0.6986 - accuracy: 0.5608 - val_loss: 0.6696 - val_accuracy: 0.6220\n", "Epoch 2/10\n", "57/57 [==============================] - 36s 629ms/step - loss: 0.5054 - accuracy: 0.7947 - val_loss: 0.6990 - val_accuracy: 0.5978\n", "Epoch 3/10\n", "57/57 [==============================] - 34s 606ms/step - loss: 0.1986 - accuracy: 0.9290 - val_loss: 0.9651 - val_accuracy: 0.6110\n", "Epoch 4/10\n", "57/57 [==============================] - 36s 635ms/step - loss: 0.0652 - accuracy: 0.9829 - val_loss: 1.4469 - val_accuracy: 0.6022\n" ] } ], "source": [ "hist3 = model3.fit(X_train, y_train, epochs=10, validation_data = (X_val, y_val), callbacks=[early_stopping])" ] }, { "cell_type": "code", "execution_count": 116, "id": "a49a0850", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 116, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGdCAYAAADAAnMpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABETUlEQVR4nO3dd3yV5d3H8c85mQQyCRlAIOw9ZIU9FEFAlKettWoFtzhApbWCi6q12No6EASctFUrqFVUlgiChCHKjuywAmQQRhISMs/9/HGHhEgCCSS5z/i+X6+88Nwj53fu5/Tk+9zXdX6XzTAMAxERERGL2K0uQERERDybwoiIiIhYSmFERERELKUwIiIiIpZSGBERERFLKYyIiIiIpRRGRERExFIKIyIiImIpb6sLqAyHw8GxY8cIDAzEZrNZXY6IiIhUgmEYZGVl0bBhQ+z2iu9/uEQYOXbsGDExMVaXISIiIpchKSmJxo0bV7jfJcJIYGAgYL6YoKAgi6sRERGRysjMzCQmJqbk73hFXCKMnBuaCQoKUhgRERFxMZeaYqEJrCIiImIphRERERGxlMKIiIiIWKrKYeT7779n9OjRNGzYEJvNxhdffHHJc1auXEm3bt3w8/OjZcuWzJ079zJKFREREXdU5TCSnZ1Nly5dmDlzZqWOP3DgAKNGjWLIkCFs2bKFRx99lHvuuYelS5dWuVgRERFxP1X+Ns2IESMYMWJEpY+fPXs2zZo145///CcA7dq1Iz4+nldffZXhw4dX9elFRETEzdT4nJF169YxdOjQMtuGDx/OunXrKjwnLy+PzMzMMj8iIiLinmo8jKSkpBAZGVlmW2RkJJmZmZw9e7bcc6ZNm0ZwcHDJj7qvioiIuC+n/DbNlClTyMjIKPlJSkqyuiQRERGpITXegTUqKorU1NQy21JTUwkKCqJOnTrlnuPn54efn19NlyYiIiJOoMbvjPTp04fly5eX2bZs2TL69OlT008tIiIiLqDKYeTMmTNs2bKFLVu2AOZXd7ds2cLhw4cBc4hl7NixJcePHz+e/fv386c//Yldu3bx5ptvMn/+fB577LHqeQUiIiLi0qo8TPPTTz8xZMiQkseTJk0CYNy4ccydO5fk5OSSYALQrFkzFi5cyGOPPcbrr79O48aNeeedd/S1XhERESsYBpxJg1MH4fQh899Th2Don6FeA0tKshmGYVjyzFWQmZlJcHAwGRkZWrVXRETkUvKzzYBx6uAvQsdBc3thOd9mvWspNOldrWVU9u93jU9gFRERkWrmKILMo2UDxvnBI/v4JX6BDYIbQ2gshDQ1/w2MquGiK6YwIiIi4mwMA86eqvjORkYSOAov/jv8Q8yQEVocNs4PHsEx4O1boy+hKhRGRERErFCQa4aKkpBxsOwcjrxLdB/38oWQJqUB45eho05IzdZfjRRGREREaoLDAWdSL7yrce6/s5KBS0zbrBd54V2Nc8EjMBrsXjX6EmqLwoiIiMjlysuqeKLo6cNQmHvx833qlg0Y5wePkCbgG1Cz9TsJhREREZGKFBVC5pEL72ycCx05Jy5+vs1+4UTR838C6oPNVqMvwRUojIiIiOcyDMg5WRw0DpSds3HqIGQcAaPo4r+jTljZOxvnh47gxuDlU8MvwvUpjIiIiHsrOGsOmVQ0nJJ/5uLne/mZQyYVDaf4q//VlVIYERER1+ZwmJNBy5soevpQ8UTRSwiMLmeiaPG/9aLA7pSL3LsNhREREXF+uRkV3Nk4ZP53Uf7Fz/cNrLjnRkgT8PGv4RcgF6MwIiIi1isqOK/nRjmh4+ypi59v84KQmAu//hoaC6HNoE6oJoo6MYURERGpeYYB2ennBYwD5wWPQ+Y3VgzHxX9HQHj5dzZCm0JQY/DSnzRXpf/LiYhI9cjPKQ4aFQynFGRf/Hxv//LvbIQ0Nf/bL7CmX4FYRGFEREQqx1EEmccqnih6JvUSv8AGQQ3L7yYaGgt1IzRR1EMpjIiISKmzpy5s7FUyUfQwOAoufr5fUDkTRc/9GwPefjVbv7gkhREREU9SmF88UfRA+cMpuRkXP9/u/YvF2WLLDqdooqhcBoURERF3YhhwJq38OxunDkLmUS65OFvdiPK7iYY2haBGbrM4mzgPhREREVeTd+biE0ULz178fO86FXcTDW0KvnVr+AWIlKUwIiLi7DKPwc6vYNfXkLYTso9f4gRbBYuznZso2kBDKeJUFEZERJzR6cOw40vY+SUk/XDhfv+QijuKBseAt2+tlityJRRGREScxcn9ZgDZsQCObSq7LyYO2t8ITfuZgaNOiBUVitQIhRERESsd3wM7F5gBJGX7eTtsZvBofyO0u97szyHiphRGRERqk2GY8z52FAeQ4ztL99m8oNkAaHcDtL0eAiOtq1OkFimMiIjUNMOAlG3FAeRLOLG3dJ/dB5oPhvY3QJtRULe+ZWWKWEVhRESkJhgGHN0EO74wJ6GeOli6z8sXWlxjDsG0uc5sFCbiwRRGRESqi8MBRzaUfgsmI6l0n3cdaDUU2o+BVsPAP8iyMkWcjcKIiMiVcBTB4XXmEMzOryAruXSfT11oPdy8A9LqWjUTE6mAwoiISFUVFcDBeDOA7Pq6bBMyvyBoM8IMIC2uBp861tUp4iIURkREKqMwHw6sMueA7Fporm57jn8ItB1lBpDmg7UyrUgVKYyIiFSkIBcSV5h3QHYvhrzzVrQNqG9+/bb9jdBsIHj5WFeniItTGBEROV9+Duz71gwge5ZA/pnSffUiod1oM4A06Qte+ggVqQ76X5KISF4W7P3GDCB7l0FBTum+oEZmE7L2N0JML7B7WVeniJtSGBERz5SbAbuXmAFk37dQlFe6L6RJcRv2G6FRd7DbratTxAMojIiI58g5CbsXmQEk8TtwFJTuC2tu9gBpfwNEdwWbzaoqRTyOwoiIuLczx82v3+78Eg58D47C0n0N2pYOwUR2UAARsYjCiIi4n6wUswHZjgVwaA0YjtJ9kR2Lh2BugIi21tUoIiUURkTEPWQcKQ0gh9cDRum+6K5mAGl/I9RvYVWFIlIBhRERcV2nDprrwOxYAEd/Kruvcc/iOyCjITTWiupEpJIURkTEtaTvg50LzACSvPW8HTZo0qc4gFwPwY0tK1FEqkZhREScX9qu4oXovoTUhNLtNjvE9jfnf7QbDYFR1tUoIpdNYUREnI9hmKHj3BBM+u7SfXZvs/16+xvNdux1w62rU0SqhcKIiDgHw4Bjm827HzsWwMn9pfu8fKH5EDOAtBkBAWHW1Ski1U5hRESs43DA0Y3mSrg7voSMw6X7vP2h5VAzgLQeDv7BlpUpIjVLYUREapejCJJ+MO9+7PgSso6V7vMJgFbDzADSahj41bOuThGpNQojIlLzigrN5mM7FpjdUM+klu7zDYQ215mTUFsOBd8A6+oUEUsojIhIzSgqgAOrzLsfu76GnBOl+/yDoc1I8w5I8yHg429dnSJiOYUREak+hXnmAnQ7v4RdCyH3dOm+OmHQdpS5GF2zgeDta1WVIuJkFEZE5MoUnIV9y80hmD1LIC+zdF/dBmb/j/Y3QtP+4KWPHBG5kD4ZRKTq8rNh7zfFAeQbKMgu3RcYXboSbpPeYPeyrk4RcQkKIyJSObmZsGep+TXcfcuh8GzpvuCY0pVwG/cEu92yMkXE9SiMiEjFzp6C3YvNSaiJy6Eov3RfaGzpSrgNu4HNZlmZIuLaFEZEpKzsE7B7oTkEs38lOApL99VvVRpAojopgIhItVAYERE4kwY7vzIDyMF4MIpK90W0Lw0gDdoqgIhItVMYEfFUmcdKA8ihtYBRui+qc2kACW9lWYki4hkURkQ8yenD5vyPnV+aLdnP16h76STUsGbW1CciHklhRMTdnUgsXgn3Szi2qey+mN7FAWQ0hMRYU5+IeDyFERF3dHwP7FxgDsGkbC/dbrND037m3Y9210NQQ+tqFBEppjAi4g4MA9J2Fq+EuwCO7yzdZ/OCZgPMOyBtr4d6EdbVKSJSDoUREVdlGJCyrTSAnNhXus/uA80HFweQURAQZlmZIiKXojAi4koMA45uMrug7lgApw+V7vPyg5bXmAGk9XVQJ8SqKkVEqkRhRMTZORxwZIMZPnZ+BRlJpfu860Cra80A0moY+AdZV6eIyGVSGBFxRo4iOLyueAjmSziTUrrPtx60Hm5OQm11LfjWta5OEZFqcFmrWc2cOZPY2Fj8/f2Ji4tjw4YNFz3+tddeo02bNtSpU4eYmBgee+wxcnNzL6tgEbdVVACJ38FXj8I/28DcUbDhLTOI+AVB55vhdx/B4/vgN+9BhzEKIiLiFqp8Z2TevHlMmjSJ2bNnExcXx2uvvcbw4cPZvXs3EREXztL/6KOPmDx5Mu+99x59+/Zlz5493HHHHdhsNl555ZVqeREiLqswHw6sMueA7FpoLkx3jn+I+e2X9jdC80Hg7WdVlSIiNcpmGIZx6cNKxcXF0bNnT2bMmAGAw+EgJiaGCRMmMHny5AuOf/jhh9m5cyfLly8v2faHP/yBH374gfj4+Eo9Z2ZmJsHBwWRkZBAUpDFxcXEFuZC4whyC2b0Y8jJK9wWEm/0/2t8IsQPAy8e6OkVErlBl/35X6c5Ifn4+GzduZMqUKSXb7HY7Q4cOZd26deWe07dvXz744AM2bNhAr1692L9/P4sWLeL222+v8Hny8vLIy8sr82JEXFp+DuxbZs7/2LME8s+U7qsXac7/aH8jNOkDXprKJSKepUqfeunp6RQVFREZGVlme2RkJLt27Sr3nFtvvZX09HT69++PYRgUFhYyfvx4nnzyyQqfZ9q0aTz33HNVKU3E+eRlwZ6lZiv2vcugIKd0X1Cj0gASEwf2y5q+JSLiFmr8/wVbuXIlf/3rX3nzzTeJi4tj3759PPLII7zwwgs888wz5Z4zZcoUJk2aVPI4MzOTmBitmyEu4shGiH/FDCBFpXf4CGkK7W+A9mOgYTcFEBGRYlUKI+Hh4Xh5eZGamlpme2pqKlFRUeWe88wzz3D77bdzzz33ANCpUyeys7O57777eOqpp7CX84Hs5+eHn58m64mLyTgKy5+HbR+XbgtrYd79aH8jRHcBm826+kREnFSVwoivry/du3dn+fLljBkzBjAnsC5fvpyHH3643HNycnIuCBxeXl4AVHHurIhzys+BtdNhzeulQzFdboG+EyCivQKIiMglVHmYZtKkSYwbN44ePXrQq1cvXnvtNbKzs7nzzjsBGDt2LI0aNWLatGkAjB49mldeeYWrrrqqZJjmmWeeYfTo0SWhRMQlORyQ8Cl8+2fIPGpua9IHhv8VGnWztDQREVdS5TBy8803c/z4cZ599llSUlLo2rUrS5YsKZnUevjw4TJ3Qp5++mlsNhtPP/00R48epUGDBowePZoXX3yx+l6FSG1L+hGWTIajP5mPg5vAsOfN+SC6EyIiUiVV7jNiBfUZEaeRccS8E7L9E/Oxbz0YMAl6PwQ+/paWJiLibGqkz4iIx8rPNueErJkOhWcBG1x1G1z9DASWP3lbREQqR2FE5GIcDtg+37wbkpVsbmvaD66bZn47RkRErpjCiEhFDq8354Uc22w+DmkKw/4C7UZrXoiISDVSGBH5pdOHYdlU+Pl/5mPfQBj4R4gbr3khIiI1QGFE5Jy8MxD/Kqx9o7hzqg26j4MhT0G9C1ekFhGR6qEwIuJwwNaPzO6pZ4q7C8cOMOeFRHWytjYREQ+gMCKe7eAaWDoFkreaj0ObwfAXoc1IzQsREaklCiPimU4dhGXPwo4F5mO/IBj0J+h1H3hrXSQRkdqkMCKeJTcTVv8T1r8JRflgs0P3O8x5IXXDra5ORMQjKYyIZ3AUweYPYMULkH3c3NZ8sLmOTGQHS0sTEfF0CiPi/g6shiVTIHW7+bh+Sxj2IrQernkhIiJOQGFE3NfJ/fDNM7Dra/OxfzAMmgw97wFvX2trExGREgoj4n5yM+D7f8D6WeAoAJsX9LgLBk+BuvWtrk5ERH5BYUTch6MINv0LVrwIOenmthbXmPNCItpaW5uIiFRIYUTcw/6VsORJSPvZfBze2gwhra61tCwREbk0hRFxbScS4ZunYfci87F/CAx50hyW8fKxtDQREakchRFxTWdPw/cvww9zSueF9LoXBj0BAWFWVyciIlWgMCKupagQNr4P3/0Vzp40t7UaBsP+Ag3aWFubiIhcFoURcR37lsPSJ+H4LvNxg7bmOjIth1pbl4iIXBGFEXF+x/eY80L2LjUf1wkz54V0vxO89BYWEXF1+iQX55VzElb9DX58BxyFYPeGXvfDoMehTqjV1YmISDVRGBHnU1QAP71nzgvJPW1uazMSrn0BwltaWpqIiFQ/hRFxLnuXmfNC0veYjyPam/1CWgyxti4REakxCiPiHNJ2wTdPwb5vzccB9eHqp+GqsZoXIiLi5vQpL9bKPgErp5nDMkYR2H2g93gY+Li5sJ2IiLg9hRGxRmG+OTF11UvmwnYAba+Ha5+H+i2srU1ERGqVwojULsOAPUvNIZkT+8xtkZ3gur9Cs4HW1iYiIpZQGJHak7rDnJy6/zvzcd0GcPUzcNXvwe5lbW0iImIZhRGpednp5td0N74PhgO8fKH3gzDgD+AfZHV1IiJiMY8OI19vO8bB9Gxu7xNLcB2t8FrtCvNhwxxY9TLkFc8LaXeDOS8krJm1tYmIiNPw2DBS5DB45Zs97E/PZvaq/dwW14S7+zcjIsjf6tJcn2HA7kVmC/eT+81tUZ3humkQ29/a2kRExOnYDMMwrC7iUjIzMwkODiYjI4OgoOq5rV/kMPh62zFmrUxkV0oWAL7edn7TvTH3D2xO0/p1q+V5PE5KAiydAge+Nx/Xi4RrnoUut2heiIiIh6ns32+PDSPnGIbBil1pvLkykY2HTgFgt8Gozg0ZP6g5HRqq10WlnEmDFX+Bzf8pnhfiB30fhv6PgV+g1dWJiIgFFEYuw48HT/Lmd/v4bvfxkm2D2zTggUEt6NUsDJvNVmPP7bIK82D9LPj+H5Bv3mGiw//B0OcgtKm1tYmIiKUURq7AjmOZzF6VyNfbjuEovjrdm4bywKAWXN02ArtdoQTDgJ1fwbJn4NRBc1vDq2D4NGjax9LSRETEOSiMVIPDJ3KY830in2w8Qn6hA4A2kYGMH9yc0Z0b4u1lr7VanEryVljyJByKNx/Xi4Khf4bON4PdQ6+JiIhcQGGkGqVl5vLemoN8sP4QZ/IKAWgcWof7Bjbntz1i8PfxkImZWamw4nnY/CFggLc/9J0I/R4Bv3pWVyciIk5GYaQGZJwt4IP1h3h/zQHSz+QDUL+uL3f1b8bvezd1314lBbmwfiasfgXyz5jbOt0E10yFkBhraxMREaelMFKDcguK+OSnJOZ8v58jp84CUM/Pm9t6F/cqCXSTXiWGATu+gGXPwunD5rZG3eG6lyCml6WliYiI81MYqQWFRQ6+3pbMrJWJ7E51s14lRzeZ68gcXmc+DmwI1z4HHX+jeSEiIlIpCiO1yOEw+G53+b1KHhjUgvYNna/mCmUmw/LnYetH5mPvOtD/Ueg7AXxdOFyJiEitUxixgGEY/HjwFG+u3MfKX/QqeXBwS3o1C7OwuksoOAtrZ0D8q1CQbW7rfLM5LyS4kbW1iYiIS1IYsdiOY5nMWpXIwvN6lfRoGsoDg81eJU7TQM0wIOEzWDYVMo+Y2xr3NOeFNO5hbW0iIuLSFEacxKET2cz5fj+f/nSE/KLSXiUPDG7B9Z2jre1VcmQjLJkMRzaYj4MaF88L+TU4S1gSERGXpTDiZNIyc3l3zQE+XH+4TK+S+wc256ba7lWScRSWPwfb5pmPfQKg/yRzLRmfOrVXh4iIuDWFESd1rlfJe/EHOJFt9ioJr+fLnf1qoVdJfg6snQ7xr0Gh+ZVkutxqrqobFF1zzysiIh5JYcTJnc0v4pONScxZtZ+jp81gEOjnzW29m3JX/9jq7VXicEDCp/DtnyHzqLmtSR8Y/ldo1K36nkdEROQ8CiMuoqDIwdfbjjFrZSJ7Us3upr7edm7q3pj7B7agSf2AK3uCpA2wZAoc/cl8HNwEhj0P7cdoXoiIiNQohREX43AYrNiVxpsr97Hp8GnA7FVyfeeGPDC4Be2iq/i6TyeZd0ISPjUf+9aDAZOg90Pg4yYdYkVExKkpjLgowzDYcOAks1YllulVMqRNAx4c0pKesZfoVZJ3Bta8bs4NKcwFbHDVbXD1MxAYVbPFi4iInEdhxA38fCyDWSsTWbQ9+dK9ShwO2Pax2T01K9nc1rQfXDcNorvUfvEiIuLxFEbcyMF0s1fJZxtLe5W0jTJ7lYzqFI33kR9g6RQ4ttk8IaQpDPsLtButeSEiImIZhRE3lJaZy7vxB/hg/SGy84tobDvOcwHzuaZojXmAbyAM/CPEjde8EBERsZzCiBvLOHWSvf97nk5JH+BHAQ7Dxhf2oWT0eZxfD+xGkH8N9ioRERGpJIURd+RwmKvpLn8ezqQCkBzak8nZt7Aq05ycGujnze/7NOXOftXcq0RERKSKFEbczcE15joyKdvMx6HNYPiL0GYkBQ6Dr7aavUr2ppX2Kvltj8bcN6AaepWIiIhcBoURd3HyACx7FnZ+aT72C4JBf4Je94G3X5lDHQ6D5cW9Sjaf16tkdJeGjB90Gb1KREREroDCiKvLzYTV/4T1b0JRPtjs0P0OGPIU1A2/6KmGYfDDgZPMWpnIqj2lvUqubhvBA4NbXLpXiYiISDVQGHFVjiLY/AGseAGyi4NE88HmOjKRHar86xKOZjB7VdleJT1jzV4lQ9r8oleJiIhINVIYcUUHvoclT0LqdvNx/ZYw7EVoPfyK+4WYvUoS+Wzj0fJ7lXjZr7R6ERGRMhRGXMmJRHNeyK6vzcf+wTBoMvS8B7x9q/WpUot7lXxY3KsEICasDvcNbMFN3Rvj7+NVrc8nIiKeS2HEFeRmwPcvw/rZ4CgAmxf0uAsGT4G69Wv0qTNyCvj3uoO8v/YgJ7PzAQiv58dd/WP5fe+m6lUiIiJXrLJ/vy/r3vzMmTOJjY3F39+fuLg4NmzYcNHjT58+zUMPPUR0dDR+fn60bt2aRYsWXc5Tu4eiQvjxXZjeDda+YQaRFtfAA2th1D9qPIgABAf4MOGaVqx54mqeu6EDjULqkH4mj78v2U2/aSv425JdHM/Kq/E6REREqnxnZN68eYwdO5bZs2cTFxfHa6+9xieffMLu3buJiIi44Pj8/Hz69etHREQETz75JI0aNeLQoUOEhITQpUvlFnBzqzsjid/B0ichbYf5OLy1OTm11bWWllVQ5LigV4mft53f9ojhvoHNiQlTrxIREamaGhumiYuLo2fPnsyYMQMAh8NBTEwMEyZMYPLkyRccP3v2bF5++WV27dqFj8/l3fp3izCSvg++eRr2LDYf+4fAkCfNYRkv5xkScTgMvt2ZypsrE9mSdBoAL7uN0Z2jGT+4BW2jXPT6i4hIrauRMJKfn09AQACffvopY8aMKdk+btw4Tp8+zYIFCy44Z+TIkYSFhREQEMCCBQto0KABt956K0888QReXpWbLOnSYeTsKVj1MmyYA45CsHubE1MHPQEBztvvwzAM1u8/yaxViXz/i14lDw5uQQ/1KhERkUuo7N9v76r80vT0dIqKioiMjCyzPTIykl27dpV7zv79+1mxYgW33XYbixYtYt++fTz44IMUFBQwderUcs/Jy8sjL690vkJmZmZVynQORYWw8X347q9w9qS5rdVwGPYXaNDa2toqwWaz0adFffq0qE/C0QxmFfcqWbErjRW70ugZG8qDg1syuE0D9SoREZErUqUwcjkcDgcRERG89dZbeHl50b17d44ePcrLL79cYRiZNm0azz33XE2XVnP2fQtLn4LjxQGtQVtzHZmWQ62t6zJ1bBTMzFu7cSA9m7eKe5X8ePAUd879Ub1KRETkilXpr0d4eDheXl6kpqaW2Z6amkpUVFS550RHR9O6desyQzLt2rUjJSWF/Pz8cs+ZMmUKGRkZJT9JSUlVKdM6x/fAhzfBB782g0idMBj5Dxi/xmWDyPmahddl2q86s/qJIdw3sDl1fb3YlZLFIx9v4ep/ruKD9YfILSiyukwREXExVQojvr6+dO/eneXLl5dsczgcLF++nD59+pR7Tr9+/di3bx8Oh6Nk2549e4iOjsbXt/yGXn5+fgQFBZX5cWo5J2HxE/Bmb9j7jTkvpPdDMHET9LoXvGr8BlStigzy58mR7Vg7+Rr+cG1rwur6cvhkDk9/kUD/v33HrJWJZOUWWF2miIi4iMv6au+4ceOYM2cOvXr14rXXXmP+/Pns2rWLyMhIxo4dS6NGjZg2bRoASUlJdOjQgXHjxjFhwgT27t3LXXfdxcSJE3nqqacq9ZxOO4G1qAB+es+cF5J72tzWZiRc+wKEt7S0tNqUk1/I/B+TeHv1AY6ePgtAoL83t/duyp39mtEg0O8Sv0FERNxRjUxgBbj55ps5fvw4zz77LCkpKXTt2pUlS5aUTGo9fPgwdnvpDZeYmBiWLl3KY489RufOnWnUqBGPPPIITzzxxGW8LCdhGLB3GXzzFKTvMbdFtDf7hbQYYm1tFgjw9eaOfs24rXdTvtxyjFmrEtmXdoY3VybybvwB9SoREZGLUjv4qkrbaU5OTSweqgqoD1c/DVeNdbvhmMulXiUiIgJam6b6ZZ+AldPMYRmjCOw+0Hs8DHzcXNhOLnCuV8mbK/exem96yfZr2kbw4JAWdG+qXiUiIu5MYaS6FObDj2/Dqr+ZC9sBtL0ern0e6reo3Vpc2PYjGcxelciihGTOveN6xYbxwJAWDG6tXiUiIu5IYeRKGQbsWWIOyZxMNLdFdoLr/grNBtZODW5o//EzvPX9fj7bdISCIvOt1y46iAcGt2Bkxyj1KhERcSMKI1ci9WdzMbv9K83HdRvA1c/AVb8He+Va2MvFpWTk8m78fj784TA5+WZvkiZhAdw/qDm/7tYYfx9dZxERV6cwcjmy0+G7F2HjXDAc4OULvR+EAX8Af026rAmnc/L597pDvL/mAKdyzN4kDQL9uLt/M26La0Kgv/MsIigiIlWjMFIVhXnwwxz4/mXIK14Hp90N5ryQsGbV/3xygZz8Qub9mMTb3+/nWEYuYPYqGdvH7FUSXk+9SkREXI3CSGUYBuxaCN88DacOmNuiOsN10yC2f/U9j1RafqGDL7ceY3ZxrxIAP287N/eM4d4B6lUiIuJKFEYupSAXProJDnxvPq4XCdc8C11u0bwQJ+BwGCwr7lWy9bxeJTd0acj4QS1oExVobYEiInJJNdaB1W34+JsNy7z8oO/D0P8x8NMfOGdht9sY3iGKYe0jWbf/BLNWJrJ6bzqfbz7K55uPMrRdBA8MVq8SERF34Ll3RgAyjoKjEEKbVt/vlBqz/UgGs1btY3FCSmmvkmZhPDBYvUpERJyRhmnEbe0/foY5q/bzv80X9ioZ1SkaL7tCiYiIM1AYEbeXkpHLO6v389GG0l4lTesHcP/AFvyqWyP1KhERsZjCiHiM0zn5/GvtIeauLdur5J7+zbhVvUpERCyjMCIeJye/kI83JPH26v0kF/cqCfL3ZmyfWO7oF6teJSIitUxhRDxWfqGDBVuOMntVIonHswH1KhERsYLCiHg8h8Pgmx2pzFq5j61HzBWX1atERKT2KIyIFDMMg3WJJ3hzZSLx+9JLtpu9SlrSvWmohdWJiLgvhRGRcmw7cppZKxNZ8nNpr5K44l4lg9SrRESkWimMiFxE4vEzvPWLXiXti3uVjFSvEhGRaqEwIlIJyRlneWf1Af5bTq+SX3dvhJ+3epWIiFwuhRGRKjiVnc+/1h1k7tqDnC7uVRIR6Mfd6lUiInLZFEZELkNOfiH/3ZDEO+X0KrmzXyz11atERKTSFEZErkB+oYMvinuV7C/uVeLvY+fmHjHcO7A5jUPVq0RE5FIURkSqgdmrJIU3Vyay7bxeJTd2acj4wS1oHaleJSIiFVEYEalGhmGwNvEEsy7oVRLJg0Na0K2JepWIiPySwohIDdmadJrZqy7sVfLgkJYMbBWuXiUiIsUURkRq2L60M7z1fSKfbz5a0qukQ0OzV8mIjupVIiKiMCJSS46dPsu78Qf46IfDnC0we5XE1g9g6ugODGkbYXF1IiLWURgRqWXl9Sq5f2Bz/ji8DT5edourExGpfZX9+61PSJFqElrXl0eHtmbNE1dzR99YAOZ8v5+b56zj6Omz1hYnIuLEFEZEqlldP2/+fEMHZv++G4H+3mw6fJqRr6/m2x2pVpcmIuKUFEZEash1HaNZNHEAXRoHk3G2gHv+/RN/+XoH+YUOq0sTEXEqCiMiNSgmLIBPxvflrn7NAHgn/gC/nbOOpJM5FlcmIuI8FEZEapivt51nR7fnrdu7E+TvzZak04yavpqlP6dYXZqIiFNQGBGpJcM6RLFw4gC6xoSQmVvI/f/ZyHNf/axhGxHxeAojIrUoJiyA+ff34d4B5rDN+2sOctPstRq2ERGPpjAiUst8ve08Nao974ztQUiAD1uPZDBy+mqWJCRbXZqIiCUURkQsMrR9JAsnDqBbkxCycgsZ/8Empi5IIK+wyOrSRERqlcKIiIUahdRh3v19uH9QcwD+te4Qv5m1jkMnsi2uTESk9iiMiFjMx8vOlBHteP+OnoQG+LD9aAbXT49n4TYN24iIZ1AYEXESQ9pGsOiRAfRoGkpWXiEPfbSJZ75IILdAwzYi4t4URkScSHRwHT6+rzcPDm4BwH/WH+JXb67lQLqGbUTEfSmMiDgZby87f7quLXPv7ElYXV92JGdy/fTVfLn1mNWliYjUCIURESc1uE0EiyYOoFezMLLzi5j43808+fl2DduIiNtRGBFxYlHB/nx0TxwTrm6JzQYf/XCYMTPXkHj8jNWliYhUG4URESfn7WXnD8Pa8O+7elG/ri+7UrIY/UY8X2w+anVpIiLVQmFExEUMaNWAxY8MoHfzMHLyi3h03hYmf7aNs/kathER16YwIuJCIoL8+fCe3jxyTStsNvj4xyTGzFzDvjQN24iI61IYEXExXnYbj13bmg/ujiO8nh+7U81hm882HrG6NBGRy6IwIuKi+rUMZ9Ej/enXsj5nC4r4wydbefyTreTkF1pdmohIlSiMiLiwiEB//n1XHJOubY3dBp9sPMKNM9awNzXL6tJERCpNYUTExXnZbUy8phUf3tObBoF+7E07w+gZ8XzyU5LVpYmIVIrCiIib6NOiPosfGcCAVuHkFjh4/NNtTJq/RcM2IuL0FEZE3Eh4PT/+dWcvHh/eBrsN/rfpKKPfiGd3ioZtRMR5KYyIuBm73cZDQ1ry33t7ExnkR+LxbG6YEc+8Hw9jGIbV5YmIXEBhRMRNxTWvz6KJAxjUugF5hQ6e+Gw7j83bQnaehm1ExLkojIi4sfr1/Hj/jp48cV1bvOw2vthyjNFvxLMzOdPq0kRESiiMiLg5u93GA4Nb8PF9vYkO9md/ejY3zlzDRz9o2EZEnIPCiIiH6BkbxsKJAxjSpgH5hQ6e/Hw7Ez/eQlZugdWliYiHUxgR8SBhdX15d1xPpowwh22+2moO2yQczbC6NBHxYAojIh7Gbrdx/6AWzL+/Dw2D/Tl4IodfzVrLf9Yf0rCNiFhCYUTEQ3VvGsqiRwYwtF0E+YUOnvkigYf/u5lMDduISC1TGBHxYCEBvrw9tgdPj2qHt93Gwm3JjH4jnu1HNGwjIrXnssLIzJkziY2Nxd/fn7i4ODZs2FCp8z7++GNsNhtjxoy5nKcVkRpgs9m4Z0BzPhnfh0YhdTh0Iodfz1rLv9Ye1LCNiNSKKoeRefPmMWnSJKZOncqmTZvo0qULw4cPJy0t7aLnHTx4kD/+8Y8MGDDgsosVkZpzVZNQFk0cwLXtI8kvcjD1y5958MNNZJzVsI2I1Kwqh5FXXnmFe++9lzvvvJP27dsze/ZsAgICeO+99yo8p6ioiNtuu43nnnuO5s2bX1HBIlJzggN8eOv27jx7fXt8vGwsTkjh+jdWs+3IaatLExE3VqUwkp+fz8aNGxk6dGjpL7DbGTp0KOvWravwvOeff56IiAjuvvvuSj1PXl4emZmZZX5EpHbYbDbu6t+MT8f3pXFoHZJOnuXXs9byXvwBDduISI2oUhhJT0+nqKiIyMjIMtsjIyNJSUkp95z4+Hjeffdd3n777Uo/z7Rp0wgODi75iYmJqUqZIlINusSEsHDiAK7rEEVBkcHzX+/g/v9sJCNHwzYiUr1q9Ns0WVlZ3H777bz99tuEh4dX+rwpU6aQkZFR8pOUlFSDVYpIRYLr+DDr99147oYO+HrZ+WZHKiOnr2ZL0mmrSxMRN+JdlYPDw8Px8vIiNTW1zPbU1FSioqIuOD4xMZGDBw8yevTokm0Oh8N8Ym9vdu/eTYsWLS44z8/PDz8/v6qUJiI1xGazMa5vLN2ahPLQR5s4fDKH38xay+QRbbm7fzNsNpvVJYqIi6vSnRFfX1+6d+/O8uXLS7Y5HA6WL19Onz59Lji+bdu2bN++nS1btpT83HDDDQwZMoQtW7Zo+EXEhXRqHMzXE/szqlM0hQ6Dvyzcyb3//onTOflWlyYiLq5Kd0YAJk2axLhx4+jRowe9evXitddeIzs7mzvvvBOAsWPH0qhRI6ZNm4a/vz8dO3Ysc35ISAjABdtFxPkF+fsw49ar6P1DfV74egff7kxj1PR4pt9yFd2bhlpdnoi4qCqHkZtvvpnjx4/z7LPPkpKSQteuXVmyZEnJpNbDhw9jt6uxq4i7stls3N67KVfFhPDwR5s4eCKHm+es4/Hhbbh3QHPsdg3biEjV2AwX+K5eZmYmwcHBZGRkEBQUZHU5IlIsK7eAJz9P4KutxwC4um0E/7ypC6F1fS2uTEScQWX/fusWhohctkB/H6b/rit//b9O+HrbWbErjZHTV/PTwZNWlyYiLkRhRESuiM1m49a4JnzxYD+ah9clOSOXm99az5sr9+FwOP2NVxFxAgojIlIt2jcM4ssJ/RnTtSFFDoO/L9nNnXN/5MSZPKtLExEnpzAiItWmnp83r97clb/9uhN+3nZW7TnOyOmr2XBAwzYiUjGFERGpVjabjZt7NmHBw/1o0aAuqZl5/O6tdcxYsVfDNiJSLoUREakRbaOC+PLh/vyqWyMcBvzjmz2Me38D6Rq2EZFfUBgRkRpT18+bV37blZd/0xl/Hzur96Yz8vXVrEs8YXVpIuJEFEZEpMbd1COGLx/uT6uIeqRl5XHbO+uZvnwvRRq2EREURkSklrSODGTBw/24qXtjHAa8smwPY9/7geNZGrYR8XQKIyJSawJ8vXn5pi7886Yu1PHxYs2+E4x4fTVr96VbXZqIWEhhRERq3a+7N+arCf1oExlI+pk8bnv3B15dtkfDNiIeSmFERCzRMiKQLx7qx+96xmAY8Pryvfz+nR9Iy8y1ujQRqWUKIyJimTq+Xrz06868dnNXAny9WLf/BCOnr2b13uNWlyYitUhhREQsN+aqRnw1oT9towJJP5PP2Pc28M9vdlNY5LC6NBGpBQojIuIUWjSoxxcP9ePWuCYYBryxYh+3vvMDqRq2EXF7CiMi4jT8fbz46/91YvotV1HX14sNB04y8vXVrNqjYRsRd6YwIiJO54YuDfl64gDaRQdxIjufce9t4O9LdmnYRsRNKYyIiFNqFl6Xzx/sy+97NwHgzZWJ3PL2epIzzlpcmYhUN4UREXFa/j5e/GVMJ2bcehX1/Lz58eApRr6+mu92p1ldmohUI4UREXF613duyNcT+tOxURCncgq48/0fmbZ4JwUathFxCwojIuISYsPr8tkDfRnXpykAc1bt53dvrefoaQ3biLg6hRERcRl+3l48d2NHZt3WjUB/bzYeOsWo6atZvjPV6tJE5AoojIiIyxnRKZqFEwbQuXEwp3MKuPtfP/Hiwh0athFxUQojIuKSmtQP4JPxfbizXywAb68+wG/nrOPIqRxrCxORKlMYERGX5eftxdTRHZhze3eC/L3ZfPg0o6bH883PKVaXJiJVoDAiIi5veIcoFk4cQJeYEDLOFnDffzby/Fc7yC/UsI2IK1AYERG3EBMWwCf39+Ge/s0AeG/NAW6avZakkxq2EXF2CiMi4jZ8ve08fX173h7bg+A6Pmw9ksHI6atZkqBhGxFnpjAiIm7n2vaRLJzYn6uahJCVW8j4Dzby5y9/Jq+wyOrSRKQcCiMi4pYahwYw//4+3D+wOQBz1x7kN7PWcfiEhm1EnI3CiIi4LR8vO1NGtuO9O3oQEuDD9qMZjJq+mkXbk60uTUTOozAiIm7v6raRLJo4gB5NQ8nKK+TBDzfx7IIEcgs0bCPiDBRGRMQjNAypw3/v680Dg1sA8O91h/j1rLUcTM+2uDIRURgREY/h42XnievaMvfOnoTV9eXnY5lc/0Y8X209ZnVpIh5NYUREPM7gNhEsmjiAXrFhnMkrZMJ/N/PU59s1bCNiEYUREfFIUcH+fHRvHA8PaYnNBh/+cJj/e3Mt+4+fsbo0EY+jMCIiHsvby84fh7fhX3f2on5dX3YmZzL6jXgWbDlqdWkiHkVhREQ83sDWDVj0yAB6Nw8jO7+IRz7ewpT/bdOwjUgtURgREQEig/z58J7eTLymFTYb/HdDEmNmrmFfmoZtRGqawoiISDEvu41J17bmP3fFEV7Pj10pWdwwI57PNx+xujQRt6YwIiLyC/1bhbPokf70bVGfnPwiHpu3lT99upWz+Rq2EakJCiMiIuWICPTnP3fH8djQ1thsMP+nI9w4M569qVlWlybidhRGREQq4GW38cjQVnx4TxwNAv3Yk3qGG2as4dONGrYRqU4KIyIil9C3RTiLJg6gf8twzhYU8cdPtvKH+VvJyS+0ujQRt6AwIiJSCQ0C/fjXXb34w7Wtsdvgs01HuGHGGvZo2EbkiimMiIhUkpfdxoRrWvHRvb2JDPJjX9oZbpgRz/wfkzAMw+ryRFyWwoiISBX1bl6fRRMHMLB1A3ILHPzps21Mmr+V7DwN24hcDoUREZHLUL+eH3Pv6Mnjw9vgZbfx+eajjJ4Rz66UTKtLE3E5CiMiIpfJbrfx0JCWfHxfb6KC/Nl/PJsbZ6zhvxsOa9hGpAoURkRErlDP2DAWPTKAIW0akFfoYMr/tvPIx1s4o2EbkUpRGBERqQZhdX15d1xPJo9oi5fdxpdbjzH6jXh2HNOwjcilKIyIiFQTu93G+EEtmH9/bxoG+3MgPZsxb67hg/WHNGwjchEKIyIi1ax70zAWThzANW0jyC908PQXCUz472aycgusLk3EKSmMiIjUgNC6vrwzrgdPjWyHt93G19uSGf1GPAlHM6wuTcTpKIyIiNQQm83GvQObM398HxqF1OHgiRx+9eZa/r3uoIZtRM6jMCIiUsO6NQll4cT+DG0XSX6Rg2cX/MxDH20iU8M2IoDCiIhIrQgJ8OXtsd155vr2+HjZWLQ9heunx7PtyGmrSxOxnMKIiEgtsdls3N2/GZ+O70vj0DocPpnDr2et5f01BzRsIx5NYUREpJZ1iQlh4cQBDO8QSUGRwXNf7WD8BxvJOKthG/FMCiMiIhYIruPD7N9358+j2+PrZWfpz6mMmr6aLUmnrS5NpNYpjIiIWMRms3FHv2Z89kBfmoQFcOTUWW6avZZ34zVsI55FYURExGKdGgfz9cT+jOwURUGRwQtf7+C+/2zkdE6+1aWJ1IrLCiMzZ84kNjYWf39/4uLi2LBhQ4XHvv322wwYMIDQ0FBCQ0MZOnToRY8XEfFEQf4+zLy1Gy/c2AFfLzvLdqQyano8mw6fsro0kRpX5TAyb948Jk2axNSpU9m0aRNdunRh+PDhpKWllXv8ypUrueWWW/juu+9Yt24dMTExDBs2jKNHj15x8SIi7sRms3F7n1j+92BfmtYP4Ojps/x29jre/n6/hm3ErdmMKr7D4+Li6NmzJzNmzADA4XAQExPDhAkTmDx58iXPLyoqIjQ0lBkzZjB27NhKPWdmZibBwcFkZGQQFBRUlXJFRFxSVm4BU/63na+3JQNwTdsI/nFTF0Lr+lpcmUjlVfbvd5XujOTn57Nx40aGDh1a+gvsdoYOHcq6desq9TtycnIoKCggLCyswmPy8vLIzMws8yMi4kkC/X1445arePH/OuLrbWf5rjRGTV/N8p2pFBQ5rC5PpFpVKYykp6dTVFREZGRkme2RkZGkpKRU6nc88cQTNGzYsEyg+aVp06YRHBxc8hMTE1OVMkVE3ILNZuO2uKZ8/mBfmoXX5VhGLnf/6yd6vvgtf/xkKyt2pZJXWGR1mSJXrFa/TfPSSy/x8ccf8/nnn+Pv71/hcVOmTCEjI6PkJykpqRarFBFxLh0aBvPVhP7c2S+W+nV9OZ1TwKcbj3DX3J/o8cK3PPLxZpYkJHM2X8FEXJN3VQ4ODw/Hy8uL1NTUMttTU1OJioq66Ln/+Mc/eOmll/j222/p3LnzRY/18/PDz8+vKqWJiLi1en7eTB3dgadHtefHgydZkpDC4oRkUjPzWLDlGAu2HKOOjxdD2jbguo7RXN02gnp+VfqIF7HMZU1g7dWrF2+88QZgTmBt0qQJDz/8cIUTWP/+97/z4osvsnTpUnr37l3lIjWBVUTkQg6Hweak0yxJSGZxQgpHTp0t2efrbWdgq3Cu6xjNte0iCQ7wsbBS8VSV/ftd5TAyb948xo0bx5w5c+jVqxevvfYa8+fPZ9euXURGRjJ27FgaNWrEtGnTAPjb3/7Gs88+y0cffUS/fv1Kfk+9evWoV69etb4YERFPZRgGCUczWZyQzJKEFPanZ5fs87bb6NsynBEdoxjWPpL69XTnWWpHjYURgBkzZvDyyy+TkpJC165dmT59OnFxcQAMHjyY2NhY5s6dC0BsbCyHDh264HdMnTqVP//5z9X6YkRExAwme1LPsDghmcXbU9idmlWyz26DXs3CGNkpmuEdoogMqnj+nsiVqtEwUtsURkRELt/+42dYnJDCkoQUth/NKNlus0G3JqGM6BjFdR2jaBwaYGGV4o4URkRE5AJJJ3NKJr9uOny6zL7OjYO5rmMUIzpG0yy8rjUFiltRGBERkYtKychl6c9mMNlw4CSO8/4atI0KZETHaEZ0iqJVRD1sNpt1hYrLUhgREZFKSz+Txzc/p7I4IZl1iScoPC+ZNG9QlxHFd0w6NAxSMJFKUxgREZHLcjonn293prF4ezKr96aTf177+ZiwOozoGM11HaPo2jgEu13BRCqmMCIiIlcsK7eAFbvSWJKQwne708gtKA0mUUH+xXNMougRG4aXgon8gsKIiIhUq5z8QlbtPs7ihBRW7ErjTF5hyb7wer4M62AGk97N6+PjVaurjYiTUhgREZEak1tQxJp96SzansK3O1PJOFtQsi8kwIdr20UyolMU/VqG4+ftZWGlYiWFERERqRUFRQ7WJZ5gcUIK3/ycwons/JJ9gX7eXN0ughEdoxnUugF1fBVMPInCiIiI1Loih8GGAydZkpDMkp9TSM3MK9mnhfw8j8KIiIhY6vyF/BZtT+Ho6V8u5NeAER2jGKqF/NyWwoiIiDgNLeTnmRRGRETEKZ1byG/RdjOY/HIhv7hm9RnRKUoL+bkBhREREXEJ5xbyW5yQTMLRzJLtWsjP9SmMiIiIy9FCfu5FYURERFxaSkYuSxKSWZyQwo8HtZCfK1IYERERt3GphfxGFq+Xo4X8nIvCiIiIuKXTOfks25HKkoQULeTn5BRGRETE7Z1byG/x9hRW7tFCfs5GYURERDzKxRfy82NYh0hGdowmrnmYFvKrJQojIiLisXILiojfm87ihBSW7UghM7c0mGghv9qjMCIiIsL5C/kl883PqRcs5HdNuwiu00J+NUJhRERE5Be0kF/tUhgRERG5CHMhv1Ms3p7C4gQt5FcTFEZEREQq6fyF/BYnpHDgFwv59SteyO9aLeRXJQojIiIil8EwDHanZrF4e4oW8rtCCiMiIiLVIPH4mZL1cn65kF/3JqFcp4X8KqQwIiIiUs3OLeS3KCGZzeUs5DeiYzQjOkYRq4X8AIURERGRGpWccZalCSlayO8iFEZERERqyfGsPL7ZYc4xWZt4giIt5AcojIiIiFjiYgv5NQkLKFkvp4sHLOSnMCIiImKxiy3kFx3sz/AO7r2Qn8KIiIiIEzm3kN+ihBRW7EwlO7+oZF94PT+Gd4hkhJst5KcwIiIi4qQ8ZSE/hREREREXkF/oYN3+Eyy5xEJ+g9s0wN/HtYKJwoiIiIiLKSxy8OPBUyxOSGZJQgppWWUX8ru6bQTXdYxiiIss5KcwIiIi4sLcYSE/hRERERE3YRgG249msDjB7GXiKgv5KYyIiIi4oXML+S3ansKShGT2pJ4p2XduIb+RxQv5RVi8kJ/CiIiIiAeozEJ+IzpF0yikTq3XpjAiIiLiYZJO5rA4IZnFCSkXLOTXpXEw19XyQn4KIyIiIh7s3EJ+i4oX8jPKWchvZKcoWkUG1lgNCiMiIiICXHwhvxYN6jKiYzQ394whJiygWp9XYUREREQucCo7n2U7zYX84s9byO/De+Lo1zK8Wp+rsn+/nb9jioiIiFSb0Lq+/LZHDL/tEUNmbgHf7Upj5e7jxDULs6wmhREREREPFeTvw41dG3Fj10aW1uEeywKKiIiIy1IYEREREUspjIiIiIilFEZERETEUgojIiIiYimFEREREbGUwoiIiIhYSmFERERELKUwIiIiIpZSGBERERFLKYyIiIiIpRRGRERExFIKIyIiImIpl1i11zAMADIzMy2uRERERCrr3N/tc3/HK+ISYSQrKwuAmJgYiysRERGRqsrKyiI4OLjC/TbjUnHFCTgcDo4dO0ZgYCA2m63afm9mZiYxMTEkJSURFBRUbb/XHelaVY2uV+XpWlWerlXl6VpVXk1eK8MwyMrKomHDhtjtFc8McYk7I3a7ncaNG9fY7w8KCtKbtZJ0rapG16vydK0qT9eq8nStKq+mrtXF7oicowmsIiIiYimFEREREbGUR4cRPz8/pk6dip+fn9WlOD1dq6rR9ao8XavK07WqPF2rynOGa+USE1hFRETEfXn0nRERERGxnsKIiIiIWEphRERERCylMCIiIiKWcvswMnPmTGJjY/H39ycuLo4NGzZc9PhPPvmEtm3b4u/vT6dOnVi0aFEtVWq9qlyruXPnYrPZyvz4+/vXYrXW+f777xk9ejQNGzbEZrPxxRdfXPKclStX0q1bN/z8/GjZsiVz586t8TqdQVWv1cqVKy94X9lsNlJSUmqnYAtNmzaNnj17EhgYSEREBGPGjGH37t2XPM8TP7Mu51p56mfWrFmz6Ny5c0lDsz59+rB48eKLnmPFe8qtw8i8efOYNGkSU6dOZdOmTXTp0oXhw4eTlpZW7vFr167llltu4e6772bz5s2MGTOGMWPGkJCQUMuV176qXiswu/UlJyeX/Bw6dKgWK7ZOdnY2Xbp0YebMmZU6/sCBA4waNYohQ4awZcsWHn30Ue655x6WLl1aw5Var6rX6pzdu3eXeW9FRETUUIXOY9WqVTz00EOsX7+eZcuWUVBQwLBhw8jOzq7wHE/9zLqcawWe+ZnVuHFjXnrpJTZu3MhPP/3E1VdfzY033sjPP/9c7vGWvacMN9arVy/joYceKnlcVFRkNGzY0Jg2bVq5x//2t781Ro0aVWZbXFyccf/999donc6gqtfq/fffN4KDg2upOucFGJ9//vlFj/nTn/5kdOjQocy2m2++2Rg+fHgNVuZ8KnOtvvvuOwMwTp06VSs1ObO0tDQDMFatWlXhMZ78mXW+ylwrfWaVCg0NNd55551y91n1nnLbOyP5+fls3LiRoUOHlmyz2+0MHTqUdevWlXvOunXryhwPMHz48AqPdxeXc60Azpw5Q9OmTYmJiblo0vZ0nvq+uhJdu3YlOjqaa6+9ljVr1lhdjiUyMjIACAsLq/AYvbdMlblWoM+soqIiPv74Y7Kzs+nTp0+5x1j1nnLbMJKenk5RURGRkZFltkdGRlY4/pySklKl493F5VyrNm3a8N5777FgwQI++OADHA4Hffv25ciRI7VRskup6H2VmZnJ2bNnLarKOUVHRzN79mw+++wzPvvsM2JiYhg8eDCbNm2yurRa5XA4ePTRR+nXrx8dO3as8DhP/cw6X2WvlSd/Zm3fvp169erh5+fH+PHj+fzzz2nfvn25x1r1nnKJVXvF+fTp06dMsu7bty/t2rVjzpw5vPDCCxZWJq6sTZs2tGnTpuRx3759SUxM5NVXX+U///mPhZXVroceeoiEhATi4+OtLsXpVfZaefJnVps2bdiyZQsZGRl8+umnjBs3jlWrVlUYSKzgtndGwsPD8fLyIjU1tcz21NRUoqKiyj0nKiqqSse7i8u5Vr/k4+PDVVddxb59+2qiRJdW0fsqKCiIOnXqWFSV6+jVq5dHva8efvhhvv76a7777jsaN2580WM99TPrnKpcq1/ypM8sX19fWrZsSffu3Zk2bRpdunTh9ddfL/dYq95TbhtGfH196d69O8uXLy/Z5nA4WL58eYVjZX369ClzPMCyZcsqPN5dXM61+qWioiK2b99OdHR0TZXpsjz1fVVdtmzZ4hHvK8MwePjhh/n8889ZsWIFzZo1u+Q5nvreupxr9Uue/JnlcDjIy8srd59l76kanR5rsY8//tjw8/Mz5s6da+zYscO47777jJCQECMlJcUwDMO4/fbbjcmTJ5ccv2bNGsPb29v4xz/+YezcudOYOnWq4ePjY2zfvt2ql1BrqnqtnnvuOWPp0qVGYmKisXHjRuN3v/ud4e/vb/z8889WvYRak5WVZWzevNnYvHmzARivvPKKsXnzZuPQoUOGYRjG5MmTjdtvv73k+P379xsBAQHG448/buzcudOYOXOm4eXlZSxZssSql1BrqnqtXn31VeOLL74w9u7da2zfvt145JFHDLvdbnz77bdWvYRa88ADDxjBwcHGypUrjeTk5JKfnJyckmP0mWW6nGvlqZ9ZkydPNlatWmUcOHDA2LZtmzF58mTDZrMZ33zzjWEYzvOecuswYhiG8cYbbxhNmjQxfH19jV69ehnr168v2Tdo0CBj3LhxZY6fP3++0bp1a8PX19fo0KGDsXDhwlqu2DpVuVaPPvpoybGRkZHGyJEjjU2bNllQde079/XTX/6cuz7jxo0zBg0adME5Xbt2NXx9fY3mzZsb77//fq3XbYWqXqu//e1vRosWLQx/f38jLCzMGDx4sLFixQpriq9l5V0noMx7RZ9Zpsu5Vp76mXXXXXcZTZs2NXx9fY0GDRoY11xzTUkQMQzneU/ZDMMwavbei4iIiEjF3HbOiIiIiLgGhRERERGxlMKIiIiIWEphRERERCylMCIiIiKWUhgRERERSymMiIiIiKUURkRERMRSCiMiIiJiKYURERERsZTCiIiIiFhKYUREREQs9f8IWeQqxUMTNgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(hist3.history['loss'])\n", "plt.plot(hist3.history['accuracy'])" ] }, { "cell_type": "code", "execution_count": 117, "id": "e94caaa5-f907-4bf3-afe9-a45be3bebeef", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "15/15 [==============================] - 2s 152ms/step - loss: 0.6696 - accuracy: 0.6220\n" ] } ], "source": [ "loss, accuracy = model3.evaluate(X_val, y_val)" ] }, { "cell_type": "markdown", "id": "d7a321ac-1bfd-4742-8f43-03ffbf2200ae", "metadata": {}, "source": [ "The increase of the LSTM nodes and the output representation to 200, proved to be a step in the wrong direction, with a 2-3% lower accuracy then model 2. " ] }, { "cell_type": "markdown", "id": "1c8c7755", "metadata": {}, "source": [ "### MODEL 4" ] }, { "cell_type": "markdown", "id": "d765a669", "metadata": {}, "source": [ "* Model's 4 change of model compile modifies the type of optimizer to 'sgd' since adam might have given a high learning rate to the model. Accuracy: 49%. The stochastic gradient descent proved to be not a good fit for our model." ] }, { "cell_type": "code", "execution_count": 73, "id": "38ed8871", "metadata": {}, "outputs": [], "source": [ "model4 = Sequential()\n", "\n", "model4.add(Embedding(total_words, # number of words to process as input\n", " 100, # output representation\n", " input_length=len(padded_sequences[0]))) # total length of each observation\n", "\n", "model4.add(LSTM(100, return_sequences=False))\n", "\n", "model4.add(Dense(1, activation='sigmoid')) \n", "\n", "model4.compile(optimizer='sgd', loss='binary_crossentropy', metrics=['accuracy'])" ] }, { "cell_type": "code", "execution_count": 74, "id": "d97c51d9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"sequential_5\"\n", "_________________________________________________________________\n", " Layer (type) Output Shape Param # \n", "=================================================================\n", " embedding_5 (Embedding) (None, 404, 100) 2093600 \n", " \n", " lstm_5 (LSTM) (None, 100) 80400 \n", " \n", " dense_5 (Dense) (None, 1) 101 \n", " \n", "=================================================================\n", "Total params: 2174101 (8.29 MB)\n", "Trainable params: 2174101 (8.29 MB)\n", "Non-trainable params: 0 (0.00 Byte)\n", "_________________________________________________________________\n" ] } ], "source": [ "model4.summary()" ] }, { "cell_type": "code", "execution_count": 75, "id": "7fba69cf", "metadata": { "id": "7fba69cf" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/5\n", "57/57 [==============================] - 10s 148ms/step - loss: 0.6932 - accuracy: 0.5003 - val_loss: 0.6930 - val_accuracy: 0.4967\n", "Epoch 2/5\n", "57/57 [==============================] - 8s 139ms/step - loss: 0.6932 - accuracy: 0.5019 - val_loss: 0.6930 - val_accuracy: 0.4879\n", "Epoch 3/5\n", "57/57 [==============================] - 8s 137ms/step - loss: 0.6931 - accuracy: 0.5047 - val_loss: 0.6930 - val_accuracy: 0.4901\n", "Epoch 4/5\n", "57/57 [==============================] - 8s 134ms/step - loss: 0.6931 - accuracy: 0.5030 - val_loss: 0.6930 - val_accuracy: 0.4857\n" ] } ], "source": [ "hist4 = model4.fit(X_train, y_train, epochs=10, validation_data = (X_val, y_val), callbacks=[early_stopping])" ] }, { "cell_type": "code", "execution_count": 76, "id": "50cd2cc6-4408-4033-bc1d-60b13e15b535", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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BgAAGIFQAwAAjECoAQAARiDUAAAAIxBqAACAEQg1AADACIQaAABgBEINAAAwAqEGAAAYgVADAACMQKgBAABGINQAAAAjEGoAAIARCDUAAMAIhBoAAGAEQg0AADACoQYAABiBUAMAAIxAqAEAAEboUqhZtGiRBgwYoKSkJPl8Pm3evLnDukuXLpXD4YhZkpKSYuqcuP3oUlpaGq0zYMCANtvvv//+rgwfAAAYqJfdBitWrFAgEFBZWZl8Pp8WLlyo/Px81dTUKD09vd02KSkpqqmpia47HI6Y7Xv37o1Z/8tf/qIpU6Zo3LhxMeX33nuvCgsLo+vJycl2hw8AAAxlO9Q88MADKiwsVEFBgSSprKxMq1evVnl5uebMmdNuG4fDoYyMjA77PHHb888/rxtvvFGXXHJJTHlycnKn/RyvublZzc3N0fVQKBRXOwAAcHaydfmppaVF1dXVysvLO9aB06m8vDxVVVV12O7QoUPq37+/vF6vbr31Vr399tsd1q2vr9fq1as1ZcqUNtvuv/9+XXDBBRo+fLhKS0t1+PDhDvspKSlRampqdPF6vXEeJQAAOBvZCjUHDhxQOByWx+OJKfd4PAoGg+22GTx4sMrLy/X888/rySefVCQS0ahRo7Rnz5526y9btkzJycn61re+FVP+k5/8RMuXL9f69et15513asGCBbr77rs7HGtxcbEaGxujywcffGDnUAEAwFnG9uUnu/x+v/x+f3R91KhRys7O1mOPPab58+e3qV9eXq6JEye2uZk4EAhE/zx06FC5XC7deeedKikpkdvtbtOP2+1utxwAAJjJ1pmatLQ0JSQkqL6+Pqa8vr4+7ntdEhMTNXz4cNXW1rbZ9r//+7+qqanRHXfccdJ+fD6fDh8+rF27dsW1XwAAYDZbocblcik3N1eVlZXRskgkosrKypizMZ0Jh8Patm2bMjMz22x74oknlJubq2HDhp20n61bt8rpdHb4xBUAADi32L78FAgENHnyZI0YMUIjR47UwoUL1dTUFH0aatKkSerXr59KSkokHXkM+9prr9Vll12mhoYGlZaWavfu3W3OxoRCIT3zzDP67W9/22afVVVV2rRpk2688UYlJyerqqpKs2bN0u23364+ffp05bgBAIBhbIea8ePHa//+/Zo7d66CwaBycnJUUVERvXm4rq5OTuexE0CffPKJCgsLFQwG1adPH+Xm5mrjxo268sorY/pdvny5LMvSbbfd1mafbrdby5cv1y9+8Qs1Nzdr4MCBmjVrVsx9NgAA4NzmsCzL6ulBnA6hUEipqalqbGxUSkpKTw8HAADEwc7nN7/9BAAAjECoAQAARiDUAAAAIxBqAACAEQg1AADACIQaAABgBEINAAAwAqEGAAAYgVADAACMQKgBAABGINQAAAAjEGoAAIARCDUAAMAIhBoAAGAEQg0AADACoQYAABiBUAMAAIxAqAEAAEYg1AAAACMQagAAgBEINQAAwAiEGgAAYARCDQAAMAKhBgAAGIFQAwAAjECoAQAARiDUAAAAIxBqAACAEQg1AADACIQaAABgBEINAAAwAqEGAAAYoUuhZtGiRRowYICSkpLk8/m0efPmDusuXbpUDocjZklKSoqp84Mf/KBNnZtvvjmmzsGDBzVx4kSlpKSod+/emjJlig4dOtSV4QMAAAP1sttgxYoVCgQCKisrk8/n08KFC5Wfn6+amhqlp6e32yYlJUU1NTXRdYfD0abOzTffrCVLlkTX3W53zPaJEydq7969Wrt2rVpbW1VQUKCpU6fq6aeftnsIAADAQLZDzQMPPKDCwkIVFBRIksrKyrR69WqVl5drzpw57bZxOBzKyMjotF+3291hne3bt6uiokKvv/66RowYIUl6+OGHdcstt+g3v/mNsrKy7B4GAAAwjK3LTy0tLaqurlZeXt6xDpxO5eXlqaqqqsN2hw4dUv/+/eX1enXrrbfq7bffblPn5ZdfVnp6ugYPHqxp06bp448/jm6rqqpS7969o4FGkvLy8uR0OrVp06Z299nc3KxQKBSzAAAAc9kKNQcOHFA4HJbH44kp93g8CgaD7bYZPHiwysvL9fzzz+vJJ59UJBLRqFGjtGfPnmidm2++Wf/5n/+pyspK/epXv9KGDRv09a9/XeFwWJIUDAbbXNrq1auX+vbt2+F+S0pKlJqaGl28Xq+dQwUAAGcZ25ef7PL7/fL7/dH1UaNGKTs7W4899pjmz58vSZowYUJ0+9VXX62hQ4fq0ksv1csvv6wxY8Z0ab/FxcUKBALR9VAoRLABAMBgts7UpKWlKSEhQfX19THl9fX1J71n5qjExEQNHz5ctbW1Hda55JJLlJaWFq2TkZGhffv2xdQ5fPiwDh482OF+3W63UlJSYhYAAGAuW6HG5XIpNzdXlZWV0bJIJKLKysqYszGdCYfD2rZtmzIzMzuss2fPHn388cfROn6/Xw0NDaquro7WWbdunSKRiHw+n51DAAAAhrL9PTWBQECLFy/WsmXLtH37dk2bNk1NTU3Rp6EmTZqk4uLiaP17771Xf/3rX/Xee+9py5Ytuv3227V7927dcccdko7cRPyzn/1Mr732mnbt2qXKykrdeuutuuyyy5Sfny9Jys7O1s0336zCwkJt3rxZr776qqZPn64JEybw5BMAAJDUhXtqxo8fr/3792vu3LkKBoPKyclRRUVF9Obhuro6OZ3HstInn3yiwsJCBYNB9enTR7m5udq4caOuvPJKSVJCQoLefPNNLVu2TA0NDcrKytLXvvY1zZ8/P+a7ap566ilNnz5dY8aMkdPp1Lhx4/TQQw990eMHAACGcFiWZfX0IE6HUCik1NRUNTY2cn8NAABnCTuf3/z2EwAAMAKhBgAAGIFQAwAAjECoAQAARiDUAAAAIxBqAACAEQg1AADACIQaAABgBEINAAAwAqEGAAAYgVADAACMQKgBAABGINQAAAAjEGoAAIARCDUAAMAIhBoAAGAEQg0AADACoQYAABiBUAMAAIxAqAEAAEYg1AAAACMQagAAgBEINQAAwAiEGgAAYARCDQAAMAKhBgAAGIFQAwAAjECoAQAARiDUAAAAIxBqAACAEQg1AADACIQaAABgBEINAAAwQpdCzaJFizRgwAAlJSXJ5/Np8+bNHdZdunSpHA5HzJKUlBTd3traqtmzZ+vqq6/Wl770JWVlZWnSpEn66KOPYvoZMGBAm37uv//+rgwfAAAYyHaoWbFihQKBgObNm6ctW7Zo2LBhys/P1759+zpsk5KSor1790aX3bt3R7d99tln2rJli+655x5t2bJFzz77rGpqavSv//qvbfq59957Y/q566677A4fAAAYqpfdBg888IAKCwtVUFAgSSorK9Pq1atVXl6uOXPmtNvG4XAoIyOj3W2pqalau3ZtTNkjjzyikSNHqq6uThdffHG0PDk5ucN+TtTc3Kzm5uboeigUiqsdAAA4O9k6U9PS0qLq6mrl5eUd68DpVF5enqqqqjpsd+jQIfXv319er1e33nqr3n777U7309jYKIfDod69e8eU33///brgggs0fPhwlZaW6vDhwx32UVJSotTU1Oji9XrjO0gAAHBWshVqDhw4oHA4LI/HE1Pu8XgUDAbbbTN48GCVl5fr+eef15NPPqlIJKJRo0Zpz5497db//PPPNXv2bN12221KSUmJlv/kJz/R8uXLtX79et15551asGCB7r777g7HWlxcrMbGxujywQcf2DlUAABwlrF9+ckuv98vv98fXR81apSys7P12GOPaf78+TF1W1tb9d3vfleWZenRRx+N2RYIBKJ/Hjp0qFwul+68806VlJTI7Xa32a/b7W63HAAAmMnWmZq0tDQlJCSovr4+pry+vj7ue10SExM1fPhw1dbWxpQfDTS7d+/W2rVrY87StMfn8+nw4cPatWuXnUMAAACGshVqXC6XcnNzVVlZGS2LRCKqrKyMORvTmXA4rG3btikzMzNadjTQ/O1vf9NLL72kCy644KT9bN26VU6nU+np6XYOAQAAGMr25adAIKDJkydrxIgRGjlypBYuXKimpqbo01CTJk1Sv379VFJSIunIY9jXXnutLrvsMjU0NKi0tFS7d+/WHXfcIelIoPn2t7+tLVu26M9//rPC4XD0/py+ffvK5XKpqqpKmzZt0o033qjk5GRVVVVp1qxZuv3229WnT59TNRcAAOAsZjvUjB8/Xvv379fcuXMVDAaVk5OjioqK6M3DdXV1cjqPnQD65JNPVFhYqGAwqD59+ig3N1cbN27UlVdeKUn68MMPtWrVKklSTk5OzL7Wr1+vG264QW63W8uXL9cvfvELNTc3a+DAgZo1a1bMfTYAAODc5rAsy+rpQZwOoVBIqampamxsPOn9OgAA4Mxg5/Ob334CAABGINQAAAAjEGoAAIARCDUAAMAIhBoAAGAEQg0AADACoQYAABiBUAMAAIxAqAEAAEYg1AAAACMQagAAgBEINQAAwAiEGgAAYARCDQAAMAKhBgAAGIFQAwAAjECoAQAARiDUAAAAIxBqAACAEQg1AADACIQaAABgBEINAAAwAqEGAAAYgVADAACMQKgBAABGINQAAAAj9OrpAQAAukG4VTr8uXS4Ofa/rZ9LkVbJ2evYkpB43H8T2193OHr6iICTItQAQHewLCnccixItBcwDp9Y/o8/t/69nbrN0uEOyturb4VP7fE4nB0Enl7HlSdKzoQOtp0YmhI62darg/7s7Luzur2O1IVxCDUAzBWJnBAcbISCNvVPONsRT0g5UyS4pF5JUi/3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+tGPfqTnnntOV155Zbt1e+p11atbewdOwu/3xyT9UaNGKTs7W4899pjmz5/fgyPD2Wzw4MEaPHhwdH3UqFHauXOnHnzwQf3Xf/1XD47s9CkqKtJbb72lV155paeHclaId77O5feswYMHa+vWrWpsbNTKlSs1efJkbdiwocNg0xM4U3MSaWlpSkhIUH19fUx5fX29MjIy2m2TkZFhq74pujJXJ0pMTNTw4cNVW1vbHUM8q3X0ukpJSdE//dM/9dCozh4jR448Z15X06dP15///GetX79eF110Uad1z9X3q+PZma8TnUvvWS6XS5dddplyc3NVUlKiYcOG6Xe/+127dXvqdUWoOQmXy6Xc3FxVVlZGyyKRiCorKzu8luj3+2PqS9LatWs7rG+KrszVicLhsLZt26bMzMzuGuZZ61x9XZ0qW7duNf51ZVmWpk+frueee07r1q3TwIEDT9rmXH5ddWW+TnQuv2dFIhE1Nze3u63HXlfdehuyIZYvX2653W5r6dKl1jvvvGNNnTrV6t27txUMBi3Lsqzvf//71pw5c6L1X331VatXr17Wb37zG2v79u3WvHnzrMTERGvbtm09dQinjd25+uUvf2m9+OKL1s6dO63q6mprwoQJVlJSkvX222/31CGcNp9++qn1xhtvWG+88YYlyXrggQesN954w9q9e7dlWZY1Z84c6/vf/360/nvvvWedd9551s9+9jNr+/bt1qJFi6yEhASroqKipw7htLE7Vw8++KD1pz/9yfrb3/5mbdu2zZoxY4bldDqtl156qacO4bSYNm2alZqaar388svW3r17o8tnn30WrcP71TFdma9z9T1rzpw51oYNG6z333/fevPNN605c+ZYDofD+utf/2pZ1pnzuiLUxOnhhx+2Lr74YsvlclkjR460Xnvttei2r3zlK9bkyZNj6v/hD3+wBg0aZLlcLuuqq66yVq9efZpH3HPszNXMmTOjdT0ej3XLLbdYW7Zs6YFRn35HHzs+cTk6P5MnT7a+8pWvtGmTk5NjuVwu65JLLrGWLFly2sfdE+zO1a9+9Svr0ksvtZKSkqy+fftaN9xwg7Vu3bqeGfxp1N4cSYp5nfB+dUxX5utcfc/64Q9/aPXv399yuVzWhRdeaI0ZMyYaaCzrzHldOSzLsrr3XBAAAED3454aAABgBEINAAAwAqEGAAAYgVADAACMQKgBAABGINQAAAAjEGoAAIARCDUAAMAIhBoAAGAEQg0AADACoQYAABjh/wF4Ymth5iUlKQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(hist4.history['loss'])\n", "plt.plot(hist4.history['accuracy'])" ] }, { "cell_type": "code", "execution_count": 118, "id": "d00f224d-205d-4f66-a2e7-27d82a0a9748", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "15/15 [==============================] - 1s 72ms/step - loss: 0.6930 - accuracy: 0.4967\n" ] } ], "source": [ "loss, accuracy = model4.evaluate(X_val, y_val)" ] }, { "cell_type": "markdown", "id": "fcf52a58-f735-4808-887c-09cad201429e", "metadata": {}, "source": [ "### MODEL 5 (Top Performer)" ] }, { "cell_type": "markdown", "id": "a90301e0", "metadata": {}, "source": [ " * Model 5, deemed to as the Steroid Model, is significantly the best model with a validation `accuracy of 71.9%`. This model is very particular due to its transfer of output dimensions that are back checked from interaction between multiple layers in the model. There are 2 bidirectoinal layers that is filtered through a dropout layer and returned for further refinement. Overall, the data outputs traverse the dropout layer 3 times, which give room to find the keywords perhaps more efficiently than other models.\n", " * Different values of the output representation, LSTM layer nodes, learning rates and dropout values have been tested, using different optimizers. Adamax with the default learning rate of 0.001, has been found the best performing.\n", " * 100 in the LSTM layer has been found to be the most efficent.\n", " * This method also dramatically overfits reaching the train accuracy of 90 at 4th or 5th epoch, but has been found to still capture the most information, out of all tested models.\n", " * The dropout rate has been set to 0.2, since more strickter dropout rates did not improve the performance.\n", " * Bidirectional Layers proved to be better performing then one way ones." ] }, { "cell_type": "code", "execution_count": 78, "id": "278f2233-97c0-4479-b19a-5ce5fe5f3398", "metadata": {}, "outputs": [], "source": [ "adamax_opt = Adamax(learning_rate = 0.001)" ] }, { "cell_type": "code", "execution_count": 79, "id": "20646d43-0589-42c9-a753-c66d1252d1a9", "metadata": {}, "outputs": [], "source": [ "model5 = Sequential()\n", "\n", "model5.add(Embedding(total_words, # number of words to process as input\n", " 100, # output representation\n", " mask_zero = True,\n", " input_length=len(padded_sequences[0]))) # total length of each observation\n", "\n", "model5.add(Bidirectional(tf.keras.layers.LSTM(100, return_sequences=True)))\n", "\n", "model5.add(Dropout(0.2)) \n", "\n", "model5.add(Bidirectional(tf.keras.layers.LSTM(100, return_sequences=False)))\n", "#model5.add(LSTM(100, return_sequences=False))\n", "\n", "model5.add(Dropout(0.2)) \n", "\n", "model5.add(Dense(1, activation='sigmoid')) \n", "\n", "model5.compile(optimizer=adamax_opt, loss='binary_crossentropy', metrics=['accuracy'])" ] }, { "cell_type": "code", "execution_count": 80, "id": "3ff04abe-608a-4139-8dc7-c2605feac14b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"sequential_6\"\n", "_________________________________________________________________\n", " Layer (type) Output Shape Param # \n", "=================================================================\n", " embedding_6 (Embedding) (None, 404, 100) 2093600 \n", " \n", " bidirectional (Bidirection (None, 404, 200) 160800 \n", " al) \n", " \n", " dropout_1 (Dropout) (None, 404, 200) 0 \n", " \n", " bidirectional_1 (Bidirecti (None, 200) 240800 \n", " onal) \n", " \n", " dropout_2 (Dropout) (None, 200) 0 \n", " \n", " dense_6 (Dense) (None, 1) 201 \n", " \n", "=================================================================\n", "Total params: 2495401 (9.52 MB)\n", "Trainable params: 2495401 (9.52 MB)\n", "Non-trainable params: 0 (0.00 Byte)\n", "_________________________________________________________________\n" ] } ], "source": [ "model5.summary()" ] }, { "cell_type": "code", "execution_count": 81, "id": "ac57617c-6963-4d24-8134-b48f7a849880", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/10\n", "57/57 [==============================] - 47s 638ms/step - loss: 0.6855 - accuracy: 0.5394 - val_loss: 0.6210 - val_accuracy: 0.6901\n", "Epoch 2/10\n", "57/57 [==============================] - 35s 609ms/step - loss: 0.5429 - accuracy: 0.7386 - val_loss: 0.5775 - val_accuracy: 0.7187\n", "Epoch 3/10\n", "57/57 [==============================] - 35s 611ms/step - loss: 0.3732 - accuracy: 0.8465 - val_loss: 0.7202 - val_accuracy: 0.6967\n", "Epoch 4/10\n", "57/57 [==============================] - 34s 592ms/step - loss: 0.1863 - accuracy: 0.9329 - val_loss: 0.7666 - val_accuracy: 0.6571\n", "Epoch 5/10\n", "57/57 [==============================] - 33s 574ms/step - loss: 0.0759 - accuracy: 0.9758 - val_loss: 1.0978 - val_accuracy: 0.6615\n" ] } ], "source": [ "hist5 = model5.fit(X_train, y_train, epochs=10, validation_data = (X_val, y_val), callbacks=[early_stopping])" ] }, { "cell_type": "code", "execution_count": 82, "id": "2baeb4c7-428f-4c70-8130-cd73eb71441f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 82, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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UaNG0bdvX5YuXcpzzz1nYWVSF71796Z3795V26NGjeLw4cO8+uqr/Otf/7KwsiubO3cu3333HVu3brW6lCZR1+tzx7/B3r17k5SURF5eHh988AGzZ89m8+bNl/zCdjf1uT53+/zS09N55JFH2LBhg0tPtPXYMNKxY0e8vLzIysqqsT8rK4uwsLBazwkLC6vX8VZryDVeyMfHhyFDhpCcnNwUJTa7S32GgYGBtGrVyqKqmtaIESNc/gv+oYce4uOPP2bLli1ERkZe9lh3+zuE+l3fhdzhb9DX15cePXoAMHToUHbs2MFf/vIXli5detGx7vj51ef6LuTqn9/OnTvJzs4mNja2ap/D4WDLli0sWrSI0tJSvLy8apxjxWfosbdpfH19GTp0KPHx8VX7nE4n8fHxl7wXOHLkyBrHA2zYsOGy9w6t1JBrvJDD4WDPnj107ty5qcpsVu72GTaGpKQkl/38DMPgoYceYuXKlXz++ed069btiue402fYkOu7kDv+DTqdTkpLS2t9zZ0+v0u53PVdyNU/vxtvvJE9e/aQlJRU9TNs2DB++tOfkpSUdFEQAYs+wyabGusC3n33XcPPz89YtmyZsW/fPuNnP/uZ0a5dOyMzM9MwDMO46667jPnz51cd/+WXXxre3t7GSy+9ZOzfv9949tlnDR8fH2PPnj1WXcIV1fcaf//73xvr1q0zDh8+bOzcudP48Y9/bPj7+xt79+616hIuq6CgwNi1a5exa9cuAzBeeeUVY9euXcaRI0cMwzCM+fPnG3fddVfV8SkpKUbr1q2NX//618b+/fuNxYsXG15eXsbatWutuoTLqu/1vfrqq8aqVauMQ4cOGXv27DEeeeQRw263G5999plVl3BZDz74oBEUFGRs2rTJOHHiRNVPUVFR1THu/HfYkOtzt7/B+fPnG5s3bzZSU1ON3bt3G/PnzzdsNpuxfv16wzDc+/MzjPpfn7t9frW58GkaV/gMPTqMGIZh/PWvfzW6dOli+Pr6GiNGjDC++uqrqtfGjh1rzJ49u8bx7733ntGrVy/D19fX6N+/v7FmzZpmrrj+6nONjz76aNWxoaGhxpQpU4zExEQLqq6bc4+yXvhz7ppmz55tjB079qJzBg8ebPj6+hrdu3c33n777Wavu67qe31/+tOfjJiYGMPf398IDg42xo0bZ3z++efWFF8HtV0bUOMzcee/w4Zcn7v9Dd57771G165dDV9fX6NTp07GjTfeWPVFbRju/fkZRv2vz90+v9pcGEZc4TO0GYZhNN24i4iIiMjleeycEREREXEPCiMiIiJiKYURERERsZTCiIiIiFhKYUREREQspTAiIiIillIYEREREUspjIiIiIilFEZERETEUgojIiIiYimFEREREbGUwoiIiIhY6v8DqGWr5UShpwAAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(hist5.history['loss'])\n", "plt.plot(hist5.history['accuracy'])" ] }, { "cell_type": "code", "execution_count": 119, "id": "5d004f3b-e42c-478f-a440-c4500e03ce01", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "15/15 [==============================] - 3s 206ms/step - loss: 0.5775 - accuracy: 0.7187\n" ] } ], "source": [ "loss, accuracy = model5.evaluate(X_val, y_val)" ] }, { "cell_type": "markdown", "id": "b1f521ed-bd72-48a6-826b-7aa8878b3aef", "metadata": {}, "source": [ "We can see that the loss graph is way more streched out, reducing the previous effects we had using the normal adam optimizer and no dropout. We have less of an overfitting situation. " ] }, { "cell_type": "markdown", "id": "8b222fa6-1e58-4032-a518-f7918a7f982d", "metadata": {}, "source": [ "### MODEL 6" ] }, { "cell_type": "markdown", "id": "c75866f3", "metadata": {}, "source": [ "* Model 6 eplores the modification to improve the hyperparameters of models with output dmension of 50, and and regularized learning rate of adamW optimizer at 0.001.\n", "* Accuracy: 60%\n", "* AdamW is a weight decay technique that penalizes large weigths, in order to prevent the effects of overfitting.\n", "* The 50 nodes in LSTM and output representation have been restored in this case, since they performed the best." ] }, { "cell_type": "code", "execution_count": 86, "id": "99ea7547-edbd-4c32-9f3e-bc26c4c213c4", "metadata": {}, "outputs": [], "source": [ "adamw_optimizer = tfa.optimizers.AdamW(learning_rate=1e-2, weight_decay=1e-4)" ] }, { "cell_type": "code", "execution_count": 87, "id": "c7263348-b682-482e-aac9-e53812a070cc", "metadata": {}, "outputs": [], "source": [ "# We are going to build our model with the Sequential API\n", "model6 = Sequential()\n", "\n", "model6.add(Embedding(total_words, # number of words to process as input\n", " 50, # output representation\n", " input_length=len(padded_sequences[0]))) # total length of each observation\n", "\n", "model6.add(LSTM(50, return_sequences=False))\n", "\n", "model6.add(Dropout(0.2))\n", "\n", "model6.add(Dense(1, activation='sigmoid')) \n", "\n", "model6.compile(optimizer= adamw_optimizer, loss='binary_crossentropy', metrics=['accuracy'])" ] }, { "cell_type": "code", "execution_count": 88, "id": "ab7aa008-9d0a-458c-be27-aef409a2fdf9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"sequential_7\"\n", "_________________________________________________________________\n", " Layer (type) Output Shape Param # \n", "=================================================================\n", " embedding_7 (Embedding) (None, 404, 50) 1046800 \n", " \n", " lstm_8 (LSTM) (None, 50) 20200 \n", " \n", " dropout_3 (Dropout) (None, 50) 0 \n", " \n", " dense_7 (Dense) (None, 1) 51 \n", " \n", "=================================================================\n", "Total params: 1067051 (4.07 MB)\n", "Trainable params: 1067051 (4.07 MB)\n", "Non-trainable params: 0 (0.00 Byte)\n", "_________________________________________________________________\n" ] } ], "source": [ "model6.summary()" ] }, { "cell_type": "code", "execution_count": 89, "id": "8b373df0-6b5a-409c-a7a2-265c5dc23c79", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/10\n", "57/57 [==============================] - 9s 124ms/step - loss: 0.6816 - accuracy: 0.5740 - val_loss: 0.6954 - val_accuracy: 0.6044\n", "Epoch 2/10\n", "57/57 [==============================] - 6s 114ms/step - loss: 0.3534 - accuracy: 0.8558 - val_loss: 0.9911 - val_accuracy: 0.5495\n", "Epoch 3/10\n", "57/57 [==============================] - 7s 115ms/step - loss: 0.1327 - accuracy: 0.9466 - val_loss: 1.2453 - val_accuracy: 0.5758\n", "Epoch 4/10\n", "57/57 [==============================] - 7s 117ms/step - loss: 0.0496 - accuracy: 0.9851 - val_loss: 1.3434 - val_accuracy: 0.5604\n" ] } ], "source": [ "hist6 = model6.fit(X_train, y_train, epochs=10, validation_data = (X_val, y_val), callbacks=[early_stopping])" ] }, { "cell_type": "code", "execution_count": 90, "id": "ecddc65e-96ac-4fed-85e6-d061ffe486a4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 90, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(hist6.history['loss'])\n", "plt.plot(hist6.history['accuracy'])" ] }, { "cell_type": "code", "execution_count": 120, "id": "6dae0a71-8ed3-4136-a030-6f434c8adef8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "15/15 [==============================] - 1s 47ms/step - loss: 0.6954 - accuracy: 0.6044\n" ] } ], "source": [ "loss, accuracy = model6.evaluate(X_val, y_val)" ] }, { "cell_type": "markdown", "id": "1251849b-40b8-4adf-8512-84cfe33a8f09", "metadata": {}, "source": [ "The effects of overfitting are not as well handled as in model 5, as seen in the graph above." ] }, { "cell_type": "markdown", "id": "6805c04a-2abc-4b8f-b73c-af4bbb1d3f72", "metadata": {}, "source": [ "### MODEL 7" ] }, { "cell_type": "markdown", "id": "d362d5f2", "metadata": {}, "source": [ "* This model once again explores the further regularization of the adamax optimizer at 0.001\n", "* Accuracy: 67%\n", "* The thought is simple, we want to see how the Adamax optimizer performs on a simpler model.\n", "* The 100 in LSTM and output representation / embedding layers proved to work better then 50 for this optimizer.\n", "* Adamax is a much less agressive optimizer with adaptive learning rates, an adress made to the flaws of the original Adam optimizer. " ] }, { "cell_type": "code", "execution_count": 92, "id": "be5753f6-c52e-4de6-98b6-9e3228169e5b", "metadata": {}, "outputs": [], "source": [ "adamax_opt = Adamax(learning_rate = 0.001)" ] }, { "cell_type": "code", "execution_count": 93, "id": "cf7ebd27-9ff3-4a27-b5fd-96a33f79208f", "metadata": {}, "outputs": [], "source": [ "# We are going to build our model with the Sequential API\n", "model7 = Sequential()\n", "\n", "model7.add(Embedding(total_words, # number of words to process as input\n", " 100, # output representation\n", " input_length=len(padded_sequences[0]))) # total length of each observation\n", "\n", "model7.add(LSTM(100, return_sequences=False))\n", "#model7.add(Bidirectional(LSTM(100, return_sequences=False)))\n", "\n", "model7.add(Dropout(0.2))\n", "\n", "model7.add(Dense(1, activation='sigmoid')) \n", "\n", "model7.compile(optimizer= adamax_opt, loss='binary_crossentropy', metrics=['accuracy'])" ] }, { "cell_type": "code", "execution_count": 94, "id": "96ec9753-bc8c-4a28-9210-d09f4159c992", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"sequential_8\"\n", "_________________________________________________________________\n", " Layer (type) Output Shape Param # \n", "=================================================================\n", " embedding_8 (Embedding) (None, 404, 100) 2093600 \n", " \n", " lstm_9 (LSTM) (None, 100) 80400 \n", " \n", " dropout_4 (Dropout) (None, 100) 0 \n", " \n", " dense_8 (Dense) (None, 1) 101 \n", " \n", "=================================================================\n", "Total params: 2174101 (8.29 MB)\n", "Trainable params: 2174101 (8.29 MB)\n", "Non-trainable params: 0 (0.00 Byte)\n", "_________________________________________________________________\n" ] } ], "source": [ "model7.summary()" ] }, { "cell_type": "code", "execution_count": 95, "id": "a0a474cc-4b69-4df7-836f-8231259a266d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/50\n", "57/57 [==============================] - 12s 173ms/step - loss: 0.6927 - accuracy: 0.5058 - val_loss: 0.6913 - val_accuracy: 0.5692\n", "Epoch 2/50\n", "57/57 [==============================] - 10s 171ms/step - loss: 0.6547 - accuracy: 0.6979 - val_loss: 0.6336 - val_accuracy: 0.6615\n", "Epoch 3/50\n", "57/57 [==============================] - 10s 178ms/step - loss: 0.5636 - accuracy: 0.7160 - val_loss: 0.6363 - val_accuracy: 0.6703\n", "Epoch 4/50\n", "57/57 [==============================] - 10s 183ms/step - loss: 0.4867 - accuracy: 0.7666 - val_loss: 0.6562 - val_accuracy: 0.6637\n", "Epoch 5/50\n", "57/57 [==============================] - 10s 181ms/step - loss: 0.4207 - accuracy: 0.8162 - val_loss: 0.7302 - val_accuracy: 0.6747\n" ] } ], "source": [ "hist7 = model7.fit(X_train, y_train, epochs=20, validation_data = (X_val, y_val), callbacks=[early_stopping])" ] }, { "cell_type": "code", "execution_count": 96, "id": "b92acd72-bd15-4ab2-9b45-fd26d1e69f58", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 96, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(hist7.history['loss'])\n", "plt.plot(hist7.history['accuracy'])" ] }, { "cell_type": "code", "execution_count": 121, "id": "4b9325fa-0d81-438e-beb8-6cf2df3bfbf7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "15/15 [==============================] - 1s 64ms/step - loss: 0.6336 - accuracy: 0.6615\n" ] } ], "source": [ "loss, accuracy = model7.evaluate(X_val, y_val)" ] }, { "cell_type": "markdown", "id": "2b4d31a1-eff3-4f03-a64b-34abc1cf06e1", "metadata": {}, "source": [ "This model performs slightly better then Adam for this exact configuration." ] }, { "cell_type": "markdown", "id": "da307f59-522c-48a0-9c07-cfbcf532a312", "metadata": {}, "source": [ "### MODEL 8" ] }, { "cell_type": "markdown", "id": "b073333d-9cce-43b6-8857-1c2337c6dce1", "metadata": {}, "source": [ "* In this model we are testing yet another optimizer, this time the Nadam one.\n", "* Nadam is an optimizer combining two different ones the Nesterov Accelerated Gradient (momentum incorporated) and Adam. NAG updates the parameters using a combination of the current gradient and a fraction of the previous update.\n", "* Accuracy: 65.71%" ] }, { "cell_type": "code", "execution_count": 98, "id": "19b03983-4797-42a3-9ace-dd1351b0768f", "metadata": {}, "outputs": [], "source": [ "nadam_opt = Nadam(learning_rate = 0.001)" ] }, { "cell_type": "code", "execution_count": 99, "id": "ed2d7187-12c4-42b5-b2a6-b5c18a96a650", "metadata": {}, "outputs": [], "source": [ "# We are going to build our model with the Sequential API\n", "model8 = Sequential()\n", "\n", "model8.add(Embedding(total_words, # number of words to process as input\n", " 100, # output representation\n", " input_length=len(padded_sequences[0]))) # total length of each observation\n", "\n", "model8.add(LSTM(100, return_sequences=False))\n", "\n", "model8.add(Dropout(0.2))\n", "\n", "model8.add(Dense(1, activation='sigmoid')) \n", "\n", "model8.compile(optimizer= nadam_opt, loss='binary_crossentropy', metrics=['accuracy'])" ] }, { "cell_type": "code", "execution_count": 100, "id": "1530cfa2-dedd-4983-b068-54be6e7e04f0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"sequential_9\"\n", "_________________________________________________________________\n", " Layer (type) Output Shape Param # \n", "=================================================================\n", " embedding_9 (Embedding) (None, 404, 100) 2093600 \n", " \n", " lstm_10 (LSTM) (None, 100) 80400 \n", " \n", " dropout_5 (Dropout) (None, 100) 0 \n", " \n", " dense_9 (Dense) (None, 1) 101 \n", " \n", "=================================================================\n", "Total params: 2174101 (8.29 MB)\n", "Trainable params: 2174101 (8.29 MB)\n", "Non-trainable params: 0 (0.00 Byte)\n", "_________________________________________________________________\n" ] } ], "source": [ "model8.summary()" ] }, { "cell_type": "code", "execution_count": 101, "id": "0ac3e281-fadd-4907-b52d-54c0c1788f01", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/20\n", "57/57 [==============================] - 13s 194ms/step - loss: 0.6985 - accuracy: 0.5515 - val_loss: 0.6736 - val_accuracy: 0.6571\n", "Epoch 2/20\n", "57/57 [==============================] - 10s 176ms/step - loss: 0.5126 - accuracy: 0.7760 - val_loss: 0.6824 - val_accuracy: 0.6352\n", "Epoch 3/20\n", "57/57 [==============================] - 10s 177ms/step - loss: 0.2061 - accuracy: 0.9241 - val_loss: 1.0434 - val_accuracy: 0.6242\n", "Epoch 4/20\n", "57/57 [==============================] - 10s 177ms/step - loss: 0.0726 - accuracy: 0.9774 - val_loss: 1.2087 - val_accuracy: 0.5868\n" ] } ], "source": [ "hist8 = model8.fit(X_train, y_train, epochs=20, validation_data = (X_val, y_val), callbacks=[early_stopping])" ] }, { "cell_type": "code", "execution_count": 102, "id": "74c0b3dd-f79f-4978-96a9-b0538c53a717", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 102, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGdCAYAAADAAnMpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABI90lEQVR4nO3dd3RUdf7/8efMpJNCQnoIhID0EBAh0i0IAqJsUaxgQXAVLPy2wLrKurt+0S3qIrigrrqru4JlFZUmglSjSE/oEDqplCSkZ+b+/riYiAZMMMmdTF6Pc+Z45nPvzbznOs68vPd9P9dmGIaBiIiIiEXsVhcgIiIizZvCiIiIiFhKYUREREQspTAiIiIillIYEREREUspjIiIiIilFEZERETEUgojIiIiYikvqwuoDZfLxYkTJwgKCsJms1ldjoiIiNSCYRgUFhYSGxuL3X7h4x9NIoycOHGC+Ph4q8sQERGRS3D06FFat259weVNIowEBQUB5psJDg62uBoRERGpjYKCAuLj46t+xy+kSYSRb07NBAcHK4yIiIg0MT/UYqEGVhEREbFUncPImjVrGD16NLGxsdhsNj788MMf3GbVqlVcfvnl+Pr60qFDB954441LKFVEREQ8UZ3DSFFREcnJycyZM6dW6x88eJBRo0Zx9dVXs3XrVh599FEmTJjAsmXL6lysiIiIeJ4694yMGDGCESNG1Hr9uXPn0q5dO/72t78B0KVLF9atW8fzzz/P8OHD6/ryIiIi4mEavGckNTWVoUOHnjc2fPhwUlNTL7hNWVkZBQUF5z1ERETEMzV4GMnKyiIqKuq8saioKAoKCigpKalxm5kzZxISElL10BwjIiIinsstr6aZPn06+fn5VY+jR49aXZKIiIg0kAafZyQ6Oprs7OzzxrKzswkODsbf37/GbXx9ffH19W3o0kRERMQNNPiRkX79+rFixYrzxpYvX06/fv0a+qVFRESkCahzGDl79ixbt25l69atgHnp7tatWzly5AhgnmIZN25c1foPPPAAGRkZ/PrXv2b37t289NJLvPPOOzz22GP18w5ERESkSatzGNm4cSO9evWiV69eAEydOpVevXrx5JNPApCZmVkVTADatWvHokWLWL58OcnJyfztb3/j1Vdf1WW9IiIiAoDNMAzD6iJ+SEFBASEhIeTn5+veNCIiIk1EbX+/m8SN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BBOFERERETd2MK+IJemZLEnLIu14ftW43QZ924UxMimG67tFExnsZ2GVP47CiIiISBNx5GQxS9LNHpNtx6qDic0GfdqGMSIpmhHdY4gOaVrBRGFERESkCTp2upglaVksTs9ky5Ez5y3r3TaUkUkxjOgeTWxLf2sKrAOFERERkSbuxJkSlqRnsSQtk42HT5+3rFeblozsHsOIpGhahwZYVOHFKYyIiIh4kKz8UpamZ7I4PYuvD53i27/eya1DGJEUw8juMbRp5T7BRGFERETEQ+UUlLJsRxaL0jLZcPAUrm/9knePC2bkuWCSEN7CuiJRGBEREWkWcgvL+HSnOY9J6oGT5wWTLjHBjEqKZkRSDO0jAhu9NoURERGRZubk2TI+3ZnN4rRMvjhwEue3kknn6CBGdI9hVI9oOkQGNUo9CiMiIiLN2OmicpbvzGZxeibr9uVR+a1gcllkICOSYhiVFEPHqEBsNluD1KAwIiIiIgDkF1ewfJd5xGTtvlwqnNU//YkRLRiVFMMtV8QTH1a/za8KIyIiIvI9BaUVrNiVzaLtWazZl0t5pQuAt+5LYeBl4fX7WrX8/faq11cVERERtxbs581PerXmJ71aU1hawcrdOXy+O4crE8Msq0lhREREpJkK8vPmpp5x3NQzztI67Ja+uoiIiDR7CiMiIiJiKYURERERsZTCiIiIiFhKYUREREQspTAiIiIillIYEREREUspjIiIiIilFEZERETEUgojIiIiYimFEREREbGUwoiIiIhYSmFERERELNUk7tprGAYABQUFFlciIiIitfXN7/Y3v+MX0iTCSGFhIQDx8fEWVyIiIiJ1VVhYSEhIyAWX24wfiituwOVyceLECYKCgrDZbPX2dwsKCoiPj+fo0aMEBwfX29/1RNpXdaP9VXvaV7WnfVV72le115D7yjAMCgsLiY2NxW6/cGdIkzgyYrfbad26dYP9/eDgYH1Ya0n7qm60v2pP+6r2tK9qT/uq9hpqX13siMg31MAqIiIillIYEREREUs16zDi6+vLjBkz8PX1tboUt6d9VTfaX7WnfVV72le1p31Ve+6wr5pEA6uIiIh4rmZ9ZERERESspzAiIiIillIYEREREUspjIiIiIilPD6MzJkzh4SEBPz8/EhJSWHDhg0XXf/dd9+lc+fO+Pn5kZSUxOLFixupUuvVZV+98cYb2Gy28x5+fn6NWK111qxZw+jRo4mNjcVms/Hhhx/+4DarVq3i8ssvx9fXlw4dOvDGG280eJ3uoK77atWqVd/7XNlsNrKyshqnYAvNnDmTPn36EBQURGRkJGPGjGHPnj0/uF1z/M66lH3VXL+z/vGPf9CjR4+qCc369evHkiVLLrqNFZ8pjw4jCxYsYOrUqcyYMYPNmzeTnJzM8OHDycnJqXH9L774gttuu4377ruPLVu2MGbMGMaMGUN6enojV9746rqvwJytLzMzs+px+PDhRqzYOkVFRSQnJzNnzpxarX/w4EFGjRrF1VdfzdatW3n00UeZMGECy5Yta+BKrVfXffWNPXv2nPfZioyMbKAK3cfq1at56KGH+PLLL1m+fDkVFRUMGzaMoqKiC27TXL+zLmVfQfP8zmrdujXPPPMMmzZtYuPGjVxzzTXcdNNN7Nixo8b1LftMGR6sb9++xkMPPVT13Ol0GrGxscbMmTNrXP+WW24xRo0add5YSkqKMWnSpAat0x3UdV+9/vrrRkhISCNV574A44MPPrjoOr/+9a+Nbt26nTc2duxYY/jw4Q1Ymfupzb76/PPPDcA4ffp0o9TkznJycgzAWL169QXXac7fWd9Wm32l76xqoaGhxquvvlrjMqs+Ux57ZKS8vJxNmzYxdOjQqjG73c7QoUNJTU2tcZvU1NTz1gcYPnz4Bdf3FJeyrwDOnj1L27ZtiY+Pv2jSbu6a6+fqx+jZsycxMTFcd911rF+/3upyLJGfnw9AWFjYBdfRZ8tUm30F+s5yOp3Mnz+foqIi+vXrV+M6Vn2mPDaM5OXl4XQ6iYqKOm88Kirqguefs7Ky6rS+p7iUfdWpUydee+01Fi5cyFtvvYXL5aJ///4cO3asMUpuUi70uSooKKCkpMSiqtxTTEwMc+fO5f333+f9998nPj6eq666is2bN1tdWqNyuVw8+uijDBgwgO7du19wveb6nfVttd1Xzfk7Ky0tjcDAQHx9fXnggQf44IMP6Nq1a43rWvWZahJ37RX3069fv/OSdf/+/enSpQvz5s3jj3/8o4WVSVPWqVMnOnXqVPW8f//+HDhwgOeff54333zTwsoa10MPPUR6ejrr1q2zuhS3V9t91Zy/szp16sTWrVvJz8/nvffeY/z48axevfqCgcQKHntkJDw8HIfDQXZ29nnj2dnZREdH17hNdHR0ndb3FJeyr77L29ubXr16sX///oYosUm70OcqODgYf39/i6pqOvr27dusPleTJ0/mk08+4fPPP6d169YXXbe5fmd9oy776rua03eWj48PHTp0oHfv3sycOZPk5GT+/ve/17iuVZ8pjw0jPj4+9O7dmxUrVlSNuVwuVqxYccFzZf369TtvfYDly5dfcH1PcSn76rucTidpaWnExMQ0VJlNVnP9XNWXrVu3NovPlWEYTJ48mQ8++ICVK1fSrl27H9ymuX62LmVffVdz/s5yuVyUlZXVuMyyz1SDtsdabP78+Yavr6/xxhtvGDt37jQmTpxotGzZ0sjKyjIMwzDuuusuY9q0aVXrr1+/3vDy8jL++te/Grt27TJmzJhheHt7G2lpaVa9hUZT13311FNPGcuWLTMOHDhgbNq0ybj11lsNPz8/Y8eOHVa9hUZTWFhobNmyxdiyZYsBGM8995yxZcsW4/Dhw4ZhGMa0adOMu+66q2r9jIwMIyAgwPjVr35l7Nq1y5gzZ47hcDiMpUuXWvUWGk1d99Xzzz9vfPjhh8a+ffuMtLQ045FHHjHsdrvx2WefWfUWGs0vfvELIyQkxFi1apWRmZlZ9SguLq5aR99ZpkvZV831O2vatGnG6tWrjYMHDxrbt283pk2bZthsNuPTTz81DMN9PlMeHUYMwzBefPFFo02bNoaPj4/Rt29f48svv6xaNmTIEGP8+PHnrf/OO+8YHTt2NHx8fIxu3boZixYtauSKrVOXffXoo49WrRsVFWWMHDnS2Lx5swVVN75vLj/97uOb/TN+/HhjyJAh39umZ8+eho+Pj5GYmGi8/vrrjV63Feq6r5599lmjffv2hp+fnxEWFmZcddVVxsqVK60pvpHVtJ+A8z4r+s4yXcq+aq7fWffee6/Rtm1bw8fHx4iIiDCuvfbaqiBiGO7zmbIZhmE07LEXERERkQvz2J4RERERaRoURkRERMRSCiMiIiJiKYURERERsZTCiIiIiFhKYUREREQspTAiIiIillIYEREREUspjIiIiIilFEZERETEUgojIiIiYimFEREREbHU/wfApJ/tDSfUKAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(hist8.history['loss'])\n", "plt.plot(hist8.history['accuracy'])" ] }, { "cell_type": "code", "execution_count": 122, "id": "ca96c236-0eb9-4d8b-b6be-acd41710172e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "15/15 [==============================] - 1s 65ms/step - loss: 0.6736 - accuracy: 0.6571\n" ] } ], "source": [ "loss, accuracy = model8.evaluate(X_val, y_val)" ] }, { "cell_type": "markdown", "id": "17441e14-be4e-4ae8-b74e-986a738b662b", "metadata": {}, "source": [ "Its performance does not stand out from a normal adam optimizer." ] }, { "cell_type": "markdown", "id": "bbd38bd3-1816-4bfd-9971-c2084acbfb78", "metadata": {}, "source": [ "### MODEL 9" ] }, { "cell_type": "markdown", "id": "f8fbeb9a-5d6f-4348-816c-f5b2aab82d7e", "metadata": {}, "source": [ "* In model 9 we try to containing the simplest best performing model with Adamax 0.001 and try to introduce the Bidirectional layer to the model.\n", "* Accuracy: 68%" ] }, { "cell_type": "code", "execution_count": 104, "id": "77c4ad03-e817-4836-abd3-4c8e99982d0d", "metadata": {}, "outputs": [], "source": [ "adamax_opt = Adamax(learning_rate = 0.001)" ] }, { "cell_type": "code", "execution_count": 105, "id": "b2fffec0-09d2-455c-8e65-2252a39bf7de", "metadata": {}, "outputs": [], "source": [ "# We are going to build our model with the Sequential API\n", "model9 = Sequential()\n", "\n", "model9.add(Embedding(total_words, # number of words to process as input\n", " 100, # output representation\n", " input_length=len(padded_sequences[0]))) # total length of each observation\n", "\n", "#model9.add(LSTM(100, return_sequences=False))\n", "model9.add(Bidirectional(LSTM(100, return_sequences=False)))\n", "\n", "model9.add(Dropout(0.2))\n", "\n", "model9.add(Dense(1, activation='sigmoid')) \n", "\n", "model9.compile(optimizer= adamax_opt, loss='binary_crossentropy', metrics=['accuracy'])" ] }, { "cell_type": "code", "execution_count": 106, "id": "51b3556b-c2ac-46e9-ab8d-4076fa560ca2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"sequential_9\"\n", "_________________________________________________________________\n", " Layer (type) Output Shape Param # \n", "=================================================================\n", " embedding_9 (Embedding) (None, 404, 100) 2093600 \n", " \n", " lstm_10 (LSTM) (None, 100) 80400 \n", " \n", " dropout_5 (Dropout) (None, 100) 0 \n", " \n", " dense_9 (Dense) (None, 1) 101 \n", " \n", "=================================================================\n", "Total params: 2174101 (8.29 MB)\n", "Trainable params: 2174101 (8.29 MB)\n", "Non-trainable params: 0 (0.00 Byte)\n", "_________________________________________________________________\n" ] } ], "source": [ "model9.summary()" ] }, { "cell_type": "code", "execution_count": 107, "id": "5a46365d-29e9-4e02-b0de-b9d190c82c67", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/50\n", "57/57 [==============================] - 16s 223ms/step - loss: 0.6931 - accuracy: 0.5146 - val_loss: 0.6911 - val_accuracy: 0.5780\n", "Epoch 2/50\n", "57/57 [==============================] - 12s 208ms/step - loss: 0.6441 - accuracy: 0.6725 - val_loss: 0.6356 - val_accuracy: 0.6835\n", "Epoch 3/50\n", "57/57 [==============================] - 12s 209ms/step - loss: 0.5578 - accuracy: 0.7397 - val_loss: 0.6029 - val_accuracy: 0.6857\n", "Epoch 4/50\n", "57/57 [==============================] - 13s 222ms/step - loss: 0.4707 - accuracy: 0.7942 - val_loss: 0.6156 - val_accuracy: 0.6835\n", "Epoch 5/50\n", "57/57 [==============================] - 12s 220ms/step - loss: 0.3854 - accuracy: 0.8514 - val_loss: 0.7752 - val_accuracy: 0.6659\n", "Epoch 6/50\n", "57/57 [==============================] - 12s 218ms/step - loss: 0.2752 - accuracy: 0.9125 - val_loss: 0.7378 - val_accuracy: 0.6725\n" ] } ], "source": [ "hist9 = model9.fit(X_train, y_train, epochs=20, validation_data = (X_val, y_val), callbacks=[early_stopping])" ] }, { "cell_type": "code", "execution_count": 108, "id": "d3162d4b-d971-4f23-beb9-ebcb1ba2b607", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 108, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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RGFERETqht0OR39w9oAUpDuP+QSV94CMgajhCiCNnMKIiIjUHrsdjm1y9oAUnHAe8wmCLjcZPSBRIxRApILCiIiIXBm7HY5tht2fXySABBoBpNsYiB4Bnj6mlSkNl8KIiIhUn90Ox7c4A0j+cecxn0DofKPRAxJ9rQKI/CKFERERqRqHA46dH0DO25DOOwC63FjeA3KtlmOXalEYERGRS3M44PhWZwDJO+o85t30vB6Q6xRApMYURkREpDKHA45vg92LjZVQ8444j3k3hc43GD0gHa8DryamlSnuQ2FERESMAHJim9EDsntp5QDi5W8EkKtuUwCROqEwIiLSWDkccOLH8lswSyD3vwPIr8oDSLwCiNQphRERkcbE4YD07eU9IEsg97DzmJcfxJwXQLz9zKpSGhmFERERd+dwQPpPzh6Q04ecx7z8IGZUeQAZqQAiplAYERFxRw4HZOwo7wH5vHIA8WziDCCdRoK3v2llioDCiIiI+3A4IGPneQHkoPOYZxOIub48gFyvACINisKIiIgrczggc5czgJxKcx7z9DWCx88BxKepeXWKXIbCiIiIq3E4IHP3eQHkgPOYp69x6+Wq26DTKAUQcQkKIyIiruDnALJniRFATqY6j3n6GrNfrrrNmA2jACIuRmFERKShcjgga48xBXf353Byv/OYh4+zByRmFPgEmFamyJVSGBERaWiy9jpvweSkONs9fM7rARkFvoHm1ShSixRGREQagqy9zh6QnGRnu4d35VswCiDihhRGRETMkrXPOQYke5+z3cPb2AX3qtuMJdl9g0wrUaQ+WGty0fz584mMjMTX15e4uDg2bdp02fMTExPp3LkzTZo0ISIigunTp1NUVFSjgkVEXFp2Mqz5G8y/Bl6NgzWzjSBi9TJ6Pm57A/43Fe77CHqOVRCRRqHaPSOLFi0iISGB119/nbi4OBITExk1ahTJycmEhoZecP4HH3zAjBkzeOuttxg4cCApKSk88MADWCwW5syZUysfQkSkQctOcfaAZO1xtlu9IPra8h6QG6BJM7MqFDGVxeFwOKpzQVxcHP369WPevHkA2O12IiIimDp1KjNmzLjg/ClTprB3716SkpIq2v7nf/6HH374gfXr11fpPfPz8wkKCiIvL4/AQN0vFREXkLPfOQYka7ez3eoF0SPKA8iNCiDi1qr6/V2tnpGSkhK2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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(hist9.history['loss'])\n", "plt.plot(hist9.history['accuracy'])" ] }, { "cell_type": "code", "execution_count": 123, "id": "860bbb10-745f-45b6-862e-a6bbe850443c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "15/15 [==============================] - 1s 87ms/step - loss: 0.6029 - accuracy: 0.6857\n" ] } ], "source": [ "loss, accuracy = model9.evaluate(X_val, y_val)" ] }, { "cell_type": "markdown", "id": "6105aeed-b853-47a3-9857-99142c9bc72b", "metadata": {}, "source": [ "We can see an improvement in the model performance after introducing the Bidirectional Layers." ] }, { "cell_type": "markdown", "id": "f330eb61-22ce-4ac4-b3ba-962a59b53351", "metadata": {}, "source": [ "### MODEL 10 " ] }, { "cell_type": "markdown", "id": "05e4a711-13bd-43ad-9de1-c7ee40f56bda", "metadata": {}, "source": [ "* Here we try a variation of the best model yet with a change in the LSTM bidirectional layers to 50.\n", "* The performace drops slightly, we will remaind with the previous version.\n", "* Accuracy: 68%" ] }, { "cell_type": "code", "execution_count": 134, "id": "a6f401c3-f308-4219-bbe9-36d2cdab426e", "metadata": {}, "outputs": [], "source": [ "adamax_opt = Adamax(learning_rate = 0.001)" ] }, { "cell_type": "code", "execution_count": 135, "id": "ca037ebf-af78-4dc5-9497-227daf0c9c00", "metadata": {}, "outputs": [], "source": [ "model10 = Sequential()\n", "\n", "model10.add(Embedding(total_words, # number of words to process as input\n", " 100, # output representation\n", " mask_zero = True,\n", " input_length=len(padded_sequences[0]))) # total length of each observation\n", "\n", "model10.add(Bidirectional(tf.keras.layers.LSTM(50, return_sequences=True)))\n", "\n", "model10.add(Dropout(0.2)) \n", "\n", "model10.add(Bidirectional(tf.keras.layers.LSTM(50, return_sequences=False)))\n", "#model5.add(LSTM(100, return_sequences=False))\n", "\n", "model10.add(Dropout(0.2)) \n", "\n", "model10.add(Dense(1, activation='sigmoid')) \n", "\n", "model10.compile(optimizer=adamax_opt, loss='binary_crossentropy', metrics=['accuracy'])" ] }, { "cell_type": "code", "execution_count": 136, "id": "222857a2-9cad-4e8f-8c54-5aae530cc241", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"sequential_15\"\n", "_________________________________________________________________\n", " Layer (type) Output Shape Param # \n", "=================================================================\n", " embedding_15 (Embedding) (None, 404, 100) 2093600 \n", " \n", " bidirectional_7 (Bidirecti (None, 404, 100) 60400 \n", " onal) \n", " \n", " dropout_13 (Dropout) (None, 404, 100) 0 \n", " \n", " bidirectional_8 (Bidirecti (None, 100) 60400 \n", " onal) \n", " \n", " dropout_14 (Dropout) (None, 100) 0 \n", " \n", " dense_15 (Dense) (None, 1) 101 \n", " \n", "=================================================================\n", "Total params: 2214501 (8.45 MB)\n", "Trainable params: 2214501 (8.45 MB)\n", "Non-trainable params: 0 (0.00 Byte)\n", "_________________________________________________________________\n" ] } ], "source": [ "model10.summary()" ] }, { "cell_type": "code", "execution_count": 137, "id": "1b9ab75b-1b2f-4307-a480-5914056fd864", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/20\n", "57/57 [==============================] - 41s 490ms/step - loss: 0.6856 - accuracy: 0.6098 - val_loss: 0.6623 - val_accuracy: 0.6659\n", "Epoch 2/20\n", "57/57 [==============================] - 23s 403ms/step - loss: 0.5616 - accuracy: 0.7226 - val_loss: 0.5920 - val_accuracy: 0.6791\n", "Epoch 3/20\n", "57/57 [==============================] - 23s 403ms/step - loss: 0.4203 - accuracy: 0.8123 - val_loss: 0.6416 - val_accuracy: 0.6813\n", "Epoch 4/20\n", "57/57 [==============================] - 23s 402ms/step - loss: 0.2511 - accuracy: 0.9114 - val_loss: 0.7972 - val_accuracy: 0.6440\n", "Epoch 5/20\n", "57/57 [==============================] - 23s 411ms/step - loss: 0.1336 - accuracy: 0.9582 - val_loss: 0.9629 - val_accuracy: 0.6220\n" ] } ], "source": [ "hist10 = model10.fit(X_train, y_train, epochs=20, validation_data = (X_val, y_val), callbacks=[early_stopping])" ] }, { "cell_type": "code", "execution_count": 138, "id": "3b2cc649-d0e0-408d-b594-c030fac2af59", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 138, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(hist10.history['loss'])\n", "plt.plot(hist10.history['accuracy'])" ] }, { "cell_type": "code", "execution_count": 139, "id": "ab2fd31f-b014-4c2a-9243-d45b1b5f8f02", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "15/15 [==============================] - 2s 101ms/step - loss: 0.5920 - accuracy: 0.6791\n" ] } ], "source": [ "loss, accuracy = model10.evaluate(X_val, y_val)" ] }, { "cell_type": "markdown", "id": "9114b6f5-b663-4f07-be6c-c211c7ded06b", "metadata": {}, "source": [ "### MODEL 11" ] }, { "cell_type": "markdown", "id": "e0cdc305-cd75-4df6-8c82-99187fc24210", "metadata": {}, "source": [ "* Another variation of model 5, here we are trying to adress the overfitting problem by reducing the learning rate.\n", "* Accuracy: 0.71%" ] }, { "cell_type": "code", "execution_count": 149, "id": "5c09ba68-550c-4828-b24a-ca98bb36bf74", "metadata": {}, "outputs": [], "source": [ "adamax_opt = Adamax(learning_rate = 0.0001)" ] }, { "cell_type": "code", "execution_count": 150, "id": "1ba03801-df7a-4133-a95e-0b31108a5784", "metadata": {}, "outputs": [], "source": [ "model11 = Sequential()\n", "\n", "model11.add(Embedding(total_words, # number of words to process as input\n", " 100, # output representation\n", " mask_zero = True,\n", " input_length=len(padded_sequences[0]))) # total length of each observation\n", "\n", "model11.add(Bidirectional(tf.keras.layers.LSTM(100, return_sequences=True)))\n", "\n", "model11.add(Dropout(0.2)) \n", "\n", "model11.add(Bidirectional(tf.keras.layers.LSTM(100, return_sequences=False)))\n", "#model11.add(LSTM(100, return_sequences=False))\n", "\n", "model11.add(Dropout(0.2)) \n", "\n", "model11.add(Dense(1, activation='sigmoid')) \n", "\n", "model11.compile(optimizer=adamax_opt, loss='binary_crossentropy', metrics=['accuracy'])" ] }, { "cell_type": "code", "execution_count": 151, "id": "df1c18bc-d115-49ab-9ebb-d168bc7916ca", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"sequential_19\"\n", "_________________________________________________________________\n", " Layer (type) Output Shape Param # \n", "=================================================================\n", " embedding_19 (Embedding) (None, 404, 100) 2093600 \n", " \n", " bidirectional_15 (Bidirect (None, 404, 200) 160800 \n", " ional) \n", " \n", " dropout_21 (Dropout) (None, 404, 200) 0 \n", " \n", " bidirectional_16 (Bidirect (None, 200) 240800 \n", " ional) \n", " \n", " dropout_22 (Dropout) (None, 200) 0 \n", " \n", " dense_19 (Dense) (None, 1) 201 \n", " \n", "=================================================================\n", "Total params: 2495401 (9.52 MB)\n", "Trainable params: 2495401 (9.52 MB)\n", "Non-trainable params: 0 (0.00 Byte)\n", "_________________________________________________________________\n" ] } ], "source": [ "model11.summary()" ] }, { "cell_type": "code", "execution_count": 152, "id": "e874b88e-0c38-459b-8c42-2f10c1717828", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/20\n", "57/57 [==============================] - 50s 659ms/step - loss: 0.6930 - accuracy: 0.5283 - val_loss: 0.6927 - val_accuracy: 0.5319\n", "Epoch 2/20\n", "57/57 [==============================] - 31s 549ms/step - loss: 0.6920 - accuracy: 0.5795 - val_loss: 0.6923 - val_accuracy: 0.5253\n", "Epoch 3/20\n", "57/57 [==============================] - 31s 550ms/step - loss: 0.6907 - accuracy: 0.5894 - val_loss: 0.6914 - val_accuracy: 0.5341\n", "Epoch 4/20\n", "57/57 [==============================] - 31s 547ms/step - loss: 0.6882 - accuracy: 0.5867 - val_loss: 0.6890 - val_accuracy: 0.5714\n", "Epoch 5/20\n", "57/57 [==============================] - 31s 539ms/step - loss: 0.6813 - accuracy: 0.6170 - val_loss: 0.6808 - val_accuracy: 0.5802\n", "Epoch 6/20\n", "57/57 [==============================] - 31s 553ms/step - loss: 0.6519 - accuracy: 0.6714 - val_loss: 0.6339 - val_accuracy: 0.7033\n", "Epoch 7/20\n", "57/57 [==============================] - 31s 553ms/step - loss: 0.5884 - accuracy: 0.7083 - val_loss: 0.6056 - val_accuracy: 0.6791\n", "Epoch 8/20\n", "57/57 [==============================] - 32s 558ms/step - loss: 0.5603 - accuracy: 0.7138 - val_loss: 0.6003 - val_accuracy: 0.7121\n", "Epoch 9/20\n", "57/57 [==============================] - 32s 560ms/step - loss: 0.5395 - accuracy: 0.7331 - val_loss: 0.5960 - val_accuracy: 0.7011\n", "Epoch 10/20\n", "57/57 [==============================] - 33s 572ms/step - loss: 0.5202 - accuracy: 0.7463 - val_loss: 0.5958 - val_accuracy: 0.7121\n", "Epoch 11/20\n", "57/57 [==============================] - 32s 557ms/step - loss: 0.4953 - accuracy: 0.7639 - val_loss: 0.6112 - val_accuracy: 0.7055\n", "Epoch 12/20\n", "57/57 [==============================] - 32s 556ms/step - loss: 0.4686 - accuracy: 0.7931 - val_loss: 0.6228 - val_accuracy: 0.7077\n", "Epoch 13/20\n", "57/57 [==============================] - 33s 574ms/step - loss: 0.4359 - accuracy: 0.8079 - val_loss: 0.6151 - val_accuracy: 0.6857\n" ] } ], "source": [ "hist11 = model11.fit(X_train, y_train, epochs=20, validation_data = (X_val, y_val), callbacks=[early_stopping])" ] }, { "cell_type": "code", "execution_count": 153, "id": "01f02f4c-5383-4e1b-a87a-748ba3c78ab0", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 153, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(hist11.history['loss'])\n", "plt.plot(hist11.history['accuracy'])" ] }, { "cell_type": "code", "execution_count": 154, "id": "47febf06-95ac-4b06-ba56-2ad47ff1a3ab", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "15/15 [==============================] - 2s 156ms/step - loss: 0.5958 - accuracy: 0.7121\n" ] } ], "source": [ "loss, accuracy = model11.evaluate(X_val, y_val)" ] }, { "cell_type": "markdown", "id": "c2a5d3c4-3c49-4be9-8ded-23687e564b2b", "metadata": {}, "source": [ "As we can see with this learning rate we do not achieve better performance then with its default value, also there are many hills sygnifying problems with using this learning rate. The loss function at first sees not much improvement to then dramatically fast decrease. That is not an appriciated effect." ] }, { "cell_type": "markdown", "id": "7dfec583-2f2d-405a-8d7f-c3b79316af76", "metadata": {}, "source": [ "### MODEL 12" ] }, { "cell_type": "markdown", "id": "4e05a9cb-1e97-4acb-91b1-abd3199581f5", "metadata": {}, "source": [ "* For the last model we try different output representation values of 200 and 300, only to see worse performace.\n", "* Accuracy for 300: 67%" ] }, { "cell_type": "code", "execution_count": 161, "id": "ebbb2631-96b3-4dae-a224-98eb30dd7b51", "metadata": {}, "outputs": [], "source": [ "adamax_opt = Adamax(learning_rate = 0.001)" ] }, { "cell_type": "code", "execution_count": 162, "id": "0bd3e79e-d0db-4cea-b558-79d086e6059f", "metadata": {}, "outputs": [], "source": [ "# We are going to build our model with the Sequential API\n", "model12 = Sequential()\n", "\n", "model12.add(Embedding(total_words, # number of words to process as input\n", " 300, # output representation\n", " input_length=len(padded_sequences[0]))) # total length of each observation\n", "\n", "#model12.add(LSTM(100, return_sequences=False))\n", "model12.add(Bidirectional(LSTM(100, return_sequences=False)))\n", "\n", "model12.add(Dropout(0.2))\n", "\n", "model12.add(Dense(1, activation='sigmoid')) \n", "\n", "model12.compile(optimizer= adamax_opt, loss='binary_crossentropy', metrics=['accuracy'])" ] }, { "cell_type": "code", "execution_count": 163, "id": "eb13fc7a-bfaf-4c54-871c-6f2a09a3417b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"sequential_21\"\n", "_________________________________________________________________\n", " Layer (type) Output Shape Param # \n", "=================================================================\n", " embedding_21 (Embedding) (None, 404, 300) 6280800 \n", " \n", " bidirectional_18 (Bidirect (None, 200) 320800 \n", " ional) \n", " \n", " dropout_24 (Dropout) (None, 200) 0 \n", " \n", " dense_21 (Dense) (None, 1) 201 \n", " \n", "=================================================================\n", "Total params: 6601801 (25.18 MB)\n", "Trainable params: 6601801 (25.18 MB)\n", "Non-trainable params: 0 (0.00 Byte)\n", "_________________________________________________________________\n" ] } ], "source": [ "model12.summary()" ] }, { "cell_type": "code", "execution_count": 164, "id": "86555b73-9adc-4e74-a704-9313baa5b438", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/20\n", "57/57 [==============================] - 21s 318ms/step - loss: 0.6926 - accuracy: 0.5388 - val_loss: 0.6801 - val_accuracy: 0.6813\n", "Epoch 2/20\n", "57/57 [==============================] - 17s 295ms/step - loss: 0.6032 - accuracy: 0.7160 - val_loss: 0.5951 - val_accuracy: 0.6791\n", "Epoch 3/20\n", "57/57 [==============================] - 17s 303ms/step - loss: 0.4948 - accuracy: 0.7887 - val_loss: 0.6057 - val_accuracy: 0.6901\n", "Epoch 4/20\n", "57/57 [==============================] - 17s 299ms/step - loss: 0.4176 - accuracy: 0.8459 - val_loss: 0.6326 - val_accuracy: 0.6681\n", "Epoch 5/20\n", "57/57 [==============================] - 17s 303ms/step - loss: 0.2975 - accuracy: 0.8943 - val_loss: 0.6705 - val_accuracy: 0.6879\n" ] } ], "source": [ "hist12 = model12.fit(X_train, y_train, epochs=20, validation_data = (X_val, y_val), callbacks=[early_stopping])" ] }, { "cell_type": "code", "execution_count": 165, "id": "f20409c0-dd4e-4f79-96bb-8378eb3f0424", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 165, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(hist12.history['loss'])\n", "plt.plot(hist12.history['accuracy'])" ] }, { "cell_type": "code", "execution_count": 166, "id": "5322ca98-8d8c-421e-ab81-20888f93c2c3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "15/15 [==============================] - 1s 79ms/step - loss: 0.5951 - accuracy: 0.6791\n" ] } ], "source": [ "loss, accuracy = model12.evaluate(X_val, y_val)" ] }, { "cell_type": "markdown", "id": "955a0345-dc3d-4bde-b50b-bacf387a36e0", "metadata": {}, "source": [ "Link to an excel SpreadSheet containing model performance, also with No 50-50 split and title only. Word2vec proved to work similar, depending on the model, 2-3% better or arpund the same worse, therefore we decided to leave it out and use lemmatization.\n", "\n", "https://docs.google.com/spreadsheets/d/1Vcnnh5MvkoVpfSyF4jWzxz93QvzuRA8cQcuvnS_GXrk/edit#gid=1601168295" ] }, { "cell_type": "markdown", "id": "39fba4b6-2dd2-42b2-b8fe-3766114476d0", "metadata": {}, "source": [ "# Testing Our Best Performing Model" ] }, { "cell_type": "markdown", "id": "7df44021-f863-4676-b120-bf7a4e1f1f68", "metadata": {}, "source": [ "As shown above the 5th model proves to be the best performer, we will now proceed to the testing process, where we first check its performance of the test set to then predict the test results, and create a confusion matrix resembling its predictive performance. The threshold is yet again set to 0.5." ] }, { "cell_type": "code", "execution_count": 167, "id": "aa397c66-19fb-41e7-a5c5-c6f85e5abc57", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "18/18 [==============================] - 3s 153ms/step - loss: 0.5891 - accuracy: 0.6937\n" ] } ], "source": [ "loss, accuracy = model5.evaluate(X_test, y_test)" ] }, { "cell_type": "code", "execution_count": 169, "id": "20890c30-3f0c-473f-b70f-cb3387579fb0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "18/18 [==============================] - 7s 148ms/step\n" ] } ], "source": [ "#Prection and Confusion Matrix\n", "y_pred = model5.predict(X_test)\n", "bin_y_pred = (y_pred > 0.5).astype(int)" ] }, { "cell_type": "code", "execution_count": 170, "id": "39b983f0-3458-41ba-8562-24e78383142d", "metadata": {}, "outputs": [], "source": [ "bin_y_pred = np.squeeze(bin_y_pred)" ] }, { "cell_type": "code", "execution_count": 171, "id": "e4c5d136-3d81-4122-ad79-a2463e629f42", "metadata": {}, "outputs": [], "source": [ "y_true = y_test\n", "y_pred = bin_y_pred" ] }, { "cell_type": "code", "execution_count": 189, "id": "f085f05e-2191-4c79-9453-63d8716a7ca2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Test Set Results:\n", "\n", " Predicted No Predicted Yes \n", "Actual No 194 88 \n", "Actual Yes 86 200 \n", "\n", "Precision: 0.6944\n", "Recall: 0.6993\n", "Accuracy: 0.6937\n" ] } ], "source": [ "cm = confusion_matrix(y_true, y_pred)\n", "\n", "TN, FP, FN, TP = cm.ravel()\n", "\n", "print('Test Set Results:\\n')\n", "\n", "print(f\"{'':<20}{'Predicted No':<20}{'Predicted Yes':<20}\")\n", "print(f\"{'Actual No':<20}{TN:<20}{FP:<20}\")\n", "print(f\"{'Actual Yes':<20}{FN:<20}{TP:<20}\")\n", "\n", "print(\"\\nPrecision:\", round(TP/(TP + FP), 4))\n", "print(\"Recall:\", round(TP/(TP + FN), 4))\n", "print(\"Accuracy:\", round((TP+TN)/(TP + TN + FP + FN), 4))" ] }, { "cell_type": "markdown", "id": "f23234ee-6f8c-41c1-82ac-20b0918838b0", "metadata": {}, "source": [ "In the results above we can see a much more imporved model, with better metrics when compared to the base model. Nearly 70% accuracy, recall and precision. Makes this a well performing model. Especially when compared to others we checked. The test accuracy does not fall out of bounds with the validation result, signaling the validity of the performance of our model outside of the train set, and a good balance of each cases in each of the splits made. " ] }, { "cell_type": "markdown", "id": "6cf17064-b36e-4981-bd7e-18ea19aca27b", "metadata": {}, "source": [ "# Custom Text Import And Prediction" ] }, { "cell_type": "markdown", "id": "413a2be1-d873-4572-855c-c36f030a777c", "metadata": {}, "source": [ "To prove the performance of the model and simply to check its real life purpose, we have checked real recent articles from Bloomberg and CNBC, in both classes of relevancy. First, we created a function in which 3 arguments are provided - the headline string, the text string and the length of padded sequences to set a max article length of 404 words our model can intake. \n", "* The strings are combined into a single string, then the cleaning process is done, along with removing the stopwords, and lemmatization.\n", "* An error will be brought out if the length of the given article is > 404 words or the padded sequence length.\n", "* If however this is not the case we proceed into turning the text into sequences and padding them given the max length given as an argument.\n", "* As the last step a prediction is made and later classified as Economic or Non Economic depending if the value is smaller or bigger then the threshold of 0.5.\n", "* The demonstration of the function in work with real articles is given below. " ] }, { "cell_type": "code", "execution_count": 250, "id": "95f9a369-decb-4663-85b0-f9e266d83bff", "metadata": {}, "outputs": [], "source": [ "def is_txt_econ(headline, text, max_l):\n", " whole_txt = headline + ' ' + text\n", " \n", " # Taking out '
' in the 'whole_text' column\n", " whole_txt = re.sub(r'', ' ', whole_txt)\n", " # Deletion of non-latin alfabet signs, also numbers\n", " whole_txt = re.sub(r'[^a-zA-Z]', ' ', whole_txt)\n", " # Removing single letter works like 'a'.\n", " whole_txt = re.sub(r\"\\s+[a-zA-Z]\\s+\", ' ', whole_txt)\n", " # Removing double spaces\n", " whole_txt = re.sub(r'\\s+', ' ', whole_txt)\n", " # Lower case\n", " whole_txt = whole_txt.lower()\n", " whole_txt = word_tokenize(whole_txt)\n", " whole_txt = [word for word in whole_txt if word not in stop_words]\n", " whole_txt = [lemmatizer.lemmatize(word) for word in whole_txt]\n", "\n", " if len(whole_txt) > max_l:\n", " print('ERROR, Article lenght must be < 404')\n", " else:\n", " sequences = tokenizer.texts_to_sequences([whole_txt])\n", " padded_sequences = pad_sequences(sequences, maxlen=max_l)\n", " \n", " predictions = model5.predict(padded_sequences)\n", " if predictions < 0.5:\n", " return(predictions, 'Non Economic')\n", " else:\n", " return(predictions, 'Economic')" ] }, { "cell_type": "code", "execution_count": 261, "id": "b57e9bed-7e5b-48f2-b1af-b6e4f04f6da3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1/1 [==============================] - 0s 118ms/step\n" ] }, { "data": { "text/plain": [ "(array([[0.22238688]], dtype=float32), 'Non Economic')" ] }, "execution_count": 261, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Bloomberg Article - Economic Relevance, debatable, about changing structures inside the Swiss bank UBS.\n", "# https://www.bloomberg.com/news/articles/2023-12-03/ubs-s-ermotti-to-find-potential-successor-within-three-years?srnd=premium-europe\n", "is_txt_econ('UBS’s Ermotti to Find Potential Successor Within Three Years', 'Sergio Ermotti, chief executive officer of UBS Group AG, says part of his mandate for the next three years is to identify potential successors, he told the Swiss media outlet Bilanz in a television interview. We need to have candidates that we can assess in the next few years; and it is part of my job to present an array of candidates to the board, Ermotti told the broadcaster. UBS Chairman Colm Kelleher said last week that he, along with the bank’s board, was looking to develop a shortlist of potential successors for 63-year-old Ermotti. Read more: Kelleher Says UBS Could Use Morgan Stanley’s CEO Race Playbook An internal successor would be ideal, Ermotti said in Sunday’s interview, while not ruling out an external candidate. When the bank is successful, it is better to have someone who knows the internal mechanisms, he added. UBS brought back Ermotti as CEO in April to oversee the government-brokered rescue of its smaller competitor Credit Suisse. Ermotti previously ran UBS from 2011 to 2020.', len(padded_sequences[0]))" ] }, { "cell_type": "code", "execution_count": 262, "id": "d74b55cb-9b24-4f31-91b9-84c270299266", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1/1 [==============================] - 0s 119ms/step\n" ] }, { "data": { "text/plain": [ "(array([[0.14373618]], dtype=float32), 'Non Economic')" ] }, "execution_count": 262, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# CNBC - Surely Non Economic, regarding a terrorist attack in Paris\n", "# https://www.cnbc.com/2023/12/03/one-dead-two-injured-after-tourists-attacked-near-paris-eiffel-tower.html\n", "is_txt_econ('One dead, two injured after man attacks tourists near Paris Eiffel Tower', 'One person died and two others were injured after a man attacked tourists in central Paris near the Eiffel Tower, Interior Minister Gerald Darmanin said on Saturday. Police quickly arrested the 26-year-old man, a French national, using a Taser stun gun, Darmanin told reporters. The suspect had been sentenced to four years in prison in 2016 for planning another attack and was on the French security services watch list, and was also known for having psychiatric disorders, the interior minister added.The attack took place around 1900 GMT when the man attacked a tourist couple with a knife on the Quai de Grenelle, a few feet away from the Eiffel Tower, mortally wounding a German national. He was then chased by police and attacked two other people with a hammer before being arrested. The suspect had shouted out Allahu Akbar (God is greatest) and told police he was upset because so many Muslims are dying in Afghanistan and in Palestine and was also upset about the Gaza situation, Darmanin said. The anti-terrorism prosecutors office said it was in charge of the investigation. Saturday nights incident in central Paris occurred less than eight months before the French capital hosts the Olympic Games and could raise questions about security at the global sporting event. Paris plans an unprecedented opening ceremony on the Seine river that may draw as many as 600,000 spectators.', len(padded_sequences[0]))" ] }, { "cell_type": "code", "execution_count": 263, "id": "a212274f-e72a-41aa-8aa4-7629e17f5627", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1/1 [==============================] - 0s 100ms/step\n" ] }, { "data": { "text/plain": [ "(array([[0.5134268]], dtype=float32), 'Economic')" ] }, "execution_count": 263, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# CNBC, article about rising gold prices due to FED policies.\n", "# https://www.cnbc.com/2023/12/01/gold-set-for-3rd-weekly-gain-as-cooler-data-cements-fed-cut-bets.html\n", "is_txt_econ('Gold hits record high on bets for March start to Fed rate cuts', 'Gold prices rallied to an all-time high on Friday after remarks from Federal Reserve Chair Jerome Powell increased traders confidence the U.S. central bank had completed its monetary policy tightening and could cut rates starting March. Spot gold climbed 1.6% to $2,069.10 per ounce. Prices were 3.4% higher on the week, and earlier rose to $2,075.09 per ounce to beat the previous all-time high of $2,072.49 reached in 2020. U.S. gold futures also settled 1.6% higher at a record peak of $2,089.7. Those records, however, are in nominal terms only. On an inflation-adjusted basis, accounting for the depreciation of the dollar and the effect of higher prices, gold’s all-time was reached in early 1980 at what today would equal $3,452.40 an ounce. Speaking at Spelman College in Atlanta, Powell said the risks of under- and over-tightening are becoming more balanced, but the Fed is not thinking about lowering rates right now. Gold bulls are focusing on Powells comment that [the current] rate is well into restrictive territory, which plays into the narrative that cuts will come sooner, pointedly ignoring his warning that it was premature to speculate on easing rates, said Tai Wong, a New York-based independent metals trader.', len(padded_sequences[0]))" ] }, { "cell_type": "code", "execution_count": 264, "id": "ee1b3eee-f6c6-4d9f-8bd4-169a7a608aa6", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1/1 [==============================] - 0s 103ms/step\n" ] }, { "data": { "text/plain": [ "(array([[0.7161325]], dtype=float32), 'Economic')" ] }, "execution_count": 264, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# CNBC Oil Prices Article\n", "# https://www.cnbc.com/2023/12/01/oil-prices-set-to-rise-in-2024-after-opec-voluntary-cuts.html\n", "is_txt_econ('Oil prices could reach $100 a barrel in 2024 if OPEC+ members fulfil pledges for voluntary cuts', 'Oil prices are expected to rise in the new year after some OPEC+ oil producers voluntarily pledged to cut output. The oil cartel on Thursday released a statement that did not formally endorse production cuts, but individual countries announced voluntary reductions totaling 2.2 million barrels per day for the first quarter of 2024. Leading the cuts is OPEC kingpin and largest member Saudi Arabia. Riyadh agreed to extend its voluntary production cut of 1 million barrels per day — which has been in place since July — until the end of the first quarter of 2024. Russia said it will cut supply by 300,000 barrels per day of crude and 200,000 barrels per day of petroleum products over the same period. Iraq is cutting by 223,000 bpd, the United Arab Emirates by 163,000 bpd, Kuwait by 135,000 bpd, Kazakhstan by 82,000 bpd, Algeria by 51,000 bpd and Oman by 42,000 bpd. Compliance is key. It cant just be Saudi Arabia. We have to have compliance from the other OPEC nations, Bill Perkins, CEO and head trader of Skylar Capital Management, told CNBC. When these other nations say theyre going to cut, the market doesnt trust it as much, he added.', len(padded_sequences[0]))" ] }, { "cell_type": "markdown", "id": "c2bac6aa-8c7d-4727-bb5e-a99d499878a5", "metadata": {}, "source": [ "As we can see the algorithm mostly correctly predicts the articles. However, we can see some limitations of such model.\n", "* It can be debatable for some content to be classified as either economic or not for a human, how is a machine supposed to react to that.\n", "* The words that were not in the initial dictionary before training are just simply ignored and their context is not taken into consideration.\n", "\n", "As for the recommendations for the future…\n", "* More data, with more economic news, we only had 1420 cases of economic news out of 8000.\n", "* This would allow for a better glossary, therefore likely better predictions.\n", "* Recognize news brands, we only had the Wall Street Journal and the Washington Post. Some brands are strictly financial, while others are not. " ] } ], "metadata": { "colab": { "provenance": [] }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.7" } }, "nbformat": 4, "nbformat_minor": 5 }