Model Overfitting in text classification how to solve?

This is my CNN model i am doing text classification on mental health social media data. the model is overfitting as validation loss is much greater than training loss. There are three columns(Text, Title,label) and 7 classes in dataset

depression 256140

Anxiety 85916

bipolar 41262

mentalhealth 39161

BPD 37996

schizophrenia 17388

autism 7110

I am providing my model and its history. For this particular issue i need, interpretation of how to interpret the model and a solution. Here is my model

import tensorflow.keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Embedding, GRU, 
LSTM,Dropout,Conv1D,MaxPooling1D,GlobalMaxPooling1D
#from tensorflow.keras.layers.Embedding import Embedding
from tensorflow.keras.initializers import Constant
from tensorflow.keras.models import load_model
#!pip install pyyaml h5py 
import tensorflow as tf
from tensorflow.keras import optimizers
#len(np.unique(dataset[Subreddit]))
embedded = Embedding(len(word_index) + 1, 300, weights=[embedding_matrix], trainable=False)
model = Sequential()

model.add(embedded)
model.add(Conv1D(128,5,activation='relu'))
model.add(Dropout(0.5))
model.add(MaxPooling1D(pool_size=4))
model.add(Conv1D(32,5, activation='relu'))
model.add(Dropout(0.5))
model.add(GlobalMaxPooling1D())
model.add(Dense(7,activation='softmax'))#len(np.unique(dataset[Subreddit]))
optimizer =  optimizers.Adam(learning_rate=0.0001)
model.compile(optimizer=optimizer,
          loss=categorical_crossentropy,
          metrics=['accuracy'])
print(model.summary())

Here is my code for training the model

from tensorflow.keras.callbacks import ModelCheckpoint
from tensorflow.keras.utils import to_categorical
from sklearn import metrics
from sklearn.model_selection import KFold
from sklearn.metrics import f1_score, accuracy_score
from tensorflow.keras.callbacks import EarlyStopping

checkpoint_filepath_1 = 'callbacks_models/cnn.{epoch:02d}-{val_loss:.2f}.h5'
checkpoint_filepath_2 = 'callbacks_models/complete_best_cnn_model.h5'

metrics = []
callbacks_1 = ModelCheckpoint(
filepath=checkpoint_filepath_2,
monitor='val_loss',
mode='min',
save_best_only=False,
save_weights_only=False,
save_freq='epoch')
callbacks_2 = ModelCheckpoint(
filepath=checkpoint_filepath,
monitor='val_loss',
mode='min',
save_best_only=True)

es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=5)
hist=model.fit(train_seq_x, y_train, validation_data=(val_seq_x, y_val), callbacks = 
[es,callbacks_1,callbacks_2], epochs=30, batch_size=32)

min_val_score = min(hist.history['val_loss'])
print (\nMinimum validation loss = , min_val_score)
model.save(Complete_cnn_model.h5)
print(y_test)
y_test_1 = pd.DataFrame(y_test)
y_test_1=np.argmax(y_test_1.values, axis=1)

y_pred = model.predict(test_seq_x)
#print(y_pred)
y_pred_1=np.argmax(y_pred, axis=1)
print(accuracy_score(y_test_1, y_pred_1))

#cm = confusion_matrix(y_val_1, y_pred_1)
#print(cm)

# Retrieve the mean of the result
print(%.3f % np.array(metrics).mean())
import matplotlib.pyplot as plt
print(hist.history.keys())
# summarize history for accuracy
plt.plot(hist.history['accuracy'])
plt.plot(hist.history['val_accuracy'])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()
# summarize history for loss
plt.plot(hist.history['loss'])
plt.plot(hist.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()

The model stopped early as provided

The train and val loss and accuracy as follows:

The confusion matrix and classification report on test data is as follows

Topic text-classification overfitting stanford-nlp convolutional-neural-network classification

Category Data Science

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.