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

Поскольку такой сценарий маловероятен, мы принимаем решение в Машинном переводе с помощью моделирования последовательности в последовательность (seq2seq) на основе системы долговременной краткосрочной памяти (LSTM), которую я подробно объясню в этой статье.

Краткое руководство по машинному переводу

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

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

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

Обзор содержания

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

1. Последовательность в модели последовательности.

2. OpenNMT-py для нейронного машинного перевода (NMT)

Понимание последовательности в последовательности (Seq2Seq) Модели

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

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

В модели Seq2seq исходный язык сначала преобразуется в векторы с использованием встраивания слов, а также поддерживается вектор контекста. Мы также сможем установить размер наших векторов слов, когда начнем создавать модель. Это регулируется установкой количества скрытых блоков в кодировщике RNN (Recurrent Neural Networks).

Долгосрочная краткосрочная память (LSTM)

Сети с долгосрочной краткосрочной памятью (LSTM) - это тип RNN, в котором он хранит более длинный контекст, который другие RNN не могут сохранить. Он также имеет аналогичную структуру, похожую на цепочку, но вместо простого слоя tanh имеет другую повторяющуюся структуру.

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

Мы можем регулировать добавление или удаление информации в ячейки с помощью шлюзов. Ворота состоят из слоя нейронной сети сигмоида и операции точечного умножения. Сигмоидный слой выводит числа от нуля до единицы, описывающие, сколько каждого компонента должно быть пропущено. Нулевое значение означает ничего не пропускать, а значение 1 означает пропустить все!.

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



Помимо LSTM, есть еще модель Трансформатор, но, короче, мы можем двигаться дальше. Ниже я предоставлю вам источники, которые помогут вам понять Transformer и то, как он более эффективен при сохранении более широкого контекста. И, пожалуйста, просмотрите статью о Трансформере.

Кодировщик

Предположим, у нас есть предложение «привет, мир». В этом предложении каждое слово представлено в виде вектора как [w0, w1]. Теперь мы передаем его через сеть LSTM, и вывод последнего состояния сохраняется как закодированный текст, в то время как мы также сохраняем контекст по пути.

[e0, e1] - это скрытое состояние, а окончательно закодированный текст представлен буквой e, которая равна e1.

Декодер

На вход декодера поступает закодированный текст e, который передается через другой слой LSTM для пословного перевода. Также существует дополнительный специальный вектор с именем «sos» начало предложения. LSTM получает e как скрытое состояние, а sos как входное. Декодирование останавливается, когда предсказанное слово является специальным токеном конца предложения «eos».

Для более глубокого и наглядного понимания этой концепции загляните в блог сэра Джея Аламмара. « Визуализация модели нейронного машинного перевода (механика моделей Seq2seq с вниманием) .

OpenNMT-py для нейронного машинного перевода

OpenNMT - это экосистема с открытым исходным кодом для нейронного машинного перевода и обучения нейронной последовательности. У него отличное сообщество разработчиков. Он разработан с учетом модульности кода, эффективности, расширяемости. Начатый в декабре 2016 года группой Harvard NLP и SYSTRAN, проект с тех пор используется в нескольких исследовательских и промышленных приложениях. В настоящее время его обслуживают SYSTRAN и Ubiqus. Они имеют готовый к производству код и используются несколькими компаниями.

O penNMT - это полная библиотека для обучения и развертывания моделей нейронного машинного перевода. Система является преемником seq2seq-attn, разработанной в Гарварде, и была полностью переписана для повышения эффективности, удобочитаемости и универсальности. Он включает в себя стандартные модели NMT, а также поддержку внимания, стробирования, суммирования, подачи входных данных, регуляризации, поиска луча и всех других опций, необходимых для современной производительности. Основная система реализована в математической структуре Lua / Torch и может быть легко расширена с помощью внутренних стандартных компонентов нейронной сети Torch. Он также был расширен Адамом Лерером из Facebook Research для поддержки инфраструктуры Python / PyTorch с тем же API . - из бумаги

OpenNMT предоставляет реализации в двух популярных фреймворках глубокого обучения, Pytorch и Keras -

  1. OpenNMT-py: это реализовано с использованием инфраструктуры глубокого обучения pytorch, и мы собираемся использовать только ее. Он расширяемый и имеет быструю реализацию с простотой использования PyTorch.
  2. OpenNMT-tf: он основан на платформе глубокого обучения tensorflow.

Каждая реализация имеет свой собственный набор уникальных функций, но преследует схожие цели:

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

Общие сведения об инструментарии

