I have a data set consisting of 455 rows spread over 21 different classes. The data set is imbalanced as well as you can see below.
job_alerts 45 howto_apply 40 application_status 31 salary 30 job_close_date 30 multiple_role 27 feedback 26 assessment_campatilibility 24 interview_reschedule 23 disability 22 reinstate_application 19 job_account_issue 19 assessment_link_problem 16 age_limit 16 assessment_timebox 16 cv_past_experience 15 late_for_interview 13 interview_response_time 13 work_experience 11 assessment_validity 10 special_needs_at_work 9
I'm trying to perform classification on this. Firstly, when preprocessing the data I convert the text to lowercase, remove stopwords and punctuation and convert words to their lemmas using spaCy.
So far, I have tried the TextCategorizer in spaCy which uses a simple CNN for classification and I'm getting around 70% accuracy on an 80-20 split of the data. I have also tried various Sklearn algorithms such as SVC, LogisticRegression, RandomForestClassifier and MultinomialDB with the TfIDVectorizer. I have used GridSearchCV to tune the parameters. The best results I get are with SVC at around 74-75% accuracy.
I want to know what else I can try to improve my accuracy. I am a beginner to NLP and I haven't worked on something like this before. Right now the ideas I have are to improve the TfIdVectorizer through some parameter tuning and to try a One vs all classifier for SVC. What else can you suggest to me?