На самом деле, НЛП является одной из наиболее распространенных областей, в которых требуется повторная выборка данных, поскольку существует много задач классификации текста, связанных с несбалансированной проблемой (например, фильтрация спама, обнаружение оскорбительных комментариев, классификация статей и т. Д.). Но SMOTE кажется проблематичным по ряду причин:
- SMOTE работает в пространстве функций. Это означает, что выходные данные SMOTE не являются синтетическими данными, которые являются реальным представителем текста в его пространстве признаков.
- С одной стороны, SMOTE работает с KNN, а с другой стороны, функциональные пространства для проблемы НЛП чрезвычайно велики. KNN легко потерпит неудачу в этих огромных размерах.
Поэтому я могу предложить вам два подхода:
- Не волнует реальное текстовое представление новых синтетических образцов, которое, я полагаю, должно быть в порядке. Вы должны сбалансировать распределение для вашего классификатора, а не для чтения текстовых данных. Поэтому примените SMOTE как традиционный (однако я обычно использую решение 2 ниже, чтобы не оценивать результат!) С некоторым шагом по уменьшению размерности.
1) Предположим, вы хотите, чтобы ваши выборки данных из второстепенного класса удваивались с использованием 3-NN. Игнорируйте основной класс (ы) и оставляйте только второстепенные образцы.
2) Для каждой точки выборки в пространстве признаков выберите 5 ближайших соседей. Затем выберите 3 из них случайным образом (не слишком ли это сложно? Если бы я не хотел объяснять оригинальный алгоритм, я бы сказал, просто выберите 3 соседей!)
3) Для каждого измерения вычислите расстояние между образцом и соседями, умножьте его на случайное число от 0 до 1 и добавьте к исходному значению образца в этом измерении. (этот сложный абзац просто означает, что для каждого измерения выберите случайное значение между исходным образцом и соседом!)
- Но я обычно делаю другую передискретизацию, которая находится в тексте (более интуитивно понятная) и является своего рода SMOTE.
1) Игнорировать основной класс. Получите распределение длины всех документов в младшем классе, чтобы мы генерировали новые образцы в соответствии с истинной длиной документа (количество слов / фраз). Мы предполагаем, что хотим сделать размер класса тройным (таким образом, получая синтетических документа на исходный документ)к = 2
2) Генерация последовательности из случайных целых чисел в соответствии с этим распределением. Используется для определения длины нового синтетического документа.N
3) Для каждого документа: выберите одно целое число из последовательности случайной длины и случайного документа, длина которого близка к целому числу. Положите токены всех документов в набор и случайным образом выберите токенов раз. это ваши новые документы.м н к кmmnkk