Глубокие нейронные сети становятся все лучше и лучше при сопоставлении входных данных с выходными, учитывая огромный объем данных. Как вы могли спросить, получение огромного количества данных для каждой задачи и каждого языка может быть немного сложным, а на самом деле иногда практически невозможно - именно здесь Расширение данных и Передача обучения приходят к нам спасать.

В этом сообщении блога мы увидим, как мы можем получить * потрясающие * результаты для задачи классификации на хинди - используя комбинацию Data Augmentation и Transfer Learning - используя библиотеку iNLTK.

Постановка задачи

Классифицируйте обзоры фильмов на хинди по одной из [положительных, нейтральных, отрицательных] категорий - проблема многоклассовой классификации.

Набор данных

Набор данных Hindi Movie Reviews состоит из ~ 900 обзоров фильмов, собранных с хинди новостных сайтов.

Вот - стартовое ядро ​​для набора данных.

Давайте решим проблему

Мы будем использовать предварительно обученную нативную модель ULMFiT, которую я обучил для библиотеки iNLTK. Инструкции по загрузке предварительно обученных весов вместе с показателями производительности находятся в репозитории NLP for Hindi.

Передача обучения с помощью предварительно обученной нативной модели ULMFiT на хинди

Трансферное обучение использовалось для получения результатов SOTA для нескольких последующих задач. Этот блог Себастьяна Рудера очень хорошо объясняет трансферное обучение, поэтому мы сразу перейдем к коду и результатам.

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

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

Как видите, мы достигаем следующих результатов:

Расширение данных + обучение передаче с помощью предварительно обученной нативной модели ULMFiT на хинди

Теперь, помимо того, что мы делали выше, мы также будем использовать Data Augmentation.

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

Для подготовки дополненных данных мы будем использовать функцию get_similar_sentences библиотеки iNLTK.

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

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

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

Тонкая настройка языковой модели и обучение классификатору

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

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

Как видите, точность классификатора улучшилась с 62,22% до 68,33%, что является улучшением более чем на 9%.

Кроме того, показатель Каппа классификатора улучшился более чем на 20%.

Одна из проблем заключается в том, что, поскольку наш набор данных (и, следовательно, набор тестов) довольно мал, процент возраста, на который увеличение данных поможет метрики для вашего набора данных, может варьироваться, но, тем не менее, Расширение данных + обучение с передачей данных - это способ войдите в настройки низкого ресурса, это точно!

Обо мне

Я работаю ML Engineer-2 в Haptik над фундаментальными проблемами разговорного ИИ. Я также являюсь создателем библиотеки с открытым исходным кодом iNLTK.

Посетите мою домашнюю страницу, чтобы узнать больше обо мне или связаться со мной!