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