Синтетические текстовые данные в помощь

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

Контур:

  • Распространенные подходы к расширению тестовых данных: NLPAug, несбалансированное обучение.
  • Как генерировать синтетические данные с помощью Google Translate
  • Производительность классификации с расширенными данными меток
  • Применимые задачи НЛП

Распространенные подходы к расширению тестовых данных: NLPAug, несбалансированное обучение.

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

  • Замените слова синонимами
  • Случайная вставка
  • Случайный обмен
  • Случайное удаление

Но у NLPAug есть несколько недостатков. Замена синонимов может не иметь смысла из-за полисемии; вставка может изменить первоначальный смысл; контент после удаления больше не имеет смысла; очень медленный в больших наборах данных.

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

Original text: At this time, the land where Mary and Joseph lived was part of the Roman Empire.

synonym_replace: At this time, the domain where Mary and Joseph know be voice of the Roman Empire.

random_insert: unlike at this time, the protestant land where mary teresa and maria joseph lived was part of under the western roman empire.

random_swap: At time this the, land where Mary and Joseph lived of was the Roman part Empire.

random_delete: This time, the where Mary Joseph was part the Roman.
Original text: TimeWarner said fourth quarter sales rose 2% to $11.1bn from $10.9bn.

synonym_replace: TimeWarner said 4th tail sales resurrect 2% to $ eleven. 1bn from $ 10. 9bn.

random_insert: timewarner said fourth ‑ quarter dvd sales rose 2 % higher to $ 4 11. 01 1bn from $ 2019 10. 02 9bn.

random_swap: said fourth quarter TimeWarner sales rose% 2 to $ 11. 1bn 10 from $. 9bn.

random_delete: TimeWarner said quarter sales rose% $ 11. from $..

imbalanced-learn – это открытый исходный код для повторной выборки. Передискретизация второстепенных классов и недостаточная выборка основных классов может помочь улучшить результаты классификации модели. Например, имеется несбалансированный обучающий набор данных с 5 метками от 0 до 4. Как показано на изображении, классы 0 и 3 являются основными классами, а класс 4 — второстепенным.

from imblearn.over_sampling import RandomOverSampler
from imblearn.under_sampling import RandomUnderSampler

Чтобы сбалансировать набор обучающих данных, вы можете передискретизировать класс 4 и недооценивать классы 0 и 3. Недостатком является то, что данные передискретизации идентичны исходному тексту. Было бы большим преимуществом, если бы дополненный текст сохранил то же значение, но с большей дисперсией.

Как генерировать синтетические данные с помощью Google Translate

Googletrans быстро и надежно выполняет массовые переводы. Ниже приведен пример использования googletrans для перевода текста с итальянского на английский и с китайского на английский.

from googletrans import Translator
translator = Translator()

my_translation = translator.translate("Se non hai mai pianto, i tuoi occhi non possono essere belli.", src='it', dest='en')
print(my_translation.text)

my_translation = translator.translate("友谊是两颗心真诚相待,而不是一颗心对另一颗心的敲打.", src='zh-CN', dest='en')
print(my_translation.text)

в переводе: "Если вы никогда не плакали, ваши глаза не могут быть красивыми".

в переводе: «Дружба — это когда два сердца искренне относятся друг к другу, а не одно сердце стучится в другое сердце».

Как использовать googletrans для обогащения набора обучающих данных? Процедура следующая:

Английский -> Другой язык (китайский, японский и т. д.) -> Английский

Сначала переведите английский текст на другой язык, а затем переведите его обратно на английский. Чтобы иметь больше различий в окончательном тексте, было бы целесообразно выбрать азиатский язык, например китайский или японский.

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

Во-первых, обрежьте текст, чтобы он был короче 5000 символов. Поскольку googletrans не может обрабатывать текст длиннее 5000 символов, он выдает TypeError: «объект JSON должен быть str, bytes или bytearray, а не NoneType».

train['trimed_text'] = train['text'].str[:4000]
# googletrans might hit TypeError: the JSON object must be str, bytes or bytearray, not NoneType
# because it cannot translate text longer than 5000 characters
# so that we have to trim the content shorter

train_tech['translation_text'] = train_tech['trimed_text'].apply(lambda x: translator.translate(x, src='en', dest='zh-CN').text )
train_tech['synthetic_text'] = train_tech['translation_text'].apply(lambda x: translator.translate(x, src='zh-CN', dest='en').text )

Столбец «translation_text» — это перевод на китайский язык, а столбец «synthetic_text» — это перевод с китайского обратно на английский. Сравнивая столбцы «текст» и «синтетический_текст», мы видим, что они разные, но сохраняют одно и то же значение.

Производительность классификации с расширенными данными меток

После добавления дополнительных обучающих данных с помощью googletrans классификация набора данных новостей BBC с моделью Hugging Face distilbert-base-uncased достигла производительности, как показано ниже. Макро-средняя оценка f1 улучшилась с 0,91 до 0,98.

Применимые задачи НЛП

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

По сравнению с NLPAug и несбалансированными, преимущества googletrans заключаются в том, что они быстрее, надежнее и создают образцы с большим количеством вариантов, сохраняя при этом исходные значения. Аннотирование стоит дорого, и синтетические данные здесь, чтобы помочь. Получайте удовольствие от обучения :) 🧐👍🤗

Подпишитесь на DDIntel Здесь.

Посетите наш сайт здесь: https://www.datadriveninvestor.com

Присоединяйтесь к нашей сети здесь: https://datadriveninvestor.com/collaborate