├── App ├── app.py ├── data.db ├── models │ └── emotion_classifier_pipe_lr_03_june_2021.pkl └── track_utils.py ├── README.md ├── data ├── EmotionClf-End2End.png ├── EmotionDetectionNLP-End2End.pdf └── emotion_dataset_2.csv ├── models └── emotion_classifier_pipe_lr_03_june_2021.pkl └── notebooks ├── .ipynb_checkpoints └── End2End-NLP-Project-checkpoint.ipynb ├── End2End-NLP-Project.ipynb ├── data ├── emotion_dataset_2.csv └── emotion_dataset_raw.csv └── emotion_classifier_pipe_lr_03_june_2021.pkl /App/app.py: -------------------------------------------------------------------------------- 1 | # Core Pkgs 2 | import streamlit as st 3 | import altair as alt 4 | import plotly.express as px 5 | 6 | # EDA Pkgs 7 | import pandas as pd 8 | import numpy as np 9 | from datetime import datetime 10 | 11 | # Utils 12 | import joblib 13 | pipe_lr = joblib.load(open("models/emotion_classifier_pipe_lr_03_june_2021.pkl","rb")) 14 | 15 | 16 | # Track Utils 17 | from track_utils import create_page_visited_table,add_page_visited_details,view_all_page_visited_details,add_prediction_details,view_all_prediction_details,create_emotionclf_table 18 | 19 | # Fxn 20 | def predict_emotions(docx): 21 | results = pipe_lr.predict([docx]) 22 | return results[0] 23 | 24 | def get_prediction_proba(docx): 25 | results = pipe_lr.predict_proba([docx]) 26 | return results 27 | 28 | emotions_emoji_dict = {"anger":"😠","disgust":"🤮", "fear":"😨😱", "happy":"🤗", "joy":"😂", "neutral":"😐", "sad":"😔", "sadness":"😔", "shame":"😳", "surprise":"😮"} 29 | 30 | 31 | # Main Application 32 | def main(): 33 | st.title("Emotion Classifier App") 34 | menu = ["Home","Monitor","About"] 35 | choice = st.sidebar.selectbox("Menu",menu) 36 | create_page_visited_table() 37 | create_emotionclf_table() 38 | if choice == "Home": 39 | add_page_visited_details("Home",datetime.now()) 40 | st.subheader("Home-Emotion In Text") 41 | 42 | with st.form(key='emotion_clf_form'): 43 | raw_text = st.text_area("Type Here") 44 | submit_text = st.form_submit_button(label='Submit') 45 | 46 | if submit_text: 47 | col1,col2 = st.beta_columns(2) 48 | 49 | # Apply Fxn Here 50 | prediction = predict_emotions(raw_text) 51 | probability = get_prediction_proba(raw_text) 52 | 53 | add_prediction_details(raw_text,prediction,np.max(probability),datetime.now()) 54 | 55 | with col1: 56 | st.success("Original Text") 57 | st.write(raw_text) 58 | 59 | st.success("Prediction") 60 | emoji_icon = emotions_emoji_dict[prediction] 61 | st.write("{}:{}".format(prediction,emoji_icon)) 62 | st.write("Confidence:{}".format(np.max(probability))) 63 | 64 | 65 | 66 | with col2: 67 | st.success("Prediction Probability") 68 | # st.write(probability) 69 | proba_df = pd.DataFrame(probability,columns=pipe_lr.classes_) 70 | # st.write(proba_df.T) 71 | proba_df_clean = proba_df.T.reset_index() 72 | proba_df_clean.columns = ["emotions","probability"] 73 | 74 | fig = alt.Chart(proba_df_clean).mark_bar().encode(x='emotions',y='probability',color='emotions') 75 | st.altair_chart(fig,use_container_width=True) 76 | 77 | 78 | 79 | elif choice == "Monitor": 80 | add_page_visited_details("Monitor",datetime.now()) 81 | st.subheader("Monitor App") 82 | 83 | with st.beta_expander("Page Metrics"): 84 | page_visited_details = pd.DataFrame(view_all_page_visited_details(),columns=['Pagename','Time_of_Visit']) 85 | st.dataframe(page_visited_details) 86 | 87 | pg_count = page_visited_details['Pagename'].value_counts().rename_axis('Pagename').reset_index(name='Counts') 88 | c = alt.Chart(pg_count).mark_bar().encode(x='Pagename',y='Counts',color='Pagename') 89 | st.altair_chart(c,use_container_width=True) 90 | 91 | p = px.pie(pg_count,values='Counts',names='Pagename') 92 | st.plotly_chart(p,use_container_width=True) 93 | 94 | with st.beta_expander('Emotion Classifier Metrics'): 95 | df_emotions = pd.DataFrame(view_all_prediction_details(),columns=['Rawtext','Prediction','Probability','Time_of_Visit']) 96 | st.dataframe(df_emotions) 97 | 98 | prediction_count = df_emotions['Prediction'].value_counts().rename_axis('Prediction').reset_index(name='Counts') 99 | pc = alt.Chart(prediction_count).mark_bar().encode(x='Prediction',y='Counts',color='Prediction') 100 | st.altair_chart(pc,use_container_width=True) 101 | 102 | 103 | 104 | else: 105 | st.subheader("About") 106 | add_page_visited_details("About",datetime.now()) 107 | 108 | 109 | 110 | 111 | 112 | if __name__ == '__main__': 113 | main() -------------------------------------------------------------------------------- /App/data.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jcharis/end2end-nlp-project/f82d87ed6d2608ad2c9b43e29e06da53429c1915/App/data.db -------------------------------------------------------------------------------- /App/models/emotion_classifier_pipe_lr_03_june_2021.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jcharis/end2end-nlp-project/f82d87ed6d2608ad2c9b43e29e06da53429c1915/App/models/emotion_classifier_pipe_lr_03_june_2021.pkl -------------------------------------------------------------------------------- /App/track_utils.py: -------------------------------------------------------------------------------- 1 | # Load Database Pkg 2 | import sqlite3 3 | conn = sqlite3.connect('data.db') 4 | c = conn.cursor() 5 | 6 | 7 | # Fxn 8 | def create_page_visited_table(): 9 | c.execute('CREATE TABLE IF NOT EXISTS pageTrackTable(pagename TEXT,timeOfvisit TIMESTAMP)') 10 | 11 | def add_page_visited_details(pagename,timeOfvisit): 12 | c.execute('INSERT INTO pageTrackTable(pagename,timeOfvisit) VALUES(?,?)',(pagename,timeOfvisit)) 13 | conn.commit() 14 | 15 | def view_all_page_visited_details(): 16 | c.execute('SELECT * FROM pageTrackTable') 17 | data = c.fetchall() 18 | return data 19 | 20 | 21 | # Fxn To Track Input & Prediction 22 | def create_emotionclf_table(): 23 | c.execute('CREATE TABLE IF NOT EXISTS emotionclfTable(rawtext TEXT,prediction TEXT,probability NUMBER,timeOfvisit TIMESTAMP)') 24 | 25 | def add_prediction_details(rawtext,prediction,probability,timeOfvisit): 26 | c.execute('INSERT INTO emotionclfTable(rawtext,prediction,probability,timeOfvisit) VALUES(?,?,?,?)',(rawtext,prediction,probability,timeOfvisit)) 27 | conn.commit() 28 | 29 | def view_all_prediction_details(): 30 | c.execute('SELECT * FROM emotionclfTable') 31 | data = c.fetchall() 32 | return data -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # end2end-nlp-project 2 | End 2 End NLP Project with Python 3 | -------------------------------------------------------------------------------- /data/EmotionClf-End2End.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jcharis/end2end-nlp-project/f82d87ed6d2608ad2c9b43e29e06da53429c1915/data/EmotionClf-End2End.png -------------------------------------------------------------------------------- /data/EmotionDetectionNLP-End2End.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jcharis/end2end-nlp-project/f82d87ed6d2608ad2c9b43e29e06da53429c1915/data/EmotionDetectionNLP-End2End.pdf -------------------------------------------------------------------------------- /models/emotion_classifier_pipe_lr_03_june_2021.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jcharis/end2end-nlp-project/f82d87ed6d2608ad2c9b43e29e06da53429c1915/models/emotion_classifier_pipe_lr_03_june_2021.pkl -------------------------------------------------------------------------------- /notebooks/.ipynb_checkpoints/End2End-NLP-Project-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "36f38e2a-9998-4c73-bfc3-21b74d64a5ee", 6 | "metadata": {}, 7 | "source": [ 8 | "### End 2 End NLP Project\n", 9 | "+ Emotion Detection In Text \n", 10 | "+ Text Classifier" 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": 1, 16 | "id": "f0814628-3d83-4fd6-a511-2eccf79f9f1e", 17 | "metadata": {}, 18 | "outputs": [], 19 | "source": [ 20 | "# Load EDA Pkgs\n", 21 | "import pandas as pd\n", 22 | "import numpy as np" 23 | ] 24 | }, 25 | { 26 | "cell_type": "code", 27 | "execution_count": 2, 28 | "id": "ea0d580d-c31c-44b7-b09b-10225857eebe", 29 | "metadata": {}, 30 | "outputs": [], 31 | "source": [ 32 | "# Load Data Viz Pkgs\n", 33 | "import seaborn as sns" 34 | ] 35 | }, 36 | { 37 | "cell_type": "code", 38 | "execution_count": 3, 39 | "id": "91eccfbf-d4d0-4e16-b0f7-2d7941efddb0", 40 | "metadata": {}, 41 | "outputs": [], 42 | "source": [ 43 | "# Load Text Cleaning Pkgs\n", 44 | "import neattext.functions as nfx" 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "execution_count": 5, 50 | "id": "21e7e868-35fb-483f-82b6-842a29ef1342", 51 | "metadata": {}, 52 | "outputs": [], 53 | "source": [ 54 | "# Load ML Pkgs\n", 55 | "# Estimators\n", 56 | "from sklearn.linear_model import LogisticRegression\n", 57 | "from sklearn.naive_bayes import MultinomialNB\n", 58 | "\n", 59 | "# Transformers\n", 60 | "from sklearn.feature_extraction.text import CountVectorizer\n", 61 | "from sklearn.model_selection import train_test_split\n", 62 | "from sklearn.metrics import accuracy_score,classification_report,confusion_matrix" 63 | ] 64 | }, 65 | { 66 | "cell_type": "code", 67 | "execution_count": 10, 68 | "id": "b209e004-ab77-4407-8689-b4318944d47f", 69 | "metadata": {}, 70 | "outputs": [], 71 | "source": [ 72 | "# Load Dataset\n", 73 | "df = pd.read_csv(\"data/emotion_dataset_raw.csv\")" 74 | ] 75 | }, 76 | { 77 | "cell_type": "code", 78 | "execution_count": 11, 79 | "id": "fea2d4c0-3bdd-405e-ab69-507ceaac36cb", 80 | "metadata": {}, 81 | "outputs": [ 82 | { 83 | "data": { 84 | "text/html": [ 85 | "
\n", 86 | "\n", 99 | "\n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | "
EmotionText
0neutralWhy ?
1joySage Act upgrade on my to do list for tommorow.
2sadnessON THE WAY TO MY HOMEGIRL BABY FUNERAL!!! MAN ...
3joySuch an eye ! The true hazel eye-and so brill...
4joy@Iluvmiasantos ugh babe.. hugggzzz for u .! b...
\n", 135 | "
" 136 | ], 137 | "text/plain": [ 138 | " Emotion Text\n", 139 | "0 neutral Why ? \n", 140 | "1 joy Sage Act upgrade on my to do list for tommorow.\n", 141 | "2 sadness ON THE WAY TO MY HOMEGIRL BABY FUNERAL!!! MAN ...\n", 142 | "3 joy Such an eye ! The true hazel eye-and so brill...\n", 143 | "4 joy @Iluvmiasantos ugh babe.. hugggzzz for u .! b..." 144 | ] 145 | }, 146 | "execution_count": 11, 147 | "metadata": {}, 148 | "output_type": "execute_result" 149 | } 150 | ], 151 | "source": [ 152 | "df.head()" 153 | ] 154 | }, 155 | { 156 | "cell_type": "code", 157 | "execution_count": 12, 158 | "id": "430565a3-cf3b-4c6f-afa5-bafd084f5676", 159 | "metadata": {}, 160 | "outputs": [ 161 | { 162 | "data": { 163 | "text/plain": [ 164 | "joy 11045\n", 165 | "sadness 6722\n", 166 | "fear 5410\n", 167 | "anger 4297\n", 168 | "surprise 4062\n", 169 | "neutral 2254\n", 170 | "disgust 856\n", 171 | "shame 146\n", 172 | "Name: Emotion, dtype: int64" 173 | ] 174 | }, 175 | "execution_count": 12, 176 | "metadata": {}, 177 | "output_type": "execute_result" 178 | } 179 | ], 180 | "source": [ 181 | "# Value Counts\n", 182 | "df['Emotion'].value_counts()" 183 | ] 184 | }, 185 | { 186 | "cell_type": "code", 187 | "execution_count": 13, 188 | "id": "531d3449-a959-4a19-bff0-3ffed551e619", 189 | "metadata": {}, 190 | "outputs": [ 191 | { 192 | "data": { 193 | "text/plain": [ 194 | "" 195 | ] 196 | }, 197 | "execution_count": 13, 198 | "metadata": {}, 199 | "output_type": "execute_result" 200 | }, 201 | { 202 | "data": { 203 | "image/png": "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\n", 204 | "text/plain": [ 205 | "
" 206 | ] 207 | }, 208 | "metadata": { 209 | "needs_background": "light" 210 | }, 211 | "output_type": "display_data" 212 | } 213 | ], 214 | "source": [ 215 | "# Plot\n", 216 | "sns.countplot(x='Emotion',data=df)" 217 | ] 218 | }, 219 | { 220 | "cell_type": "code", 221 | "execution_count": 14, 222 | "id": "40f991d0-952f-40c1-bf00-f3476ce0436d", 223 | "metadata": { 224 | "collapsed": true, 225 | "jupyter": { 226 | "outputs_hidden": true 227 | }, 228 | "tags": [] 229 | }, 230 | "outputs": [ 231 | { 232 | "data": { 233 | "text/plain": [ 234 | "['BTC_ADDRESS_REGEX',\n", 235 | " 'CURRENCY_REGEX',\n", 236 | " 'CURRENCY_SYMB_REGEX',\n", 237 | " 'Counter',\n", 238 | " 'DATE_REGEX',\n", 239 | " 'EMAIL_REGEX',\n", 240 | " 'EMOJI_REGEX',\n", 241 | " 'HASTAG_REGEX',\n", 242 | " 'MASTERCard_REGEX',\n", 243 | " 'MD5_SHA_REGEX',\n", 244 | " 'MOST_COMMON_PUNCT_REGEX',\n", 245 | " 'NUMBERS_REGEX',\n", 246 | " 'PHONE_REGEX',\n", 247 | " 'PoBOX_REGEX',\n", 248 | " 'SPECIAL_CHARACTERS_REGEX',\n", 249 | " 'STOPWORDS',\n", 250 | " 'STOPWORDS_de',\n", 251 | " 'STOPWORDS_en',\n", 252 | " 'STOPWORDS_es',\n", 253 | " 'STOPWORDS_fr',\n", 254 | " 'STOPWORDS_ru',\n", 255 | " 'STOPWORDS_yo',\n", 256 | " 'STREET_ADDRESS_REGEX',\n", 257 | " 'TextFrame',\n", 258 | " 'URL_PATTERN',\n", 259 | " 'USER_HANDLES_REGEX',\n", 260 | " 'VISACard_REGEX',\n", 261 | " '__builtins__',\n", 262 | " '__cached__',\n", 263 | " '__doc__',\n", 264 | " '__file__',\n", 265 | " '__generate_text',\n", 266 | " '__loader__',\n", 267 | " '__name__',\n", 268 | " '__numbers_dict',\n", 269 | " '__package__',\n", 270 | " '__spec__',\n", 271 | " '_lex_richness_herdan',\n", 272 | " '_lex_richness_maas_ttr',\n", 273 | " 'clean_text',\n", 274 | " 'defaultdict',\n", 275 | " 'digit2words',\n", 276 | " 'extract_btc_address',\n", 277 | " 'extract_currencies',\n", 278 | " 'extract_currency_symbols',\n", 279 | " 'extract_dates',\n", 280 | " 'extract_emails',\n", 281 | " 'extract_emojis',\n", 282 | " 'extract_hashtags',\n", 283 | " 'extract_html_tags',\n", 284 | " 'extract_mastercard_addr',\n", 285 | " 'extract_md5sha',\n", 286 | " 'extract_numbers',\n", 287 | " 'extract_pattern',\n", 288 | " 'extract_phone_numbers',\n", 289 | " 'extract_postoffice_box',\n", 290 | " 'extract_shortwords',\n", 291 | " 'extract_special_characters',\n", 292 | " 'extract_stopwords',\n", 293 | " 'extract_street_address',\n", 294 | " 'extract_urls',\n", 295 | " 'extract_userhandles',\n", 296 | " 'extract_visacard_addr',\n", 297 | " 'fix_contractions',\n", 298 | " 'generate_sentence',\n", 299 | " 'hamming_distance',\n", 300 | " 'inverse_df',\n", 301 | " 'lexical_richness',\n", 302 | " 'markov_chain',\n", 303 | " 'math',\n", 304 | " 'nlargest',\n", 305 | " 'normalize',\n", 306 | " 'num2words',\n", 307 | " 'random',\n", 308 | " 're',\n", 309 | " 'read_txt',\n", 310 | " 'remove_bad_quotes',\n", 311 | " 'remove_btc_address',\n", 312 | " 'remove_currencies',\n", 313 | " 'remove_currency_symbols',\n", 314 | " 'remove_custom_pattern',\n", 315 | " 'remove_custom_words',\n", 316 | " 'remove_dates',\n", 317 | " 'remove_emails',\n", 318 | " 'remove_emojis',\n", 319 | " 'remove_hashtags',\n", 320 | " 'remove_html_tags',\n", 321 | " 'remove_mastercard_addr',\n", 322 | " 'remove_md5sha',\n", 323 | " 'remove_multiple_spaces',\n", 324 | " 'remove_non_ascii',\n", 325 | " 'remove_numbers',\n", 326 | " 'remove_phone_numbers',\n", 327 | " 'remove_postoffice_box',\n", 328 | " 'remove_puncts',\n", 329 | " 'remove_punctuations',\n", 330 | " 'remove_shortwords',\n", 331 | " 'remove_special_characters',\n", 332 | " 'remove_stopwords',\n", 333 | " 'remove_street_address',\n", 334 | " 'remove_urls',\n", 335 | " 'remove_userhandles',\n", 336 | " 'remove_visacard_addr',\n", 337 | " 'replace_bad_quotes',\n", 338 | " 'replace_currencies',\n", 339 | " 'replace_currency_symbols',\n", 340 | " 'replace_dates',\n", 341 | " 'replace_emails',\n", 342 | " 'replace_emojis',\n", 343 | " 'replace_numbers',\n", 344 | " 'replace_phone_numbers',\n", 345 | " 'replace_special_characters',\n", 346 | " 'replace_term',\n", 347 | " 'replace_urls',\n", 348 | " 'string',\n", 349 | " 'term_freq',\n", 350 | " 'to_txt',\n", 351 | " 'word_freq',\n", 352 | " 'word_length_freq']" 353 | ] 354 | }, 355 | "execution_count": 14, 356 | "metadata": {}, 357 | "output_type": "execute_result" 358 | } 359 | ], 360 | "source": [ 361 | "# Data Cleaning\n", 362 | "dir(nfx)" 363 | ] 364 | }, 365 | { 366 | "cell_type": "code", 367 | "execution_count": 17, 368 | "id": "b1f87847-a91c-4bd6-a307-d746eb5aa9a0", 369 | "metadata": {}, 370 | "outputs": [], 371 | "source": [ 372 | "# User handles\n", 373 | "df['Clean_Text'] = df['Text'].apply(nfx.remove_userhandles)" 374 | ] 375 | }, 376 | { 377 | "cell_type": "code", 378 | "execution_count": 18, 379 | "id": "03886bc3-1ac4-4f1b-842b-e5d2d770ff81", 380 | "metadata": {}, 381 | "outputs": [], 382 | "source": [ 383 | "# Stopwords\n", 384 | "df['Clean_Text'] = df['Clean_Text'].apply(nfx.remove_stopwords)" 385 | ] 386 | }, 387 | { 388 | "cell_type": "code", 389 | "execution_count": 19, 390 | "id": "0a0fcc0c-4adf-4f0b-b226-164659ad70ba", 391 | "metadata": { 392 | "collapsed": true, 393 | "jupyter": { 394 | "outputs_hidden": true 395 | }, 396 | "tags": [] 397 | }, 398 | "outputs": [ 399 | { 400 | "data": { 401 | "text/html": [ 402 | "
\n", 403 | "\n", 416 | "\n", 417 | " \n", 418 | " \n", 419 | " \n", 420 | " \n", 421 | " \n", 422 | " \n", 423 | " \n", 424 | " \n", 425 | " \n", 426 | " \n", 427 | " \n", 428 | " \n", 429 | " \n", 430 | " \n", 431 | " \n", 432 | " \n", 433 | " \n", 434 | " \n", 435 | " \n", 436 | " \n", 437 | " \n", 438 | " \n", 439 | " \n", 440 | " \n", 441 | " \n", 442 | " \n", 443 | " \n", 444 | " \n", 445 | " \n", 446 | " \n", 447 | " \n", 448 | " \n", 449 | " \n", 450 | " \n", 451 | " \n", 452 | " \n", 453 | " \n", 454 | " \n", 455 | " \n", 456 | " \n", 457 | " \n", 458 | " \n", 459 | " \n", 460 | " \n", 461 | " \n", 462 | " \n", 463 | " \n", 464 | " \n", 465 | " \n", 466 | " \n", 467 | " \n", 468 | " \n", 469 | " \n", 470 | " \n", 471 | " \n", 472 | " \n", 473 | " \n", 474 | " \n", 475 | " \n", 476 | " \n", 477 | " \n", 478 | " \n", 479 | " \n", 480 | " \n", 481 | " \n", 482 | " \n", 483 | " \n", 484 | " \n", 485 | " \n", 486 | " \n", 487 | " \n", 488 | " \n", 489 | " \n", 490 | " \n", 491 | " \n", 492 | " \n", 493 | "
EmotionTextClean_Text
0neutralWhy ??
1joySage Act upgrade on my to do list for tommorow.Sage Act upgrade list tommorow.
2sadnessON THE WAY TO MY HOMEGIRL BABY FUNERAL!!! MAN ...WAY HOMEGIRL BABY FUNERAL!!! MAN HATE FUNERALS...
3joySuch an eye ! The true hazel eye-and so brill...eye ! true hazel eye-and brilliant ! Regular f...
4joy@Iluvmiasantos ugh babe.. hugggzzz for u .! b...ugh babe.. hugggzzz u .! babe naamazed nga ako...
............
34787surprise@MichelGW have you gift! Hope you like it! It'...gift! Hope like it! hand wear ! It'll warm! Lol
34788joyThe world didnt give it to me..so the world MO...world didnt me..so world DEFINITELY cnt away!!!
34789angerA man robbed me today .man robbed today .
34790fearYouu call it JEALOUSY, I call it of #Losing YO...Youu JEALOUSY, #Losing YOU...
34791sadnessI think about you baby, and I dream about you ...think baby, dream time
\n", 494 | "

