Категоризація тексту: поєднання різного роду ознак


19

Проблема, яку я вирішую, - класифікація коротких текстів на кілька класів. Мій сучасний підхід полягає у використанні зважених термінальних частот tf-idf та вивченні простого лінійного класифікатора (логістична регресія). Це працює досить добре (близько 90% макро F-1 на тестовому наборі, майже 100% на навчальному наборі). Великою проблемою є невидимі слова / n-грам.

Я намагаюся вдосконалити класифікатор, додаючи інші функції, наприклад, вектор фіксованого розміру, обчислений за допомогою подібності розподілу (як обчислюється word2vec) або інших категоричних особливостей прикладів. Моя ідея полягала в тому, щоб просто додати функції до функцій рідкого введення з пакету слів. Однак це призводить до гірших показників на тестовому і навчальному наборі. Додаткові можливості самі по собі дають близько 80% F-1 на тестовому наборі, тому вони не є сміттям. Масштабування функцій також не допомогло. Моє сучасне мислення полягає в тому, що такі особливості не добре поєднуються з (рідкісним) мішком функцій слів.

Отже, питання: якщо припустити, що додаткові функції надають додаткову інформацію, який найкращий спосіб їх включити? Чи можна було б підготувати окремі класифікатори та поєднати їх у якомусь ансамблевому творі (це, мабуть, мав би той недолік, що жодна взаємодія між особливостями різних класифікаторів не може бути зафіксована)? Чи є інші складніші моделі, які я повинен розглянути?


3
Деякі оновлення: мені вдалося досягти прийнятних результатів за допомогою l2-нормалізації додаткових щільних векторів. Я помилково припускав, що sklearn StandardScaler це зробить. Я все ще шукаю більш складні методи, які дозволять мені моделювати залежність міток або включати довіру підкласифікаторів.
elmille

Я робив базовий той же експеримент минулого року і зіткнувся з точно такою ж проблемою, що і у вас. Чи може ваш вектор word2vec після процесу нормалізації l2 перемогти BOW? Я не робив нормалізацію l2, але навіть після тестування багатьох методів післяобробки семантичний вектор все ще на 2-4 абсолютних відсотка відстає від функцій BOW tf / idf, мені цікаво, що цей напрямок є дедадендом. Моє оригінальне прагнення - поєднати щільно семантичний вектор з традиційним BOW і подивитися, чи може це покращити класифікацію / моделювання виступів тем. BTW: над набором даних ви працювали, моя 20newsgroup.

Я працював із набором даних для змагань CIKM 2014. Для мене векторні уявлення ніколи не могли перемогти BOW за допомогою ваг tf-idf. Мій план полягав у використанні їх для покращення якості. На мій досвід (для класифікації тексту) деяка форма tf-idf + лінійна модель з n-грамами є надзвичайно сильним підходом. В даний час я експериментую з конволюційними нейронними мережами і навіть з цими (більш-менш) складними моделями, які важко подолати.
elmille

На мод: Вибачте, що у мене немає 50 репутації, тому я не можу писати в області коментарів. Привіт Елміль: Так, саме це я переживаю за весь тест. Однак чи вважаєте ви це слово vec + BOW help? З мого досвіду, коли я поєдную слово vec із BOW tf-idf (у моєму випадку цей vec фактично є загальним вектором у всій статті, його не word-vec, але дуже схоже), продуктивність стає ще нижчою. Я спочатку думаю, що це повинно бути BOW + vec> BOW> vec. Оскільки вони містять інформацію взаємодопомоги. Фактично результат BOW> vec> BOW + vec. Тоді я роблю стандартне масштабування та нормалізацію для

Відповіді:


13

Якщо я правильно розумію, у вас по суті є дві форми функцій для ваших моделей. (1) Текстові дані, які ви представили як розріджений мішок слів та (2) більш традиційні щільні функції. Якщо це так, то існує 3 загальних підходу:

  1. Виконайте зменшення розмірності (наприклад, LSA via TruncatedSVD) на ваших рідких даних, щоб зробити їх густими та об'єднати функції в єдину щільну матрицю для підготовки ваших моделей.
  2. Додайте кілька рідких функцій до вашої рідкої матриці, використовуючи щось на зразок scipy hstackв єдину розріджену матрицю для тренування ваших моделей.
  3. Створіть модель, використовуючи лише розрізнені текстові дані, а потім комбінуйте її передбачення (ймовірності, якщо це класифікація) як щільну особливість з іншими щільними функціями, щоб створити модель (тобто: складання за допомогою складання). Якщо ви йдете цим маршрутом, пам’ятайте, що використовуйте лише передбачення резюме як функції для тренування вашої моделі, інакше ви, швидше за все, переобтяжете досить непогано (за бажанням ви можете зробити цілий клас, щоб зробити це все протягом одного Pipeline).

