Простые методы редактирования текста могут значительно повысить производительность для небольших наборов данных.

Увеличение данных обычно используется в компьютерном зрении. В режиме зрения вы почти наверняка можете перевернуть, повернуть или отразить изображение, не рискуя изменить исходную этикетку. Однако с обработкой естественного языка (НЛП) дело обстоит совершенно иначе. Изменение одного слова может изменить значение всего предложения. Поэтому мы не можем придумать простых правил для увеличения данных. Или можем?

Я представляю вам EDA: E asy D ata A методы сегментации для повышения производительности при выполнении задач классификации текста (для быстрой реализации см. Репозиторий EDA на Github ). EDA состоит из четырех простых операций, которые на удивление хорошо предотвращают переоснащение и помогают обучать более надежные модели. Они здесь:

  1. Замена синонима. Выберите случайным образом n слов из предложения, которые не являются стоп-словами. Замените каждое из этих слов одним из его синонимов, выбранных наугад.
  2. Случайная вставка. Найдите в предложении случайный синоним случайного слова, не являющийся стоп-словом. Вставьте этот синоним в случайную позицию в предложении. Сделайте это n раз.
  3. Произвольный обмен: случайным образом выберите два слова в предложении и поменяйте их местами. Сделайте это n раз.
  4. Случайное удаление: случайное удаление каждого слова в предложении с вероятностью p.

Действительно ли эти методы работают? Удивительно, да! Хотя некоторые сгенерированные предложения могут быть немного бессмысленными, наведение некоторого количества шума в набор данных может быть чрезвычайно полезным для обучения более надежной модели, особенно при обучении на небольших наборах данных. Как показано в [этой статье], использование EDA превосходит обычное обучение при почти всех размерах наборов данных по сравнению с 5 задачами эталонной классификации текста и намного лучше при обучении на небольших объемах данных. В среднем при обучении рекуррентной нейронной сети (RNN) с EDA при использовании только 50% доступного обучающего набора достигается такая же точность, как и при обычном обучении со всеми доступными данными:

Сохраняет ли EDA истинные ярлыки расширенных предложений?

Теперь я знаю, что вы думаете. Можете ли вы действительно просто выполнять эти операции дополнения, сохраняя при этом истинные ярлыки дополненных предложений? Давайте воспользуемся визуализацией, чтобы выяснить…

Таким образом, вы обучаете RNN положительным и отрицательным отзывам о продукте, затем запускаете ее как для обычных, так и для дополненных предложений, извлекаете последний слой нейронной сети и используете tSNE для получения визуализации скрытого пространства:

Оказывается, латентные пространственные представления дополненных предложений близко окружают представления исходных предложений! Это указывает на то, что сгенерированные дополненные предложения, скорее всего, сохранили ту же метку, что и исходное предложение.

Все ли эти операции работают?

Теперь давайте выясним, каковы индивидуальные эффекты каждой из техник увеличения данных. Замена синонимов имеет смысл, но действительно ли три другие операции делают что-нибудь? Мы можем провести тест, который выделяет каждый из методов и использует их с различной степенью α, параметра, который примерно означает «процент измененных слов в предложении»:

Вы можете видеть, что прирост производительности особенно велик для небольших наборов данных - около 2–3% и скромен для больших размеров (~ 1%). Однако все методы, если они используются с разумным параметром увеличения (не изменяйте более четверти слов в предложении), могут помочь в обучении более надежных моделей.

Насколько много аугментации?

Наконец, сколько дополненных предложений мы должны создать для настоящего предложения? Ответ на этот вопрос зависит от размера вашего набора данных. Если у вас только небольшой набор данных, вероятность переобучения более высока, поэтому вы можете сгенерировать большее количество дополненных предложений. Для больших наборов данных добавление слишком большого количества расширенных данных может быть бесполезным, поскольку ваша модель может уже быть способной к обобщению при большом количестве реальных данных. На этом рисунке показан прирост производительности по отношению к количеству дополненных предложений, генерируемых на исходное предложение:

Что теперь?

Мы показали, что простые операции увеличения данных могут значительно повысить производительность классификации текста. Если вы обучаете классификатор текста на небольшом наборе данных и ищете простой способ повысить производительность, не стесняйтесь реализовать эти операции в своей модели или вытащите код для EDA из Github. Подробнее читайте в [этой статье].





Не стесняйтесь читать о моих работах на моем [личном сайте] и пишите мне по электронной почте. Удачи!