Выделение и сокращение признаков для классификации текста

в настоящее время я работаю над проектом, а простой анализатор настроений такое, что будет 2 и 3 классы на отдельные случаи. Я использую корпус это довольно богатое в средство уникальные слова (около 200.000). Я использовал "мешок слов" метод выбор функции и уменьшить количество уникальные возможности, исключение сделано должное к a пороговое значение of частота возникновения. The окончательный набор функций включает в себя около 20.000 функций, которые на самом деле 90% снижение, а недостаточно на точность тест-предсказание. Я использую LibSVM и SVM-light в свою очередь, для обучения и прогнозирования (как линейный и ядро RBF) и Python и Баш в целом.

на высокая точность до сих пор наблюдается около 75% и нужно по крайней мере 90%. Это относится к двоичной классификации. Для обучение нескольких классов точность падает до ~60%. Я!--1-- > нужно по крайней мере 90% в обоих случаях и не может понять, как его увеличить: через оптимизация параметров тренировки или через оптимизацию функции выбор?

Я читал статьи о выбор функции в классификации текста и я обнаружил, что используются три разных метода, которые на самом деле имеют четкую корреляцию между собой. Эти методы следующие:

  • частотный подход "мешок слов" (лук)
  • Информация Набрать (IG)
  • X^2 Статистика (чи)

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

большое спасибо, и если вам нужна дополнительная информация для помочь, просто дайте мне знать.


  • @larsmans: Частотный Порог: Я поиск вхождений уникальных слов в примерах, например, если слово встречается в разных примерах достаточно часто, оно включается в набор функций как уникальный объект.

  • @TheManWithNoName: прежде всего, спасибо за ваши усилия в объяснении общих проблем классификации документов. Я исследовал и экспериментировал со всеми методами, которые вы предлагаете и другими. Я нашел Пропорциональная Разница (PD) метод лучший для функции выбор, где функции являются uni-граммами и Срок Нахождения (TP) для взвешивания (я не понял, почему вы отметили Терм-Частота-Обратный-Документ-Частота (TF-IDF) как метод индексирования, я скорее рассматриваю его как функция взвешивания подхода). предварительная обработка также является важным аспектом для этой задачи, как вы упомянули. Я использовал определенные типы исключения строк для уточнения данных, а также морфологические разбор и stemming. Также обратите внимание, что я работаю над турецкий, имеющего разные характеристики по сравнению с английским. Наконец, мне удалось дотянуться ~88% точность (F-меры) для бинарные классификация и ~84% на мульти-класс. Эти значения являются твердыми доказательствами успеха модели, которую я использовал. Это то, что я сделал до сих пор. Теперь, работая над моделями кластеризации и сокращения, пробовал LDA и LSI и двигаясь на moVMF а может быть сферической модели (LDA + moVMF), который, кажется, лучше работает на корпусе, имеют объективную природу, например, корпус новостей. Если у вас есть информация и рекомендации по этим вопросам, я буду признателен. Мне нужна информация, особенно для настройки интерфейса (ориентированного на python, с открытым исходным кодом) между уменьшение размера пространственных объектов методы (LDA, LSI, moVMF etc.) и кластеризации методы (k-means, иерархический etc.).

4 ответов


Это, вероятно, немного поздно к столу, но...

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

вы предварительно обрабатываете документы перед выполнением tokensiation / representation в формате мешка слов? Простое удаление стоп-слов или знаков препинания может значительно повысить точность.

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

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

Что касается вашего использования частоты документов, вы просто используете вероятность / процент документов, содержащих термин, или вы используете плотность терминов, найденных в документах? Если категория один имеет только 10 дументов, и каждый из них содержит термин один раз, то категория один действительно связана с документом. Однако, если категория имеет только 10 документов, каждый из которых содержит один и тот же термин сто раз каждый, тогда очевидно, что категория два имеет гораздо более высокое отношение к этому термину, чем категория один. Если плотность терминов не учитывается, эта информация теряется, и чем меньше категорий вы имеете, тем большее влияние эта потеря оказывает. Аналогичным образом, не всегда благоразумно сохранять термины только с высокой частотой, поскольку они могут фактически не предоставлять никакой полезной информации. Например, если термин появляется сто раз в каждом документе, то это считается термином шума, и, хотя он выглядит важным, нет практической ценности в его сохранении в вашем наборе функций.

также как вы индексируете данные, используете ли вы векторную модель пространства с простым булевым индексированием или более сложной мерой, такой как TF-IDF? Учитывая небольшое количество категорий в вашем сценарии, более сложная мера будет полезна, поскольку они могут учитывать важность термина для каждой категории по отношению к ее важности во всем набор данных.

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


дополнительные

на основе новой информации, это звучит так, как будто вы находитесь на правильном пути и 84%+ точность (F1 или BEP-точность и отзыв на основе многоклассовых проблем), как правило, считается очень хорошим для большинства наборов данных. Возможно, вы уже успешно приобрели все информационные функции из данных или некоторые из них все еще обрезаются.

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

бумага с информацией о выбросах

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

в отношении LDA, LSI и moVMF, боюсь, у меня слишком мало опыта в них, чтобы дать какое-либо руководство. К сожалению, я также не работал с турецкими наборами данных или языком python.


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

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


линейный svm порекомендован для высоких габаритных характеристик. Исходя из моего опыта, конечное ограничение точности SVM зависит от положительных и отрицательных "особенностей". Вы можете выполнить поиск по сетке (или в случае линейного svm вы можете просто найти наилучшее стоимостное значение), чтобы найти оптимальные параметры для максимальной точности, но в конце концов вы ограничены разделяемостью ваших наборов функций. Тот факт, что вы не получаете 90%, означает, что у вас все еще есть работа по поиску лучшие возможности для описания членов класса.


Я уверен, что это слишком поздно, чтобы использовать для плаката, но, возможно, это будет полезно кому-то еще. Хи-квадрат подход к сокращению функций довольно прост в реализации. Предполагая двоичную классификацию BoW на классы C1 и C2, для каждого признака f в candidate_features вычислите freq f в C1; вычислите общие слова C1; повторите вычисления для C2; вычислите chi-sqaure определите фильтр candidate_features на основе того, является ли p-значение ниже определенного порога (например, p http://streamhacker.com/2010/06/16/text-classification-sentiment-analysis-eliminate-low-information-features/