Это Project, который по своей сути поддерживает различные методы машинного перевода от vanilla NMT до внимание, gating, наложение , входная подача, регуляризация , копирование моделей, поиск пучка И все другие опции, необходимые для современного исполнения. И все это в рамках 4k строк кода благодаря PyTorch. Здесь мы увидим обзор бумаги. Система построена с учетом системной эффективности и модульности.

Эффективность системы

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

Поскольку обучение моделей NMT может занять несколько дней, неэффективная архитектура приведет к ряду проблем. OpenNMT-py имеет эффективную архитектуру, которая эффективно справляется с этими задачами.

Совместное использование памяти и сегментирование

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

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

Несколько графических процессоров

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

Модульность для исследований

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

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

Эксперимент по переводу на основе OpenNMT-py

Это небольшое руководство по обучению модели NMT с использованием OpenNMT-py. Здесь мы будем использовать небольшой параллельный набор данных, доступный в репозитории для английского на немецкий.

Установка

  1. Создание среды conda с помощью Python 3.6
conda create -n opennmt python=3.6

2. Активация окружения.

source activate opennmt

3. Мы собираемся установить из исходников.

git clone https://github.com/OpenNMT/OpenNMT-py.git
cd opennmt
pip install -r requirements.txt

Теперь, когда все готово, мы готовы двигаться дальше.

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

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

  1. Учебные файлы содержат 10 тысяч предложений.
  2. В тестовых файлах 2737 предложений.
  3. В файлах валидации 3k предложений.

скрипт для запуска предварительной обработки:

python preprocess.py -train_src data/src-train.txt -train_tgt data/tgt-train.txt -valid_src data/src-val.txt -valid_tgt data/tgt-val.txt -save_data data/demo

Это даст:

  • demo.train.pt: сериализованный файл PyTorch, содержащий данные обучения
  • demo.valid.pt: сериализованный файл PyTorch, содержащий данные проверки
  • demo.vocab.pt: сериализованный файл PyTorch, содержащий словарные данные

Обучение

Основной сценарий обучения прост. Основной скрипт будет запускать модель по умолчанию, состоящую из двухуровневого LSTM, имеющего 500 скрытых единиц для кодировщика и декодера. Чтобы использовать GPU для обучения, достаточно добавить параметр - «gpu_ranks = 0». Для обучения нам нужно передать два параметра. Во-первых, это выходная папка предварительной обработки данных, а во-вторых, выходная папка, в которой можно сохранить файл модели.

python train.py -data data/demo -save_model demo-model

Если вы хотите использовать модель трансформатора, загляните в faq OpenNMT.

Перевод / вывод

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

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

python translate.py -model demo-model_acc_XX.XX_ppl_XXX.XX_eX.pt -src data/src-test.txt -output pred.txt -replace_unk -verbose

Оценка

Мы оцениваем модели машинного перевода, вычисляя BLEU (двуязычный дублер). Качество машинного перевода считается соответствием результатов работы машины и человека: Чем ближе машинный перевод к профессиональному человеческому переводу, тем он лучше - это центральная идея BLEU. BLEU был одним из первых показателей, заявивших о высокой корреляции с человеческими оценками качества, и остается одним из самых популярных автоматизированных и недорогих показателей. Это быстро и не зависит от языка.

Оценка BLEU всегда находится в диапазоне от 0 до 1, где 0 означает полное несоответствие, а 1 означает идеальное совпадение. Итак, модель машинного перевода оценивается по СИНИМ баллам. Чем лучше модель, тем выше оценка.

Заключение

· Машинный перевод - это не что иное, как последовательное моделирование (Seq2Seq)

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

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

· Мы досконально разобрались в системе NMT и ее архитектуре, содержащей кодировщик и декодер, которые используют LSTM для сохранения контекста и понимания более длинных последовательностей.

· Затем мы внедрили нашу собственную систему NMT, используя набор инструментов с открытым исходным кодом OpenNMT-py, созданный для Pytortch, для перевода с английского на немецкий. Однако этот подход можно использовать для перевода на любой язык при наличии параллельного корпуса.

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

Я бы определенно посоветовал также взглянуть на Почему трансформаторы обеспечивают лучшую последовательность для результатов последовательности ».

Чтобы узнать больше о НЛП, глубоком обучении, виртуальных помощниках и многом другом, следите за нашим блогом и социальными сетями.

Дополнительные ресурсы для более глубокого понимания

Seq2Seq с вниманием и поиском луча

TensorFlow / NMT

Аллен-ай / бит-атт-поток

Нейронный машинный перевод - Учебник ACL 2016

Понимание LSTM