Готовая библиотека для аугментаций в NLP. Как правило завести аугментации текстов сложно и эффект от них слишком малый, чтобы прямо заниматься этим.

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


В НЛП существует множество задач от классификации текста до ответов на вопросы, но независимо от того, что вы делаете, объем данных, который вы должны обучить своей модели, сильно влияет на производительность модели.

Что вы можете сделать, чтобы увеличить свой набор данных?

Простой вариант -> получить больше данных :).

Но получение и маркировка дополнительных наблюдений может быть дорогостоящим и трудоемким процессом.

Что вы можете сделать вместо этого?

Примените увеличение данных к вашим текстовым данным.

Методы увеличения данных используются для создания дополнительных синтетических данных с использованием имеющихся у вас данных. Методы усиления очень популярны в приложениях компьютерного зрения, но они так же сильны для НЛП.

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

Увеличение данных для зрения против НЛП

В приложениях компьютерного зрения увеличение данных выполняется почти повсеместно, чтобы получить более крупные обучающие данные и сделать модель лучше обобщенной.

Основные используемые методы включают в себя:

  • обрезка,
  • переворачивание,
  • масштабирование,
  • вращение,
  • впрыск шума,
  • и многие другие.

В компьютерном зренииэти преобразования выполняются на ходу с помощью генераторов данных. Когда пакет данных поступает в вашу нейронную сеть, он случайным образом преобразуется (дополняется). Вам не нужно ничего готовить перед тренировкой.

Это не относится к НЛП, где увеличение данных должно быть сделано тщательно из-за грамматической структуры текста. Методы, описанные здесь, используются перед тренировкой. Новый дополненный набор данных генерируется заранее и затем подается в загрузчики данных для обучения модели.

Методы увеличения данных

В этой статье я в основном сосредоточусь на методах увеличения данных НЛП, представленных в следующих проектах:

Итак, давайте погрузимся в каждую из них.

Обратный перевод

В этом методе мы переводим текстовые данные на некоторый язык, а затем переводим их обратно на исходный язык. Это может помочь генерировать текстовые данные с различными словами, сохраняя при этом контекст текстовых данных.

Для выполнения перевода используются API языковых переводов, такие как google translate, Bing, Yandex. Например, учитывая предложение:

Amit Chaudhary " Back Translation for Text Augmentation with Google Sheets”

Вы можете видеть, что предложения не являются одинаковыми, но их содержание остается прежним после обратного перевода. Если вы хотите попробовать этот метод для набора данных, вы можете использовать эту записную книжку в качестве ссылки.

Простое Увеличение Данных

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

  • Замена Синонима

Случайным образом выберите n слов из предложения, которые не являются стоп-словами. Замените каждое из этих слов одним из его синонимов, выбранных случайным образом.

Например, учитывая предложение:

Эта статья будет посвящена обобщению методов увеличения данных в НЛП.

Метод случайным образом выбирает n слов (скажем, два), слова article и techniques, и заменяет их на write-up и methods соответственно.

Эта статья будет посвящена обобщению методов увеличения данных в НЛП.

  • Случайная Вставка

Найдите случайный синоним случайного слова в предложении, которое не является стоп-словом. Вставьте этот синоним в произвольное положение в предложении. Сделайте это n раз.

Например, учитывая предложение:

Эта статья будет посвящена обобщению методов увеличения данных в НЛП.

Метод случайным образом выбирает n слов (скажем, два), слова article и techniques находят синонимы как write-up и methods соответственно. Затем эти синонимы вставляются в произвольном положении в предложении.

Эта статья будет посвящена описанию обобщающих методов увеличения данных в методах НЛП.

  • Случайный Своп

Случайным образом выберите два слова в предложении и поменяйте их местами. Сделайте это n раз.

Например, учитывая предложение

Эта статья будет посвящена обобщению методов увеличения данных в НЛП.

Метод случайным образом выбирает n слов (скажем, два), слова article и techniques и меняет их местами, чтобы создать новое предложение.

Эти методы будут сосредоточены на обобщении статьи об увеличении данных в НЛП.

  • Случайное Удаление

Случайным образом удалите каждое слово в предложении с вероятностью p.

Например, учитывая предложение

Эта статья будет посвящена обобщению методов увеличения данных в НЛП.

Метод выбирает n слов (скажем, два), слова воля и методы, и удаляет их из предложения.

Эта статья посвящена обобщению методов увеличения данных в НЛП.

Вы можете перейти в этот репозиторий, если хотите применить эти методы к своим проектам.

НЛП-Альбумизация

Ранее мы говорили о различиях между увеличением данных компьютерного зрения и увеличением данных НЛП. Но в этом разделе мы увидим, как мы можем применить некоторые идеи, используемые в увеличении данных CV в НЛП.

Для этого мы будем использовать пакет Albumentations.

Давайте взглянем на несколько методов здесь.

  • Перетасовать Предложения Трансформировать

В этом преобразовании, если данный образец текста содержит несколько предложений, эти предложения перемешиваются, чтобы создать новый образец.

Например:

text = ‘<Sentence1>. <Sentence2>. <Приговор4>. <Приговор4>. <Приговор5>. <Приговор5>.’

Преобразуется в:

text = ‘<Sentence2>. <Приговор3>. <Sentence1>. <Приговор5>. <Приговор5>. <Приговор4>.’

  • Исключить дубликат преобразования

В этом преобразовании, если данный образец текста содержит несколько предложений с повторяющимися предложениями, эти повторяющиеся предложения удаляются для создания нового образца.

Например дан пример,

text = ‘<Sentence1>. <Sentence2>. <Приговор4>. <Приговор4>. <Приговор5>. <Приговор5>.’

