1

Я делаю классификацию настроений в блогах из 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 слишком велика.

Я надеюсь найти очевидную ошибку в моем подходе или что я могу сделать для повышения точности.

Спасибо за любой совет !!

+0

Простите потенциально неосведомленный вопрос, но какой-либо из ваших методов учитывает длину предложения и пунктуацию? Если нет, и вы хотите ответить, почему бы и нет? –

ответ

1

Вы правы, проблема в этом слишком большое количество функций, и вы через прилегающие к нему ..

Рассмотрим следующее:

1- Нормализовать каждый блог, удалить номера , знаки препинания, ссылки, теги html, если таковые имеются.

2- Рассматривайте Stemming вместо лемматизации, Stemmers намного проще, меньше и обычно быстрее, чем lemmatizers, и для многих приложений их результаты достаточно хороши.

http://nlp.stanford.edu/IR-book/html/htmledition/stemming-and-lemmatization-1.html

Морфологический обычно относится к сырой эвристического процесса, который отрезает концы слов в надежде на достижение этой цели правильно большую часть времени, и часто включает в себя удаление словообразовательных аффиксов. Лемматизации обычно относится к делать вещи правильно с использованием словаря и морфологического анализа слов, как правило, с целью удаления словоизменения окончаний только

3- я работал в аналогичной проблемой раньше, что я сделал для извлечения особенностей, является для каждого чувства 6 настроений, Я получил самые частые 500 слов (для каждого класса), а затем удалил общие стебли между их союзом. В результате список содержит около 2000 слов, которые затем используются в качестве списка функций. Затем я использовал классификатор Naive Bayes.

Смежные вопросы