Нейронный машинный перевод - область, в которой каждый день появляются новые открытия. Я решил заняться представлением, поработав над тем, что переводит с английского на игбо. Язык игбо является основным родным языком игбо, которые живут в Юго-Восточной Нигерии, которая находится в Западной Африке, которая находится… вы поняли.

Немного истории

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

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

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

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

Модель Seq2Seq

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

Простая архитектура кодера-декодера пытается сопоставить вход фиксированной длины с выходом фиксированной длины, где есть большая вероятность, что их длина различается. Кодировщик (который состоит из стека долгосрочной краткосрочной памяти, LSTM или Gated Recurrent Units, GRU) принимает входную последовательность, а затем создает окончательное скрытое состояние, которое пытается инкапсулировать информацию входной последовательности, то есть кодирует вход последовательность.

Это скрытое состояние затем передается декодеру (который также содержит стек модулей LSTM или GRU), декодер выводит окончательное скрытое состояние, которое затем передается через функцию softmax для прогнозирования вывода.

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

Вы можете прочитать простое объяснение вышеизложенного здесь.

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

Механизм внимания

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

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

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

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

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

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

Вы можете найти подробные объяснения механизма внимания здесь и здесь.

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

Модель трансформатора

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

Архитектура Transformer, используемая в машинном переводе, по-прежнему является разновидностью архитектуры кодировщика-декодера.

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

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

Цель самовнимания подобна тому, как переводчик-человек пытается прочитать предложение, написанное на исходном языке, чтобы понять намерения автора. Самовнимание позволяет модели лучше кодировать входные последовательности, заменяя функцию RNN в приведенных выше моделях внимания seq2seq и RNN, описанных выше.

Результат многоголового внимания, показанный ниже, является функцией K, который является ключом, Q, который является запросом, V, является значением.

В собственном внимании кодировщика все K, Q и V берутся из входных токенов или выходных данных предыдущего уровня кодировщика.

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

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

Многоголовое внимание для самовнимания выполняет ту же функцию, что и собственное внимание кодера, за исключением того, что все K, Q и V получаются из целевых токенов или выходных данных предыдущего уровня декодера.

Многоголовое внимание для внимания кодера-декодера отличается от внимания самого себя тем, что оно действует как на выход кодера, так и на целевые токены. Запросы (Q) поступают из предыдущего уровня декодера, в то время как ключи (K) и значения (V) являются выходами кодера. Это функционирует подобно механизму внимания, обнаруженному в моделях внимания РНС.

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

Преимущество модели Transformer над моделью RNN и ее вариантами заключается в том, что все ее вычисления могут быть распараллелены, в отличие от RNN, где некоторые вычисления должны выполняться последовательно. Это ускоряет тренировки и, по моему личному опыту, требует меньше памяти. Модель Transformer также позволяет лучше выучивать более длинные предложения.

Более подробное описание модели Transformer можно найти здесь.

Проэкт

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

Для этого проекта мне нужен был такой, который содержал бы предложения в их игбо и английской формах. Единственный подготовленный набор данных, который я смог найти, состоял всего из 18 предложений и был крайне неадекватным, поэтому мне пришлось подготовить свой собственный набор данных. Для этого мне пришлось извлечь стихи из цифровой игбо и английской Библии Свидетелей Иеговы, а затем я приступил к поиску соответствующих предложений игбо и английского языка из онлайн-словаря игбо здесь. Пакет Python BeautifulSoup использовался для обоих извлечений.

После получения набора данных у меня был выбор: использовать машинный перевод на основе слов или машинный перевод на основе символов.

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

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

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

English Sentence: Come 
Correct Translation: Bia
My Translation: aba<pad><pad><pad><pad><pad><pad>…
English Sentence: Eat
Correct Translation: Rie
My Translation: aba<pad><pad><pad><pad><pad><pad>…

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