34792 rows × 3 columns

\n", 495 | "
" 496 | ], 497 | "text/plain": [ 498 | " Emotion Text \\\n", 499 | "0 neutral Why ? \n", 500 | "1 joy Sage Act upgrade on my to do list for tommorow. \n", 501 | "2 sadness ON THE WAY TO MY HOMEGIRL BABY FUNERAL!!! MAN ... \n", 502 | "3 joy Such an eye ! The true hazel eye-and so brill... \n", 503 | "4 joy @Iluvmiasantos ugh babe.. hugggzzz for u .! b... \n", 504 | "... ... ... \n", 505 | "34787 surprise @MichelGW have you gift! Hope you like it! It'... \n", 506 | "34788 joy The world didnt give it to me..so the world MO... \n", 507 | "34789 anger A man robbed me today . \n", 508 | "34790 fear Youu call it JEALOUSY, I call it of #Losing YO... \n", 509 | "34791 sadness I think about you baby, and I dream about you ... \n", 510 | "\n", 511 | " Clean_Text \n", 512 | "0 ? \n", 513 | "1 Sage Act upgrade list tommorow. \n", 514 | "2 WAY HOMEGIRL BABY FUNERAL!!! MAN HATE FUNERALS... \n", 515 | "3 eye ! true hazel eye-and brilliant ! Regular f... \n", 516 | "4 ugh babe.. hugggzzz u .! babe naamazed nga ako... \n", 517 | "... ... \n", 518 | "34787 gift! Hope like it! hand wear ! It'll warm! Lol \n", 519 | "34788 world didnt me..so world DEFINITELY cnt away!!! \n", 520 | "34789 man robbed today . \n", 521 | "34790 Youu JEALOUSY, #Losing YOU... \n", 522 | "34791 think baby, dream time \n", 523 | "\n", 524 | "[34792 rows x 3 columns]" 525 | ] 526 | }, 527 | "execution_count": 19, 528 | "metadata": {}, 529 | "output_type": "execute_result" 530 | } 531 | ], 532 | "source": [ 533 | "df" 534 | ] 535 | }, 536 | { 537 | "cell_type": "code", 538 | "execution_count": 20, 539 | "id": "450c39c0-79dd-4eaf-85fe-57e344eb81bd", 540 | "metadata": {}, 541 | "outputs": [], 542 | "source": [ 543 | "# Features & Labels\n", 544 | "Xfeatures = df['Clean_Text']\n", 545 | "ylabels = df['Emotion']" 546 | ] 547 | }, 548 | { 549 | "cell_type": "code", 550 | "execution_count": 21, 551 | "id": "27d7f976-c28f-449e-ae1a-53a42bbda4e8", 552 | "metadata": {}, 553 | "outputs": [], 554 | "source": [ 555 | "# Split Data\n", 556 | "x_train,x_test,y_train,y_test = train_test_split(Xfeatures,ylabels,test_size=0.3,random_state=42)" 557 | ] 558 | }, 559 | { 560 | "cell_type": "code", 561 | "execution_count": 22, 562 | "id": "2f086f29-dba9-40d2-a9dd-f06a6cca3a4c", 563 | "metadata": {}, 564 | "outputs": [], 565 | "source": [ 566 | "# Build Pipeline\n", 567 | "from sklearn.pipeline import Pipeline" 568 | ] 569 | }, 570 | { 571 | "cell_type": "code", 572 | "execution_count": 23, 573 | "id": "6b81cc86-2bef-40c2-b9a3-668caaadaff0", 574 | "metadata": {}, 575 | "outputs": [], 576 | "source": [ 577 | "# LogisticRegression Pipeline\n", 578 | "pipe_lr = Pipeline(steps=[('cv',CountVectorizer()),('lr',LogisticRegression())])" 579 | ] 580 | }, 581 | { 582 | "cell_type": "code", 583 | "execution_count": 24, 584 | "id": "dc64b9a7-efe2-4bc4-a0e7-46dff1d52b31", 585 | "metadata": { 586 | "collapsed": true, 587 | "jupyter": { 588 | "outputs_hidden": true 589 | }, 590 | "tags": [] 591 | }, 592 | "outputs": [ 593 | { 594 | "name": "stderr", 595 | "output_type": "stream", 596 | "text": [ 597 | "/usr/local/lib/python3.9/dist-packages/sklearn/linear_model/_logistic.py:763: ConvergenceWarning: lbfgs failed to converge (status=1):\n", 598 | "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", 599 | "\n", 600 | "Increase the number of iterations (max_iter) or scale the data as shown in:\n", 601 | " https://scikit-learn.org/stable/modules/preprocessing.html\n", 602 | "Please also refer to the documentation for alternative solver options:\n", 603 | " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", 604 | " n_iter_i = _check_optimize_result(\n" 605 | ] 606 | }, 607 | { 608 | "data": { 609 | "text/plain": [ 610 | "Pipeline(steps=[('cv', CountVectorizer()), ('lr', LogisticRegression())])" 611 | ] 612 | }, 613 | "execution_count": 24, 614 | "metadata": {}, 615 | "output_type": "execute_result" 616 | } 617 | ], 618 | "source": [ 619 | "# Train and Fit Data\n", 620 | "pipe_lr.fit(x_train,y_train)" 621 | ] 622 | }, 623 | { 624 | "cell_type": "code", 625 | "execution_count": 25, 626 | "id": "135ed6f8-56ff-4d53-85e3-541e3a7ae2d7", 627 | "metadata": {}, 628 | "outputs": [ 629 | { 630 | "data": { 631 | "text/plain": [ 632 | "Pipeline(steps=[('cv', CountVectorizer()), ('lr', LogisticRegression())])" 633 | ] 634 | }, 635 | "execution_count": 25, 636 | "metadata": {}, 637 | "output_type": "execute_result" 638 | } 639 | ], 640 | "source": [ 641 | "pipe_lr" 642 | ] 643 | }, 644 | { 645 | "cell_type": "code", 646 | "execution_count": 26, 647 | "id": "28396371-5f5c-4a3b-b974-164e047764f3", 648 | "metadata": {}, 649 | "outputs": [ 650 | { 651 | "data": { 652 | "text/plain": [ 653 | "0.6200421536692853" 654 | ] 655 | }, 656 | "execution_count": 26, 657 | "metadata": {}, 658 | "output_type": "execute_result" 659 | } 660 | ], 661 | "source": [ 662 | "# Check Accuracy\n", 663 | "pipe_lr.score(x_test,y_test)" 664 | ] 665 | }, 666 | { 667 | "cell_type": "code", 668 | "execution_count": 27, 669 | "id": "eb3a26b6-d09e-422f-991b-b08c48f55b75", 670 | "metadata": {}, 671 | "outputs": [], 672 | "source": [ 673 | "# Make A Prediction\n", 674 | "ex1 = \"This book was so interesting it made me happy\"" 675 | ] 676 | }, 677 | { 678 | "cell_type": "code", 679 | "execution_count": 28, 680 | "id": "b08597d9-6f59-45cb-a648-95b0da1ce313", 681 | "metadata": {}, 682 | "outputs": [ 683 | { 684 | "data": { 685 | "text/plain": [ 686 | "array(['joy'], dtype=object)" 687 | ] 688 | }, 689 | "execution_count": 28, 690 | "metadata": {}, 691 | "output_type": "execute_result" 692 | } 693 | ], 694 | "source": [ 695 | "pipe_lr.predict([ex1])" 696 | ] 697 | }, 698 | { 699 | "cell_type": "code", 700 | "execution_count": 29, 701 | "id": "5b3822ac-17fc-43dd-9bb7-8dad07a4d32c", 702 | "metadata": {}, 703 | "outputs": [ 704 | { 705 | "data": { 706 | "text/plain": [ 707 | "array([[1.60353503e-03, 7.05960421e-03, 6.95963589e-03, 9.43781635e-01,\n", 708 | " 1.00430913e-04, 2.63557471e-02, 6.65377751e-05, 1.40728742e-02]])" 709 | ] 710 | }, 711 | "execution_count": 29, 712 | "metadata": {}, 713 | "output_type": "execute_result" 714 | } 715 | ], 716 | "source": [ 717 | "# Prediction Prob\n", 718 | "pipe_lr.predict_proba([ex1])" 719 | ] 720 | }, 721 | { 722 | "cell_type": "code", 723 | "execution_count": 30, 724 | "id": "5b7c4596-d643-48e5-a777-79a6f55c49da", 725 | "metadata": {}, 726 | "outputs": [ 727 | { 728 | "data": { 729 | "text/plain": [ 730 | "array(['anger', 'disgust', 'fear', 'joy', 'neutral', 'sadness', 'shame',\n", 731 | " 'surprise'], dtype=object)" 732 | ] 733 | }, 734 | "execution_count": 30, 735 | "metadata": {}, 736 | "output_type": "execute_result" 737 | } 738 | ], 739 | "source": [ 740 | "# To Know the classes\n", 741 | "pipe_lr.classes_" 742 | ] 743 | }, 744 | { 745 | "cell_type": "code", 746 | "execution_count": 31, 747 | "id": "c0d40f62-b1fd-4748-a279-c8f50c748f26", 748 | "metadata": {}, 749 | "outputs": [], 750 | "source": [ 751 | "# Save Model & Pipeline\n", 752 | "import joblib\n", 753 | "pipeline_file = open(\"emotion_classifier_pipe_lr_03_june_2021.pkl\",\"wb\")\n", 754 | "joblib.dump(pipe_lr,pipeline_file)\n", 755 | "pipeline_file.close()" 756 | ] 757 | }, 758 | { 759 | "cell_type": "code", 760 | "execution_count": null, 761 | "id": "377c4e98-67f0-45e5-8dd5-0417585754f0", 762 | "metadata": {}, 763 | "outputs": [], 764 | "source": [] 765 | } 766 | ], 767 | "metadata": { 768 | "kernelspec": { 769 | "display_name": "Python 3", 770 | "language": "python", 771 | "name": "python3" 772 | }, 773 | "language_info": { 774 | "codemirror_mode": { 775 | "name": "ipython", 776 | "version": 3 777 | }, 778 | "file_extension": ".py", 779 | "mimetype": "text/x-python", 780 | "name": "python", 781 | "nbconvert_exporter": "python", 782 | "pygments_lexer": "ipython3", 783 | "version": "3.9.1+" 784 | } 785 | }, 786 | "nbformat": 4, 787 | "nbformat_minor": 5 788 | } 789 | -------------------------------------------------------------------------------- /notebooks/End2End-NLP-Project.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "36f38e2a-9998-4c73-bfc3-21b74d64a5ee", 6 | "metadata": {}, 7 | "source": [ 8 | "### End 2 End NLP Project\n", 9 | "+ Emotion Detection In Text \n", 10 | "+ Text Classifier" 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": 1, 16 | "id": "f0814628-3d83-4fd6-a511-2eccf79f9f1e", 17 | "metadata": {}, 18 | "outputs": [], 19 | "source": [ 20 | "# Load EDA Pkgs\n", 21 | "import pandas as pd\n", 22 | "import numpy as np" 23 | ] 24 | }, 25 | { 26 | "cell_type": "code", 27 | "execution_count": 2, 28 | "id": "ea0d580d-c31c-44b7-b09b-10225857eebe", 29 | "metadata": {}, 30 | "outputs": [], 31 | "source": [ 32 | "# Load Data Viz Pkgs\n", 33 | "import seaborn as sns" 34 | ] 35 | }, 36 | { 37 | "cell_type": "code", 38 | "execution_count": 3, 39 | "id": "91eccfbf-d4d0-4e16-b0f7-2d7941efddb0", 40 | "metadata": {}, 41 | "outputs": [], 42 | "source": [ 43 | "# Load Text Cleaning Pkgs\n", 44 | "import neattext.functions as nfx" 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "execution_count": 5, 50 | "id": "21e7e868-35fb-483f-82b6-842a29ef1342", 51 | "metadata": {}, 52 | "outputs": [], 53 | "source": [ 54 | "# Load ML Pkgs\n", 55 | "# Estimators\n", 56 | "from sklearn.linear_model import LogisticRegression\n", 57 | "from sklearn.naive_bayes import MultinomialNB\n", 58 | "\n", 59 | "# Transformers\n", 60 | "from sklearn.feature_extraction.text import CountVectorizer\n", 61 | "from sklearn.model_selection import train_test_split\n", 62 | "from sklearn.metrics import accuracy_score,classification_report,confusion_matrix" 63 | ] 64 | }, 65 | { 66 | "cell_type": "code", 67 | "execution_count": 10, 68 | "id": "b209e004-ab77-4407-8689-b4318944d47f", 69 | "metadata": {}, 70 | "outputs": [], 71 | "source": [ 72 | "# Load Dataset\n", 73 | "df = pd.read_csv(\"data/emotion_dataset_raw.csv\")" 74 | ] 75 | }, 76 | { 77 | "cell_type": "code", 78 | "execution_count": 11, 79 | "id": "fea2d4c0-3bdd-405e-ab69-507ceaac36cb", 80 | "metadata": {}, 81 | "outputs": [ 82 | { 83 | "data": { 84 | "text/html": [ 85 | "
\n", 86 | "\n", 99 | "\n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | "
EmotionText
0neutralWhy ?
1joySage Act upgrade on my to do list for tommorow.
2sadnessON THE WAY TO MY HOMEGIRL BABY FUNERAL!!! MAN ...
3joySuch an eye ! The true hazel eye-and so brill...
4joy@Iluvmiasantos ugh babe.. hugggzzz for u .! b...
\n", 135 | "
" 136 | ], 137 | "text/plain": [ 138 | " Emotion Text\n", 139 | "0 neutral Why ? \n", 140 | "1 joy Sage Act upgrade on my to do list for tommorow.\n", 141 | "2 sadness ON THE WAY TO MY HOMEGIRL BABY FUNERAL!!! MAN ...\n", 142 | "3 joy Such an eye ! The true hazel eye-and so brill...\n", 143 | "4 joy @Iluvmiasantos ugh babe.. hugggzzz for u .! b..." 144 | ] 145 | }, 146 | "execution_count": 11, 147 | "metadata": {}, 148 | "output_type": "execute_result" 149 | } 150 | ], 151 | "source": [ 152 | "df.head()" 153 | ] 154 | }, 155 | { 156 | "cell_type": "code", 157 | "execution_count": 12, 158 | "id": "430565a3-cf3b-4c6f-afa5-bafd084f5676", 159 | "metadata": {}, 160 | "outputs": [ 161 | { 162 | "data": { 163 | "text/plain": [ 164 | "joy 11045\n", 165 | "sadness 6722\n", 166 | "fear 5410\n", 167 | "anger 4297\n", 168 | "surprise 4062\n", 169 | "neutral 2254\n", 170 | "disgust 856\n", 171 | "shame 146\n", 172 | "Name: Emotion, dtype: int64" 173 | ] 174 | }, 175 | "execution_count": 12, 176 | "metadata": {}, 177 | "output_type": "execute_result" 178 | } 179 | ], 180 | "source": [ 181 | "# Value Counts\n", 182 | "df['Emotion'].value_counts()" 183 | ] 184 | }, 185 | { 186 | "cell_type": "code", 187 | "execution_count": 13, 188 | "id": "531d3449-a959-4a19-bff0-3ffed551e619", 189 | "metadata": {}, 190 | "outputs": [ 191 | { 192 | "data": { 193 | "text/plain": [ 194 | "" 195 | ] 196 | }, 197 | "execution_count": 13, 198 | "metadata": {}, 199 | "output_type": "execute_result" 200 | }, 201 | { 202 | "data": { 203 | "image/png": "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\n", 204 | "text/plain": [ 205 | "
" 206 | ] 207 | }, 208 | "metadata": { 209 | "needs_background": "light" 210 | }, 211 | "output_type": "display_data" 212 | } 213 | ], 214 | "source": [ 215 | "# Plot\n", 216 | "sns.countplot(x='Emotion',data=df)" 217 | ] 218 | }, 219 | { 220 | "cell_type": "code", 221 | "execution_count": 14, 222 | "id": "40f991d0-952f-40c1-bf00-f3476ce0436d", 223 | "metadata": { 224 | "collapsed": true, 225 | "jupyter": { 226 | "outputs_hidden": true 227 | }, 228 | "tags": [] 229 | }, 230 | "outputs": [ 231 | { 232 | "data": { 233 | "text/plain": [ 234 | "['BTC_ADDRESS_REGEX',\n", 235 | " 'CURRENCY_REGEX',\n", 236 | " 'CURRENCY_SYMB_REGEX',\n", 237 | " 'Counter',\n", 238 | " 'DATE_REGEX',\n", 239 | " 'EMAIL_REGEX',\n", 240 | " 'EMOJI_REGEX',\n", 241 | " 'HASTAG_REGEX',\n", 242 | " 'MASTERCard_REGEX',\n", 243 | " 'MD5_SHA_REGEX',\n", 244 | " 'MOST_COMMON_PUNCT_REGEX',\n", 245 | " 'NUMBERS_REGEX',\n", 246 | " 'PHONE_REGEX',\n", 247 | " 'PoBOX_REGEX',\n", 248 | " 'SPECIAL_CHARACTERS_REGEX',\n", 249 | " 'STOPWORDS',\n", 250 | " 'STOPWORDS_de',\n", 251 | " 'STOPWORDS_en',\n", 252 | " 'STOPWORDS_es',\n", 253 | " 'STOPWORDS_fr',\n", 254 | " 'STOPWORDS_ru',\n", 255 | " 'STOPWORDS_yo',\n", 256 | " 'STREET_ADDRESS_REGEX',\n", 257 | " 'TextFrame',\n", 258 | " 'URL_PATTERN',\n", 259 | " 'USER_HANDLES_REGEX',\n", 260 | " 'VISACard_REGEX',\n", 261 | " '__builtins__',\n", 262 | " '__cached__',\n", 263 | " '__doc__',\n", 264 | " '__file__',\n", 265 | " '__generate_text',\n", 266 | " '__loader__',\n", 267 | " '__name__',\n", 268 | " '__numbers_dict',\n", 269 | " '__package__',\n", 270 | " '__spec__',\n", 271 | " '_lex_richness_herdan',\n", 272 | " '_lex_richness_maas_ttr',\n", 273 | " 'clean_text',\n", 274 | " 'defaultdict',\n", 275 | " 'digit2words',\n", 276 | " 'extract_btc_address',\n", 277 | " 'extract_currencies',\n", 278 | " 'extract_currency_symbols',\n", 279 | " 'extract_dates',\n", 280 | " 'extract_emails',\n", 281 | " 'extract_emojis',\n", 282 | " 'extract_hashtags',\n", 283 | " 'extract_html_tags',\n", 284 | " 'extract_mastercard_addr',\n", 285 | " 'extract_md5sha',\n", 286 | " 'extract_numbers',\n", 287 | " 'extract_pattern',\n", 288 | " 'extract_phone_numbers',\n", 289 | " 'extract_postoffice_box',\n", 290 | " 'extract_shortwords',\n", 291 | " 'extract_special_characters',\n", 292 | " 'extract_stopwords',\n", 293 | " 'extract_street_address',\n", 294 | " 'extract_urls',\n", 295 | " 'extract_userhandles',\n", 296 | " 'extract_visacard_addr',\n", 297 | " 'fix_contractions',\n", 298 | " 'generate_sentence',\n", 299 | " 'hamming_distance',\n", 300 | " 'inverse_df',\n", 301 | " 'lexical_richness',\n", 302 | " 'markov_chain',\n", 303 | " 'math',\n", 304 | " 'nlargest',\n", 305 | " 'normalize',\n", 306 | " 'num2words',\n", 307 | " 'random',\n", 308 | " 're',\n", 309 | " 'read_txt',\n", 310 | " 'remove_bad_quotes',\n", 311 | " 'remove_btc_address',\n", 312 | " 'remove_currencies',\n", 313 | " 'remove_currency_symbols',\n", 314 | " 'remove_custom_pattern',\n", 315 | " 'remove_custom_words',\n", 316 | " 'remove_dates',\n", 317 | " 'remove_emails',\n", 318 | " 'remove_emojis',\n", 319 | " 'remove_hashtags',\n", 320 | " 'remove_html_tags',\n", 321 | " 'remove_mastercard_addr',\n", 322 | " 'remove_md5sha',\n", 323 | " 'remove_multiple_spaces',\n", 324 | " 'remove_non_ascii',\n", 325 | " 'remove_numbers',\n", 326 | " 'remove_phone_numbers',\n", 327 | " 'remove_postoffice_box',\n", 328 | " 'remove_puncts',\n", 329 | " 'remove_punctuations',\n", 330 | " 'remove_shortwords',\n", 331 | " 'remove_special_characters',\n", 332 | " 'remove_stopwords',\n", 333 | " 'remove_street_address',\n", 334 | " 'remove_urls',\n", 335 | " 'remove_userhandles',\n", 336 | " 'remove_visacard_addr',\n", 337 | " 'replace_bad_quotes',\n", 338 | " 'replace_currencies',\n", 339 | " 'replace_currency_symbols',\n", 340 | " 'replace_dates',\n", 341 | " 'replace_emails',\n", 342 | " 'replace_emojis',\n", 343 | " 'replace_numbers',\n", 344 | " 'replace_phone_numbers',\n", 345 | " 'replace_special_characters',\n", 346 | " 'replace_term',\n", 347 | " 'replace_urls',\n", 348 | " 'string',\n", 349 | " 'term_freq',\n", 350 | " 'to_txt',\n", 351 | " 'word_freq',\n", 352 | " 'word_length_freq']" 353 | ] 354 | }, 355 | "execution_count": 14, 356 | "metadata": {}, 357 | "output_type": "execute_result" 358 | } 359 | ], 360 | "source": [ 361 | "# Data Cleaning\n", 362 | "dir(nfx)" 363 | ] 364 | }, 365 | { 366 | "cell_type": "code", 367 | "execution_count": 17, 368 | "id": "b1f87847-a91c-4bd6-a307-d746eb5aa9a0", 369 | "metadata": {}, 370 | "outputs": [], 371 | "source": [ 372 | "# User handles\n", 373 | "df['Clean_Text'] = df['Text'].apply(nfx.remove_userhandles)" 374 | ] 375 | }, 376 | { 377 | "cell_type": "code", 378 | "execution_count": 18, 379 | "id": "03886bc3-1ac4-4f1b-842b-e5d2d770ff81", 380 | "metadata": {}, 381 | "outputs": [], 382 | "source": [ 383 | "# Stopwords\n", 384 | "df['Clean_Text'] = df['Clean_Text'].apply(nfx.remove_stopwords)" 385 | ] 386 | }, 387 | { 388 | "cell_type": "code", 389 | "execution_count": 19, 390 | "id": "0a0fcc0c-4adf-4f0b-b226-164659ad70ba", 391 | "metadata": { 392 | "collapsed": true, 393 | "jupyter": { 394 | "outputs_hidden": true 395 | }, 396 | "tags": [] 397 | }, 398 | "outputs": [ 399 | { 400 | "data": { 401 | "text/html": [ 402 | "
\n", 403 | "\n", 416 | "\n", 417 | " \n", 418 | " \n", 419 | " \n", 420 | " \n", 421 | " \n", 422 | " \n", 423 | " \n", 424 | " \n", 425 | " \n", 426 | " \n", 427 | " \n", 428 | " \n", 429 | " \n", 430 | " \n", 431 | " \n", 432 | " \n", 433 | " \n", 434 | " \n", 435 | " \n", 436 | " \n", 437 | " \n", 438 | " \n", 439 | " \n", 440 | " \n", 441 | " \n", 442 | " \n", 443 | " \n", 444 | " \n", 445 | " \n", 446 | " \n", 447 | " \n", 448 | " \n", 449 | " \n", 450 | " \n", 451 | " \n", 452 | " \n", 453 | " \n", 454 | " \n", 455 | " \n", 456 | " \n", 457 | " \n", 458 | " \n", 459 | " \n", 460 | " \n", 461 | " \n", 462 | " \n", 463 | " \n", 464 | " \n", 465 | " \n", 466 | " \n", 467 | " \n", 468 | " \n", 469 | " \n", 470 | " \n", 471 | " \n", 472 | " \n", 473 | " \n", 474 | " \n", 475 | " \n", 476 | " \n", 477 | " \n", 478 | " \n", 479 | " \n", 480 | " \n", 481 | " \n", 482 | " \n", 483 | " \n", 484 | " \n", 485 | " \n", 486 | " \n", 487 | " \n", 488 | " \n", 489 | " \n", 490 | " \n", 491 | " \n", 492 | " \n", 493 | "
EmotionTextClean_Text
0neutralWhy ??
1joySage Act upgrade on my to do list for tommorow.Sage Act upgrade list tommorow.
2sadnessON THE WAY TO MY HOMEGIRL BABY FUNERAL!!! MAN ...WAY HOMEGIRL BABY FUNERAL!!! MAN HATE FUNERALS...
3joySuch an eye ! The true hazel eye-and so brill...eye ! true hazel eye-and brilliant ! Regular f...
4joy@Iluvmiasantos ugh babe.. hugggzzz for u .! b...ugh babe.. hugggzzz u .! babe naamazed nga ako...
............
34787surprise@MichelGW have you gift! Hope you like it! It'...gift! Hope like it! hand wear ! It'll warm! Lol
34788joyThe world didnt give it to me..so the world MO...world didnt me..so world DEFINITELY cnt away!!!
34789angerA man robbed me today .man robbed today .
34790fearYouu call it JEALOUSY, I call it of #Losing YO...Youu JEALOUSY, #Losing YOU...
34791sadnessI think about you baby, and I dream about you ...think baby, dream time
\n", 494 | "