Мы преобразуем его в:

"<Sentence1>. <Sentence2>.<Приговор4>. <Приговор5>.’

Есть много других преобразований, которые вы можете попробовать с помощью этой библиотеки. Вы можете проверить эту замечательную записную книжку, чтобы увидеть полную реализацию.

Библиотека NLPAug

До сих пор мы обсуждали множество методов, с помощью которых можно использовать увеличение данных в НЛП.

Но эффективно внедрять эти методы с нуля - это большая работа.

В этом разделе я познакомлю вас с пакетом python, который позволяет вам легко выполнять все эти увеличения данных, и вы можете настроить необходимый уровень увеличения, используя различные аргументы.

NLPAug поможет вам с дополнением НЛП для ваших проектов машинного обучения. Давайте посмотрим, как мы можем использовать эту библиотеку для выполнения увеличения данных.

NLPAug предлагает три типа аугментации:

  • Увеличение уровня персонажа
  • Увеличение уровня слов
  • Увеличение уровня предложения

На каждом из этих уровней Нлпаг предоставляет все методы, рассмотренные в предыдущих разделах, такие как:

  • случайное удаление,
  • случайная вставка,
  • шарканье,
  • замена синонима,
  • и т.д.

По моему опыту, наиболее часто используемым и эффективным методом является замена синонимов с помощью встраивания слов.

Мы заменяем n числовых слов его синонимами (вложениями слов, которые близки к этим словам), чтобы получить предложение с тем же значением, но с другими словами.

При выполнении замены синонимов мы можем выбрать, какое заранее подготовленное вложение мы должны использовать, чтобы найти синонимы для данного слова.

С помощью NLPaug мы можем выбирать неконтекстуальные вложения, такие как:

  • Перчатка,
  • word2vec,
  • и т.д.,

или контекстные вложения, такие как:

  • Берт,
  • Роберта,
  • и т.д.

Например:

август = нет.Contextualwordembaug(  model_path='bert-base-uncased', action="insert") augmented_text = aug.дополнение(текст)

Оригинал:

Быстрая бурая лиса перепрыгивает через ленивую собаку

Дополненный Текст:

даже быстрая бурая лиса обычно перепрыгивает через ленивую собаку

Вещи, которые нужно иметь в виду, делая увеличение данных НЛП

Как я уже говорил во введении, есть определенные вещи, с которыми нам следует быть осторожными при выполнении аугментации в НЛП.

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

Некоторые вещи, которые нужно иметь в виду:

  • Не проверяйте с помощью дополненных данных.
  • Если вы выполняете перекрестную проверку K-fold, всегда держите исходный образец и дополненный образец в одном и том же сгибе, чтобы избежать перенапряжения.
  • Всегда пробуйте различные подходы к увеличению и проверяйте, что работает лучше.
  • Сочетание различных методов увеличения также ценится, но не переусердствуйте.
  • Экспериментируйте, чтобы определить оптимальное количество образцов, которые должны быть увеличены, чтобы получить наилучшие результаты.
  • Имейте в виду, что увеличение данных в НЛП не всегда помогает улучшить производительность модели.

Рабочий процесс увеличения данных

В этом разделе мы попробуем увеличить данные на реальном или нет? Конкурс НЛП с катастрофическими твитами проходил на Kaggle.

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

Во-первых, давайте загрузим обучающий набор данных и проверим распределение целевых классов.

… x=твит.цель.value_counts() СНС.barplot(x. index, x) plt.gca ().set_ylabel ('samples')

Мы видим, что здесь наблюдается небольшой классовый дисбаланс.

Давайте создадим несколько положительных образцов, используя метод замены синонимов.

Перед добавлением данных мы разделяем данные на набор train и validation, чтобы никакие выборки из набора validation не использовались для добавления данных.

train, valid=train_test_split(tweet, test_size=0.15)

Теперь мы можем сделать увеличение данных обучающего набора данных. Я выбрал для генерации 300 образцов из положительного класса.

def augment_text(df, samples=300, pr=0.2):  aug_w2v. aug_p=pr  новый текст=[]    # # выбор образцов миноритарных классов  df_n=df[df.цель= =1].reset_index(drop=True)   # # цикл увеличения данных     для i в tqdm(np.Случайный.randint(0,len (df_n), сэмплы)):    text = df_n. iloc[i] ['текст']  augmented_text = aug_w2v. augment(текст)  новый текст.добавить(augmented_text)      # # фрейм данных  new=pd.DataFrame ({'text': new_text,'target':1})  df=shuffle(df.добавить (новый).reset_index(drop=True))  возвращение df   train = augment_text(поезд)

Теперь мы можем использовать эти дополненные текстовые данные для обучения модели.

Если вам интересно узнать, как построить весь конвейер из подготовки данных для НЛП, обучения классификатора и запуска вывода, вы можете проверить мою другую статью.

Итак, работает ли увеличение данных с заменой синонимов?


Без Увеличения ДанныхС Увеличением Данных
Оценка ROC AUC0.7750.785

С увеличением данных мы получили хороший прирост производительности модели (AUC).

Игра с различными техниками и настройка гиперпараметров методов увеличения данных могут улучшить результаты еще больше, но я оставлю это пока.

Если вы хотите сделать это, я приготовил блокнот, где вы можете играть с вещами.

Последняя мысль

В этой статье мы обсудили и реализовали различные методы увеличения данных для текстовых данных.

Насколько мне известно, это лучшие общедоступные методы и пакеты для выполнения этой задачи.

Надеюсь, вы найдете их полезными в своих проектах.


Источник: neptune.ai

Комментарии: