Подтвердить что ты не робот

Выбор и сокращение функций для классификации текста

В настоящее время я работаю над проектом, простым анализатором чувств, так что в отдельных случаях будут 2 и 3 класса. Я использую corpus, который довольно богатый в средствах уникальных слов (около 200 000). Я использовал метод суммирования для выбора функции и для уменьшения количества уникальных функций, устранение выполняется из-за пороговое значение частоты появления. окончательный набор функций включает около 20 000 функций, что на самом деле составляет 90% уменьшение, но недостаточно для предполагаемой точности strong > тестового прогноза. Я использую LibSVM и SVM-light в свою очередь для обучения и прогнозирования (как linear, так и ядро ​​RBF) и также Python и Bash.

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

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

  • Частотный подход мешков слов (BOW)
  • Усиление информации (IG)
  • X ^ 2 Статистика (CHI)

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

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


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

  • @TheManWithNoName: Прежде всего, спасибо за ваши усилия в объяснении общих проблем классификации документов. Я изучил и экспериментировал все методы, которые вы выдвигали, и другие. Я нашел метод Пропорциональный разброс (PD) наилучшим для выбора функции, где функции являются униграммами и Срок присутствия (TP) для взвешивания (я не понял, почему вы отметили Term-Frequency-Inverse-Document-Frequency (TF-IDF) как метод индексирования, я скорее рассматриваю его как подход для взвешивания функций). Предварительная обработка также является важным аспектом для этой задачи, как вы упомянули. Я использовал определенные типы устранения строк для уточнения данных, а также морфологического разбора и stem. Также обратите внимание, что я работаю над турецким, который имеет разные характеристики по сравнению с английским. Наконец, мне удалось достичь ~ 88% точности (f-measure) для двоичной классификации и ~ 84% для мультикласса. Эти значения являются надежными доказательствами успеха модели, которую я использовал. Это то, что я сделал до сих пор. Теперь, работая над моделями кластеризации и сокращения, попробовали LDA и LSI и перешли на moVMF и, возможно, сферические модели (LDA + moVMF), который, похоже, работает лучше на корпусе, у которого есть объективный характер, например новостной корпус. Если у вас есть какая-либо информация и рекомендации по этим вопросам, я буду признателен. Мне особенно нужна информация о настройке интерфейса (ориентированного на питон, open-source) между методами уменьшения размера пространства (LDA, LSI, moVMF и т.д.) И методов кластеризации (k -средства, иерархические и т.д.).

4b9b3361

Ответ 1

Вероятно, это немного поздно для таблицы, но...

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

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

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

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

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

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

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


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

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

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

Бумага с информацией об отклонении откликов

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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