34792 rows × 3 columns

\n", 495 | "
" 496 | ], 497 | "text/plain": [ 498 | " Emotion Text \\\n", 499 | "0 neutral Why ? \n", 500 | "1 joy Sage Act upgrade on my to do list for tommorow. \n", 501 | "2 sadness ON THE WAY TO MY HOMEGIRL BABY FUNERAL!!! MAN ... \n", 502 | "3 joy Such an eye ! The true hazel eye-and so brill... \n", 503 | "4 joy @Iluvmiasantos ugh babe.. hugggzzz for u .! b... \n", 504 | "... ... ... \n", 505 | "34787 surprise @MichelGW have you gift! Hope you like it! It'... \n", 506 | "34788 joy The world didnt give it to me..so the world MO... \n", 507 | "34789 anger A man robbed me today . \n", 508 | "34790 fear Youu call it JEALOUSY, I call it of #Losing YO... \n", 509 | "34791 sadness I think about you baby, and I dream about you ... \n", 510 | "\n", 511 | " Clean_Text \n", 512 | "0 ? \n", 513 | "1 Sage Act upgrade list tommorow. \n", 514 | "2 WAY HOMEGIRL BABY FUNERAL!!! MAN HATE FUNERALS... \n", 515 | "3 eye ! true hazel eye-and brilliant ! Regular f... \n", 516 | "4 ugh babe.. hugggzzz u .! babe naamazed nga ako... \n", 517 | "... ... \n", 518 | "34787 gift! Hope like it! hand wear ! It'll warm! Lol \n", 519 | "34788 world didnt me..so world DEFINITELY cnt away!!! \n", 520 | "34789 man robbed today . \n", 521 | "34790 Youu JEALOUSY, #Losing YOU... \n", 522 | "34791 think baby, dream time \n", 523 | "\n", 524 | "[34792 rows x 3 columns]" 525 | ] 526 | }, 527 | "execution_count": 19, 528 | "metadata": {}, 529 | "output_type": "execute_result" 530 | } 531 | ], 532 | "source": [ 533 | "df" 534 | ] 535 | }, 536 | { 537 | "cell_type": "code", 538 | "execution_count": 20, 539 | "id": "450c39c0-79dd-4eaf-85fe-57e344eb81bd", 540 | "metadata": {}, 541 | "outputs": [], 542 | "source": [ 543 | "# Features & Labels\n", 544 | "Xfeatures = df['Clean_Text']\n", 545 | "ylabels = df['Emotion']" 546 | ] 547 | }, 548 | { 549 | "cell_type": "code", 550 | "execution_count": 21, 551 | "id": "27d7f976-c28f-449e-ae1a-53a42bbda4e8", 552 | "metadata": {}, 553 | "outputs": [], 554 | "source": [ 555 | "# Split Data\n", 556 | "x_train,x_test,y_train,y_test = train_test_split(Xfeatures,ylabels,test_size=0.3,random_state=42)" 557 | ] 558 | }, 559 | { 560 | "cell_type": "code", 561 | "execution_count": 22, 562 | "id": "2f086f29-dba9-40d2-a9dd-f06a6cca3a4c", 563 | "metadata": {}, 564 | "outputs": [], 565 | "source": [ 566 | "# Build Pipeline\n", 567 | "from sklearn.pipeline import Pipeline" 568 | ] 569 | }, 570 | { 571 | "cell_type": "code", 572 | "execution_count": 23, 573 | "id": "6b81cc86-2bef-40c2-b9a3-668caaadaff0", 574 | "metadata": {}, 575 | "outputs": [], 576 | "source": [ 577 | "# LogisticRegression Pipeline\n", 578 | "pipe_lr = Pipeline(steps=[('cv',CountVectorizer()),('lr',LogisticRegression())])" 579 | ] 580 | }, 581 | { 582 | "cell_type": "code", 583 | "execution_count": 24, 584 | "id": "dc64b9a7-efe2-4bc4-a0e7-46dff1d52b31", 585 | "metadata": { 586 | "collapsed": true, 587 | "jupyter": { 588 | "outputs_hidden": true 589 | }, 590 | "tags": [] 591 | }, 592 | "outputs": [ 593 | { 594 | "name": "stderr", 595 | "output_type": "stream", 596 | "text": [ 597 | "/usr/local/lib/python3.9/dist-packages/sklearn/linear_model/_logistic.py:763: ConvergenceWarning: lbfgs failed to converge (status=1):\n", 598 | "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", 599 | "\n", 600 | "Increase the number of iterations (max_iter) or scale the data as shown in:\n", 601 | " https://scikit-learn.org/stable/modules/preprocessing.html\n", 602 | "Please also refer to the documentation for alternative solver options:\n", 603 | " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", 604 | " n_iter_i = _check_optimize_result(\n" 605 | ] 606 | }, 607 | { 608 | "data": { 609 | "text/plain": [ 610 | "Pipeline(steps=[('cv', CountVectorizer()), ('lr', LogisticRegression())])" 611 | ] 612 | }, 613 | "execution_count": 24, 614 | "metadata": {}, 615 | "output_type": "execute_result" 616 | } 617 | ], 618 | "source": [ 619 | "# Train and Fit Data\n", 620 | "pipe_lr.fit(x_train,y_train)" 621 | ] 622 | }, 623 | { 624 | "cell_type": "code", 625 | "execution_count": 25, 626 | "id": "135ed6f8-56ff-4d53-85e3-541e3a7ae2d7", 627 | "metadata": {}, 628 | "outputs": [ 629 | { 630 | "data": { 631 | "text/plain": [ 632 | "Pipeline(steps=[('cv', CountVectorizer()), ('lr', LogisticRegression())])" 633 | ] 634 | }, 635 | "execution_count": 25, 636 | "metadata": {}, 637 | "output_type": "execute_result" 638 | } 639 | ], 640 | "source": [ 641 | "pipe_lr" 642 | ] 643 | }, 644 | { 645 | "cell_type": "code", 646 | "execution_count": 26, 647 | "id": "28396371-5f5c-4a3b-b974-164e047764f3", 648 | "metadata": {}, 649 | "outputs": [ 650 | { 651 | "data": { 652 | "text/plain": [ 653 | "0.6200421536692853" 654 | ] 655 | }, 656 | "execution_count": 26, 657 | "metadata": {}, 658 | "output_type": "execute_result" 659 | } 660 | ], 661 | "source": [ 662 | "# Check Accuracy\n", 663 | "pipe_lr.score(x_test,y_test)" 664 | ] 665 | }, 666 | { 667 | "cell_type": "code", 668 | "execution_count": 27, 669 | "id": "eb3a26b6-d09e-422f-991b-b08c48f55b75", 670 | "metadata": {}, 671 | "outputs": [], 672 | "source": [ 673 | "# Make A Prediction\n", 674 | "ex1 = \"This book was so interesting it made me happy\"" 675 | ] 676 | }, 677 | { 678 | "cell_type": "code", 679 | "execution_count": 28, 680 | "id": "b08597d9-6f59-45cb-a648-95b0da1ce313", 681 | "metadata": {}, 682 | "outputs": [ 683 | { 684 | "data": { 685 | "text/plain": [ 686 | "array(['joy'], dtype=object)" 687 | ] 688 | }, 689 | "execution_count": 28, 690 | "metadata": {}, 691 | "output_type": "execute_result" 692 | } 693 | ], 694 | "source": [ 695 | "pipe_lr.predict([ex1])" 696 | ] 697 | }, 698 | { 699 | "cell_type": "code", 700 | "execution_count": 29, 701 | "id": "5b3822ac-17fc-43dd-9bb7-8dad07a4d32c", 702 | "metadata": {}, 703 | "outputs": [ 704 | { 705 | "data": { 706 | "text/plain": [ 707 | "array([[1.60353503e-03, 7.05960421e-03, 6.95963589e-03, 9.43781635e-01,\n", 708 | " 1.00430913e-04, 2.63557471e-02, 6.65377751e-05, 1.40728742e-02]])" 709 | ] 710 | }, 711 | "execution_count": 29, 712 | "metadata": {}, 713 | "output_type": "execute_result" 714 | } 715 | ], 716 | "source": [ 717 | "# Prediction Prob\n", 718 | "pipe_lr.predict_proba([ex1])" 719 | ] 720 | }, 721 | { 722 | "cell_type": "code", 723 | "execution_count": 30, 724 | "id": "5b7c4596-d643-48e5-a777-79a6f55c49da", 725 | "metadata": {}, 726 | "outputs": [ 727 | { 728 | "data": { 729 | "text/plain": [ 730 | "array(['anger', 'disgust', 'fear', 'joy', 'neutral', 'sadness', 'shame',\n", 731 | " 'surprise'], dtype=object)" 732 | ] 733 | }, 734 | "execution_count": 30, 735 | "metadata": {}, 736 | "output_type": "execute_result" 737 | } 738 | ], 739 | "source": [ 740 | "# To Know the classes\n", 741 | "pipe_lr.classes_" 742 | ] 743 | }, 744 | { 745 | "cell_type": "code", 746 | "execution_count": 31, 747 | "id": "c0d40f62-b1fd-4748-a279-c8f50c748f26", 748 | "metadata": {}, 749 | "outputs": [], 750 | "source": [ 751 | "# Save Model & Pipeline\n", 752 | "import joblib\n", 753 | "pipeline_file = open(\"emotion_classifier_pipe_lr_03_june_2021.pkl\",\"wb\")\n", 754 | "joblib.dump(pipe_lr,pipeline_file)\n", 755 | "pipeline_file.close()" 756 | ] 757 | }, 758 | { 759 | "cell_type": "code", 760 | "execution_count": null, 761 | "id": "377c4e98-67f0-45e5-8dd5-0417585754f0", 762 | "metadata": {}, 763 | "outputs": [], 764 | "source": [] 765 | } 766 | ], 767 | "metadata": { 768 | "kernelspec": { 769 | "display_name": "Python 3", 770 | "language": "python", 771 | "name": "python3" 772 | }, 773 | "language_info": { 774 | "codemirror_mode": { 775 | "name": "ipython", 776 | "version": 3 777 | }, 778 | "file_extension": ".py", 779 | "mimetype": "text/x-python", 780 | "name": "python", 781 | "nbconvert_exporter": "python", 782 | "pygments_lexer": "ipython3", 783 | "version": "3.9.1+" 784 | } 785 | }, 786 | "nbformat": 4, 787 | "nbformat_minor": 5 788 | } 789 | -------------------------------------------------------------------------------- /notebooks/emotion_classifier_pipe_lr_03_june_2021.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jcharis/end2end-nlp-project/f82d87ed6d2608ad2c9b43e29e06da53429c1915/notebooks/emotion_classifier_pipe_lr_03_june_2021.pkl --------------------------------------------------------------------------------