Я решил использовать простую архитектуру кодера-декодера без внимания, которую я адаптировал из учебника Фрэнсиса Чолле по seq2seq, найденного здесь. Это было намного лучше, чем указанная выше модель. Некоторые результаты были 🤷🏽‍♂️. Вот некоторые из них:

English Sentence: ascend
Correct Translation: gbago
My Translation: gba mgba
English Sentence: 19 Then he said to him Get up and be on your way your faith has made you well. 
Correct Translation: 19 O wee si ya Bilie lawa okwukwe gi emewo ka ahu di gi mma. 
My Translation: 19 O wee si ha O bu na ndi a ga asi Nne m aka , n ihi na o bu ezie na m na ekpe ikpe n aka.
English Sentence: desire
Correct Translation: gu aguu
My Translation: gu aguu

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

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

English Sentence: 26 Give thanks to the God of the heavens , For his loyal love endures forever . 
My Translation:  26 Kele ne Ce e e
English Sentence: language 
My Translation: agu
English Sentence: 22 Then King Je hoi a kim sent El na than the son of Ach bor and other men with him to Egypt . 
My Translation:  22 Eo Ee

Из вышесказанного вы можете видеть, что хотя они лучше, чем исходная модель внимания rnn, они хуже, чем простая модель seq2seq, и объективно плохи.

Обладая уроками, извлеченными из вышеупомянутых экспериментов, я решил использовать модель трансформатора, но модель трансформатора на самом деле настроена для машинного перевода на основе слов, а в языке игбо нет токенизатора, который я мог бы использовать, что делать? 🤔

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

Я использовал метод, основанный на словах, в сочетании с моделью Transformer, и результаты были смесью 👌🏽 и 🧐

English Sentence: write against 
Igbo Translation: detọ
My Translation: detọ
English Sentence: 7 The length of time that David lived in the countryside of the Phi·lisʹtines was a year and four months.
Igbo Translation: 7 Ụbọchị niile Devid biri n’ime ime obodo ndị Filistia dị otu afọ na ọnwa anọ.
My Translation: 7 ụbọchị niile devid biri n’ obodo ndị filistia dị otu afọ na ọnwa anọ
English Sentence: 23 Sing to Jehovah, all the earth! Announce his salvation day after day! 
Igbo Translation: 23 Bụkuonụ Jehova abụ, unu ndị niile bi n’ụwa! Kwa ụbọchị, kpọsaanụ nzọpụta ọ na-enye! 
My Translation: 23 bụkuonụ jehova abụ unu ndị niile bi n’ ụwa kwa ụbọchị kpọsaanụ nzọpụta ọ na- enye
English Sentence: 5 You must love Jehovah your God with all your heart and all your soul and all your strength.
Igbo Translation: 5 Jiri obi gị dum na mkpụrụ obi gị dum na ike gị dum hụ Jehova bụ́ Chineke gị n’anya.
My Translation: 5 jiri obi gị dum na mkpụrụ obi gị dum na jehova bu chineke gị n’ ihi na chineke gị hụrụ gị n’ anya

Что ж, вы можете видеть, что явным победителем является модель Transformer.

Все модели были написаны мной с помощью программы машинного перевода Coursera NLP, this repo для второй модели внимания, this blog post для модели seq2seq, this repo от Google для основных моделей преобразователей, this замечательный пост в блоге и это репо за помощь в ремонте моих моделей трансформаторов. Вышеупомянутые средства были потрясающими, и я мог бы использовать их, чтобы просто обучить свои данные, но я хотел узнать, как работает нейронный машинный перевод, и, несмотря на все слезы и неудачи, я могу только сказать, что это было образование, и оно того стоило.

Репозиторий GitHub для этого проекта на основе Keras можно найти здесь.

Спасибо Chukwurah Chuka, Steven Oni (@steveoni), Chukwuebuka Okolo за чтение черновиков этого документа.

P.S: Во время написания этого поста я обнаружил великолепный сайт, который содержит параллельный корпус на нескольких языках. Сайт называется OPUS и вы можете посетить его здесь.