Проблема, с которой я сталкиваюсь, состоит в классификации коротких текстов на несколько классов. Мой текущий подход заключается в использовании частотных терминов tf-idf и изучении простого линейного классификатора (логистическая регрессия). Это работает достаточно хорошо (около 90% макроса F-1 в тестовом наборе, почти 100% в тренировочном наборе). Большой проблемой являются невидимые слова / н-граммы.
Я пытаюсь улучшить классификатор, добавляя другие функции, например, вектор фиксированного размера, вычисленный с использованием распределительных сходств (как вычислено word2vec) или другие категориальные особенности примеров. Моя идея состояла в том, чтобы просто добавить функции в разреженные функции ввода из пакета слов. Тем не менее, это приводит к ухудшению производительности на тестовом и тренировочном наборе. Дополнительные функции сами по себе дают около 80% F-1 в тестовом наборе, поэтому они не являются мусором. Масштабирование функций также не помогло. В настоящее время я думаю, что такого рода функции не очень хорошо сочетаются с (редким) набором слов.
Таким образом, вопрос заключается в следующем: если дополнительные функции предоставляют дополнительную информацию, каков наилучший способ их включения? Может ли обучение отдельных классификаторов и объединение их в какую-то ансамблевую работу (это, вероятно, будет иметь недостаток, заключающийся в том, что никакое взаимодействие между функциями различных классификаторов не может быть зафиксировано)? Есть ли другие, более сложные модели, которые я должен рассмотреть?
Ответы:
Если я правильно понимаю, у вас есть две формы функций для ваших моделей. (1) Текстовые данные, которые вы представили в виде разреженного пакета слов и (2) более традиционные плотные элементы. Если это так, то есть 3 общих подхода:
TruncatedSVD
) для своих разреженных данных, чтобы сделать их плотными и объединить их в единую плотную матрицу для обучения ваших моделей.hstack
в одну разреженную матрицу для обучения ваших моделей.Pipeline
если хотите ).Все три подхода действительны и имеют свои плюсы и минусы. Лично я нахожу (1), как правило, худшим, потому что он, относительно говоря, чрезвычайно медленный. Я также нахожу (3), как правило, лучшим, будучи достаточно быстрым и приводящим к очень хорошим прогнозам. Очевидно, что вы можете сделать их комбинацию, если захотите сделать более обширный ансамбль.
Что касается используемых вами алгоритмов, то они, по сути, все могут вписываться в эту структуру. Логистическая регрессия в большинстве случаев работает на удивление хорошо, но другие могут добиться большего успеха в зависимости от проблемы и от того, насколько хорошо вы их настроили. Я сам неравнодушен к GBM, но суть в том, что вы можете попробовать столько алгоритмов, сколько захотите, и даже выполнение простых взвешенных ансамблей их прогнозов почти всегда приведет к лучшему общему решению.
источник
Линейные модели просто добавляют свои характеристики, умноженные на соответствующие веса. Если, например, у вас есть 1000 разреженных объектов, только 3 или 4 из которых активны в каждом экземпляре (а остальные - нули) и 20 плотных объектов, которые не являются нулями, то весьма вероятно, что плотные объекты будут составлять большую часть воздействие, в то время как редкие особенности добавят только небольшую ценность. Вы можете проверить это, посмотрев на веса объектов для нескольких случаев и их влияние на итоговую сумму.
Один из способов исправить это - отказаться от аддитивной модели. Вот пара моделей-кандидатов.
SVM основан на разделении гиперплоскостей. Хотя гиперплоскость сама является линейной моделью, SVM не суммирует ее параметры, а вместо этого пытается оптимально разделить пространство признаков. Учитывая количество функций, я бы сказал, что линейный SVM должен работать нормально, в то время как более сложные ядра могут иметь тенденцию превышать данные.
Несмотря на свое название, Наивный Байес является довольно мощной статистической моделью, которая показала хорошие результаты для классификации текста. Он также достаточно гибок, чтобы фиксировать дисбаланс по частоте разреженных и плотных объектов, поэтому вам обязательно стоит попробовать.
Наконец, случайные леса могут работать как хороший метод ансамбля в этом случае. Рандомизация гарантирует, что различные виды функций (разреженные / плотные) будут использоваться в качестве основных узлов решений в разных деревьях. Деревья RF / принятия решений также хороши для проверки самих объектов, поэтому в любом случае стоит отметить их структуру.
Обратите внимание, что все эти методы имеют свои недостатки, которые могут превратить их в мусор в вашем случае. Объединение разреженных и плотных функций не очень хорошо изученная задача, поэтому дайте нам знать, какой из этих подходов лучше всего подходит для вашего случая.
источник