Насправді НЛП є однією з найпоширеніших областей, в якій потрібно перекомпонувати дані, оскільки існує багато завдань класифікації тексту, які стосуються незбалансованої проблеми (подумайте про фільтрацію спаму, виявлення образливих коментарів, класифікацію статті тощо). Але SMOTE здається проблематичним тут з якихось причин:
- SMOTE працює в просторі функцій. Це означає, що вихід SMOTE не є синтетичними даними, які є реальним представником тексту всередині його простору.
- З одного боку SMOTE працює з KNN, а з іншого боку, можливостей для NLP проблеми надзвичайно багато. KNN легко вийде з ладу в тих величезних розмірах.
Тож я можу запропонувати вам два підходи:
- Небайдуже до реального подання тексту нових синтетичних зразків, які, на мою думку, мають бути чудовими. Потрібно збалансувати розподіл для вашого класифікатора, а не для читача текстових даних. Тому застосовуйте SMOTE як традиційне (однак я зазвичай використовую рішення 2 нижче, щоб не гарантувати результат!) З деяким кроком зменшення розмірності.
1) Припустимо, ви хочете зробити свої зразки даних з другорядного класу подвійними за допомогою 3-NN. Ігноруйте основні класи та зберігайте лише зразки другорядних класів.
2) Для кожної вибіркової точки в просторі вибору виберіть 5 найближчих сусідів. Потім вибирайте 3 з них випадковим чином (чи не зайве це складно? Якщо б я не хотів пояснювати оригінальний алгоритм, я б сказав просто вибрати 3 сусідів!)
3) Для кожного виміру обчисліть відстань між вибіркою та сусідами та помножте її на випадкове число між 0-1 та додайте до вихідного значення вибірки в цьому вимірі. (Цей складний абзац просто означає, що для кожного виміру вибирається випадкове значення між початковою вибіркою та сусідом!)
- Але, як правило, я роблю ще один надмірний розмір, який є в тексті (таким інтуїтивнішим) і виглядає як SMOTE.
1) Ігноруйте основний клас. Отримайте розподіл за довжиною всіх документів на другорядний клас, щоб ми генерували нові зразки відповідно до справжньої довжини документа (кількість слів / фраз). Ми припускаємо, що ми хочемо зробити розмір класу потрійним (тому виробляючи синтетичних документа на оригінальний документ)k = 2
2) Утворіть послідовність з випадкових цілих чисел відповідно до цього розподілу. Він використовується для визначення довжини нового синтетичного документа.н
3) Для кожного документа: Виберіть одне ціле число з випадкової послідовності довжини і випадкового документа, довжина якого близька до цілого числа. Покладіть жетони всіх документів у набір і випадковим чином виберіть лексем разів. це ваші нові документи.ммнкк