Усі три підходи є дійсними і мають свої плюси і мінуси. Особисто я вважаю (1), як правило, найгіршим, оскільки це, відносно кажучи, надзвичайно повільно. Я також вважаю (3), як правило, найкращим, будучи достатньо швидким і призводячи до дуже хороших прогнозів. Очевидно, ви також можете комбінувати їх, якщо ви готові зробити більш масштабне складання.

Що стосується алгоритмів, якими ви користуєтесь, вони по суті можуть усі вписатись у цю рамку. Логістична регресія більшу частину часу спрацьовує напрочуд добре, але інші можуть бути кращими залежно від проблеми та наскільки ви їх налаштовуєте. Я частково ставлюся до ГБМ, але суть полягає в тому, що ви можете спробувати стільки алгоритмів, скільки б вам хотілося, і навіть виконання простих зважених ансамблів їх прогнозів майже завжди призведе до кращого загального рішення.


10

Лінійні моделі просто додають свої характеристики, помножені на відповідні ваги. Якщо, наприклад, у вас є 1000 розріджених функцій, лише 3 або 4 з яких активні в кожному екземплярі (а інші - нулі) та 20 щільних функцій, які є не нулями, то, швидше за все, щільні функції зроблять більшість вплив, хоча рідкісні функції додадуть лише невелику цінність. Ви можете перевірити це, переглянувши вагові функції декількох примірників та як вони впливають на отриману суму.

Один із способів виправити це - відмовитися від адитивної моделі. Ось пара моделей-кандидатів.

SVM заснований на розділенні гіперпланів. Хоча гіперплан сама по собі лінійна модель, SVM не підсумовує свої параметри, а натомість намагається оптимально розділити простір функцій. Враховуючи кількість функцій, я б сказав, що лінійний SVM повинен працювати нормально, тоді як складніші ядра можуть мати перевагу над даними.

Незважаючи на свою назву, Naive Bayes - досить потужна статистична модель, яка показала хороші результати для класифікації тексту. Він також достатньо гнучкий, щоб фіксувати дисбаланс у частоті рідких та густих особливостей, тому обов'язково варто спробувати.

Нарешті, випадкові ліси можуть бути хорошим методом ансамблю в цьому випадку. Рандомізація забезпечить, що різні види ознак (рідкісні / щільні) будуть використовуватися в якості основних вузлів рішення у різних деревах. RF / дерева рішень також хороші для огляду самих функцій, тому варто все-таки відзначити їх структуру.

Зауважте, що всі ці методи мають свої недоліки, які можуть перетворити їх на сміття у вашому випадку. Поєднання рідких та щільних особливостей не є дуже вивченою задачею, тому повідомте нам, який із цих підходів найкраще підходить для вашого випадку.


Спасибі за вашу відповідь! У мене є два наступні питання :) 1) Як SVM (з лінійним ядром) та Naive Bayes відрізняються тим, що вони не підсумовують свої особливості та відповідні ваги (тобто те, що ви називаєте «модель добавки»)? Обидва ефективно створюють роздільну гіперплощину, тож чи не завжди це результат додавання функцій, помножених на відповідні ваги? 2) Я хотів би спробувати випадкові ліси, але, на жаль, простір функцій занадто великий, щоб представити його у щільному форматі (я використовую sklearn). Чи є реалізація, яка може впоратися з цим?
elmille

1) При лінійній регресії вас цікавлять точки на гіперплані, таким чином ви складаєте зважені функції, щоб отримати прогнозовану точку. У SVM, з іншого боку, ви шукаєте точки на сторонах гіперплану. Класифікацію ви робите шляхом простої перевірки того, на якій стороні є ваш приклад, під час прогнозування не задіяно підсумовування. Naive Bayes може включати різні типи моделей (наприклад, біноміальні або мультиноміальні), але в основному ви збільшуєте ймовірності, не додаючи їх.
подруга

2) Я бачив деякі дослідження в цій темі, але жодного разу не стикався з реалізацією (напевно, googling дасть тут деякі посилання). Однак ви завжди можете піти іншим шляхом - зменшити розмірність, скажімо, PCA, а потім запустити випадковий ліс на основі скороченого набору даних.
подруга
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.