Перевод с английского на маратхи на уровне слов с использованием кодировщика-декодера LSTM Model.

Вступление:-

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

В этой статье мы немного поговорим о кодировщике-декодере. Затем мы рассмотрим код нейронного машинного перевода. Это будет веселая поездка.

Предпосылка: -

Прежде чем мы продолжим, вы должны знать о следующем:

  • Рекуррентная нейронная сеть (RNN), Long Short Term Memory (LSTM).
  • От последовательности к последовательности архитектуры (Encoder decoder).

Коротко о Encoder Decoder: -

  • Последовательность основных частей модели - это кодировщик и декодер.

Кодировщик: -

Кодировщики могут быть любой сетью, такой как рекуррентная нейронная сеть, LSTM, GRU или сверточная нейронная сеть, но мы используем эту модель seq2seq для языкового перевода, поэтому кодер и декодер должны быть моделями, которые могут обрабатывать последовательный ввод. Мы будем использовать LSTM.

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

Декодер: -

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

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

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

Чтобы визуализировать, как учитель заставляет внимательно смотреть выше анимацию (2) со стороны декодера. На каждом временном шаге мы передаем Фактический вывод в качестве ввода, они оба (прогнозируемые и Фактические) выглядят одинаково в анимации, потому что наша модель настолько хороша 😆, если модель предсказала неправильное слово, мы все равно передадим правильное слово в качестве ввода.

Во время тестирования: - Входом для каждого временного шага является прогнозируемый выход предыдущего временного шага декодера.

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

Набор данных: -

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

Предварительная обработка: -

Для начала нужно понять, что нам нужно для перевода.

  • Нам нужны предложения одного языка и соответствующие предложения другого языка.
  • Это могут быть некоторые сокращения английских слов, которые могут сбить с толку нашу модель: такие слова, как «не могу» и «не могу» будут восприниматься по-разному, поэтому мы расширим все сокращения.
  • Такие символы, как запятая и точка, бесполезны при переводе, поэтому мы отбросим их все.
  • Цифры тоже не нужны.

Теперь в следующем коде мы выполним весь процесс очистки и сохраним данные.

Для работы функции сокращения вам понадобится словарь сокращений-расширений, который вы можете скачать здесь, этот файл содержит 125+ сокращений.

Подготовка данных для кодировщика-декодера: -

Вот как мы собираемся подготовить данные для модели кодера-декодера

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

Генератор данных: -

Это очень важно, зачем нам генератор данных?

Как указано в учебнике keras, мы должны преобразовать данные в трехмерный тензор формы = [Размер пакета, Временные шаги, Характеристики]. Теперь в нашем случае размер пакета, временной шаг и характеристики - это количество предложений, максимальная длина предложения и количество уникальных слов соответственно.

Используя это, для входного тензорного массива маратхи становится [41028, 37,13720], это потребляет много памяти.

Для более эффективной работы мы будем отправлять данные в виде пакетов. Итак, мы создадим генератор пакетов данных. Этот генератор данных разработан keras team.

Сборка кодировщика-декодера LSTM: -

Прежде чем мы перейдем к кодированию, мы должны понять несколько вещей:

Встраивание: -

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

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

Пример: слово «мужчина» будет ближе к «женщине», «собака» будет ближе к «кошке». Это просто означает, что векторы мужского слова будут иметь те же числа, что и у женщин, чем у собак и кошек.

Чтобы узнать больше, проверьте это.

Я экспериментировал с разными значениями для встраивания и единиц LSTM, для меня лучше всего было следовать, но вы можете попробовать с другими. Машинное обучение - это все о экспериментах.

Кодировщик: -

  • В кодировщике передаются входные-данные кодировщика и принимаются скрытые состояния последнего временного шага кодировщика как вектор контекста [h, c].
  • Зачем устанавливать нулевую маску = True при встраивании - когда мы сгенерировали входные массивы в генераторе, мы добавили к ним ноль, чтобы сделать их максимальной длины. Эта маска нуля укажет модели на необходимость замаскировать 0.

Декодер: -

  • Теперь входные данные декодера будут переданы во встраивание декодера.
  • Начальные состояния уровня LSTM - это конечные состояния кодировщика.
  • Наставление учителя: - Здесь ввод каждого временного шага является фактическим выводом предыдущего шага декодера.
  • Получите результат, применив SoftMax, который преобразует числа в вероятности.

Обучение:-

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

Модель вывода: -

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

Здесь мы не можем просто применить model.predict () как другие модели ML и DL, потому что в нашем случае модель кодировщика изучает функции во входных предложениях, а декодер просто принимает состояния кодировщиков и предсказывает слово за словом, используя входные данные декодера. Итак, для предсказания мы должны проделать тот же процесс.

Прогнозы: -

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

Полученные результаты:-

Теперь мы можем получить результаты с помощью простого кода на Python: -

Вот некоторые из моих результатов: -

Ура!! мы получили потрясающие результаты.

Конец Примечание: -

  • Код GitHub - [здесь]
  • Я реализовал перевод с помощью альтернативного метода без генератора данных, чтобы увидеть его, посетите здесь

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

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

Ссылки: -