Tweet Classification Feature-Selection NLTK - PullRequest
5 голосов
/ 08 января 2012

В настоящее время я пытаюсь классифицировать твиты, используя наивный байесовский классификатор в NLTK.Я классифицирую твиты, связанные с конкретными биржевыми символами, используя префикс '$' (например, $ AAPL).Я основывал свой скрипт на Python на этом посте в блоге: Анализ настроений в Twitter с использованием Python и NLTK .До сих пор я получаю достаточно хорошие результаты.Тем не менее, я чувствую, что есть много, много возможностей для улучшения.

В моем методе выбора слова-функции я решил реализовать алгоритм tf-idf для выбора наиболее информативных слов.Сделав это, я почувствовал, что результаты не такие впечатляющие.

Затем я применил эту технику в следующем блоге: Анализ настроений в текстовой классификации. Устранение недостатка информационных функций .Результаты были очень похожи на результаты, полученные с помощью алгоритма tf-idf, что побудило меня более тщательно изучить список «Наиболее информативных функций» моего классификатора.Именно тогда я понял, что у меня есть большая проблема:

Твиты и реальный язык не используют одну и ту же грамматику и формулировку.В обычном тексте многие статьи и глаголы можно выделить, используя tf-idf или stopwords.Однако в корпусе твитов некоторые крайне неинформативные слова, такие как «,» и «есть» и т. Д., Встречаются так же, как и слова, которые имеют решающее значение для правильной категоризации текста.Я не могу просто удалить все слова, которые имеют менее 3 букв, потому что некоторые неинформативные функции больше, а некоторые информативные меньше.

Если бы я мог, я бы не хотел использовать стоп-слова, из-за необходимости часто обновлять список.Однако, если это мой единственный вариант, я думаю, мне придется пойти с ним.

Итак, если подвести итог моего вопроса, кто-нибудь знает, как действительно получить наиболее информативные слова вконкретный источник, который является твит?

РЕДАКТИРОВАТЬ: я пытаюсь классифицировать на три группы: положительные, отрицательные и нейтральные.Кроме того, мне было интересно, для TF-IDF, я должен обрезать слова только с низкими баллами, или же некоторые с более высокими баллами?В каждом случае, какой процент словарного запаса источника текста вы бы исключили из процесса выбора функции?

1 Ответ

2 голосов
/ 08 января 2012

В блоге, на который вы ссылаетесь, описан метод show_most_inforrative_features , но NaiveBayesClassifier также имеет метод most_inforrative_features , который возвращает функции а не просто печатать их. Вы можете просто установить отсечение, основываясь на ваших учебных наборах, такие как «the», «and» и другие неважные функции будут в нижней части списка с точки зрения информативности.

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

...