Я делаю классификацию настроений в блогах из Livejournal с scikit-learn python. У меня около 40000 сообщений, и я использую 4/5 из них как набор для обучения, а останки - как набор тестов.классификация чувств с контролируемым обучением
Есть 6 настроения: ['joy','sadness','anger','surprise','love','fear']
Я experiented с несколькими классификаторов (в том числе наивных Байеса, SVM, синг ..), но проблема в том, что прогноз очень и очень неточно. На самом деле это почти тривиально, потому что почти каждый блог в тестовом наборе предсказывается «радостью», что является самым частым чувством в наборе поездов (45%).
Набор функций в основном включает в себя мешок с функциями слов (я пробовал униграммы и биграмы), для униграммы всего 613822 функций.
Besiedes, я добавил некоторые функции на основе лексики, используя оценки SentiWordnet: вычисление суммы положительных и отрицательных оценок существительных, приращений, ajvs, глаголов и полных слов. в блоге. Поэтому для каждого блога будет 613822 + 5 функций.
Я также применил некоторые методы выбора функций, такие как chi2, чтобы уменьшить номер функции, но нет никаких очевидных улучшений.
scikit-learn's CountVectorizer
и DictVectorizer
используются для векторизации объектов, а Pipeline.FeatureUnion
используется для их сцепления.
Я думаю, что плохой результат обусловлен слишком большим набором функций слов - возможно, в тексте слишком много слов с ошибками? (Я уже удалил слова остановки и выполнил некоторые задания лемматизации) Я также считаю, что функции на основе лексики не работают, потому что функция BOW слишком велика.
Я надеюсь найти очевидную ошибку в моем подходе или что я могу сделать для повышения точности.
Спасибо за любой совет !!
Простите потенциально неосведомленный вопрос, но какой-либо из ваших методов учитывает длину предложения и пунктуацию? Если нет, и вы хотите ответить, почему бы и нет? –