Генерация пословиц с использованием двухслойных моделей LSTM

Введение

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

Генератор пословиц — это идея заставить ваше устройство генерировать пословицы для вас, давая ему слово, и это действительно замечательно. Эта практика называется Генерация текста или Генерация естественного языка, которая является подполем Обработки естественного языка (NLP).

Генератор предложений — это приложение, которое принимает фразы или отдельные слова и генерирует из них предложение. Приложение-генератор пословиц йоруба использует идею генерации текста в том смысле, что оно берет ключевое слово или фразу на языке йоруба и генерирует для вас пословицу на языке йоруба из заданного ключевого слова/фразы.

Модель использует токенизатор keras для создания токенов и модели Sequential путем добавления слоя внедрения и двух моделей LSTM.

Мы учли омонимы и языковые интонации, чтобы помочь модели создать более удобочитаемую пословицу. Кроме того, используя библиотеку глубокого переводчика, мы добавили API Google Translator, чтобы помочь перевести сгенерированную пословицу йоруба на английский язык для читателей, не являющихся йоруба.

Создание пословиц йоруба с двумя слоями LSTM

Теперь мы познакомим вас с практическим методом создания генератора пословиц с использованием слоев TensorFlow и LSTM. TensorFlow — это библиотека машинного обучения с открытым исходным кодом для глубокого обучения. Этот проект был выполнен в Google Colab, чтобы мы могли получить доступ к графическому процессору.

Импорт библиотек

Это говорит само за себя. Мы импортируем все библиотеки, необходимые для нашего исследования.

Скачать и загрузить данные

Набор данных был загружен из репозитория NIGER VOLTA LTI GitHub. После загрузки данных мы сразу же очистили данные, удалив из набора данных лишние пробелы, цифры и знаки препинания. Мы также удалили некоторые английские слова и пословицы, не относящиеся к йоруба. Загрузил список данных во фрейм данных.

Предварительная обработка данных

При предварительной обработке данных были предприняты следующие действия:

  • Удаление стоп-слов. Некоторые слова в литературе йоруба являются стоп-словами в англоязычной литературе. Нам пришлось исключить эти слова при обработке удаления этих стоп-слов. Мы также удалили строки пословиц, содержащих английские слова. Ниже приведена функция, которая выполняет описанное выше действие.
  • Токенизация: мы создали уникальный токен для каждого слова. Повторяющимся словам в корпусе присваивается один и тот же токен. Это было легко сделать с помощью Tokenizer TensorFlow.
  • Последовательность и заполнение последовательности. Затем мы сгенерировали n-граммпоследовательности, первые два слова такой пословицы могут быть одной последовательностью, первые три слова могут быть следующей последовательностью и так далее. на. После секвенирования длина каждой из этих сгенерированных последовательностей различается, в других случаях для поддержания порядка мы сделали предварительное заполнение нулями, используя метод pad_sequences() от Keras.
  • Разделение набора данных: мы хотим предсказать следующее слово, например, мы разделяем предложение длиной 10 на первые 9 слов в качестве функций и последнее слово в качестве метки. Мы также хотим закодировать One-Hot метки.

Построение модели

Мы использовали последовательную модель с несколькими слоями. Первый слой — это Слой внедрения. Этот слой принимает три аргумента, а именно: входное измерение (общее количество уникальных слов в нашем корпусе), выходное измерение (или измерение встраивания, в котором будут отображаться векторы) и входная длина (длина каждой последовательности, которая Feed) Мы добавили два слоя LSTM по 400 единиц и отсев на 20%. плотный слой, в котором все слова являются единицами.

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

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

Мы получили окончательный убыток 0,2867 и точность 90,11%.

Функция создания пословиц

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

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

Проблемы проекта

  • Данные. Нам не удалось получить дополнительный набор данных, и это была одна из проблем, с которыми мы столкнулись в этом проекте.
  • Вычислительная мощность: это был проект глубокого обучения; нам требовался GPU для обучения моделей. Мы использовали Google Colab для большей части нашего моделирования, но при этом мы тратили около 2 часов на запуск модели каждый раз, когда мы ее настраивали.
  • Диакритизация. Диакритизация входного ключевого слова для конечного пользователя была для нас большой проблемой. Мы также наткнулись на библиотеку под названием Iranlowo, которая помогла нам в этом. Но мы получали ошибки, так как библиотека последний раз обновлялась в 2020 году.
  • Чтение сгенерированных пословиц. Мы не гордимся этим, но нам было трудно читать на языке йоруба. В большинстве случаев мы передавали каждую сгенерированную пословицу эксперту по языку йоруба.

Область будущего внимания

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

Заключение

Что делает генератор пословиц более эффективным, так это его способность генерировать осмысленные пословицы. Пройдя через кучу процессов, мы успешно создали генератор пословиц, используя последовательную модель со слоем внедрения и двумя слоями LSTM. Хотя есть и другие несколько моделей, которые можно использовать для проекта генерации текста, такие как GAN, Spacy, модели кодировщика-декодера, трансферное обучение (преобразователи HuggingFace) и так далее.

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

Вот ссылка на репозиторий GitHub команды:



ВЕБ-ПРИЛОЖЕНИЕ:

https://aadedolapo-sentence-generator-for-indigenous-nigeria-app-8vkc1t.streamlitapp.com/

Соавторы