То, что предложено ниже, носит рекомендательный характер. Далеко не факт, что пункты приведут к гарантированному улучшению скора (мы на это только надеемся).

Порядок советов околопроизвольный

https://github.com/Combo-Breaker/nlp_course_2022/blob/main/1/1_2_preprocessing.ipynb

https://github.com/Combo-Breaker/nlp_course_2022/blob/main/1/1_3_simple_text_models.ipynb

https://github.com/Combo-Breaker/nlp_course_2022/blob/main/3/3_classification.ipynb

Общие рекомендации:

  1. Проанализируйте тексты отзывов:
    1. По каждому из 5-ти классов посчитайте наиболее часто встречающиеся слова
      1. уникальным среди них — особое внимание модели
      2. если слово встречается во всех классах примерно одинаково часто — скорее всего оно неважное; попробуйте добавить его в список стоп-слов, если его там нет
  2. Попробуйте добавить “языковые” признаки:
    1. например, частоту частей речи в отзыве
  3. Про токены:
    1. учтите, что на уровне токенов может быть полезно учитывать не только слова. Смайлики и знаки препинания могут помогать предсказать тональность отзыва. Могут и не помочь, кто знает
    2. есть ощущение, что Bag-of-Words можно не пробовать (но мало ли)
    3. в бейзлайне используются уни- и биграммы; попробуйте добавить три- и тетраграммы (https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html)
      1. Вряд ли стоит брать все фичи — поиграйтесь, топ сколько вы будете брать
      2. после обучения модели посмотрите на feature_importances; и установите, каким токенам они соответствуют
    4. в бейзлайне токенизация на уровне слов — попробуйте перейти к предложениям (имеет смысл попытаться) или символам (в успех верю не очень)
  4. Классификаторы:
    1. вообще, линейные справляются неплохо (и относительно быстро); попробуйте ещё
      1. SVM (с ядрами и без)
      2. kNN
      3. Деревья и их ансамбли пробовать тоже возможно имеет смысл, но это наверняка будет очень долго
      4. вы же сохраняли модели — ансамблируйте (инференс же недолгий)