Skip to content

Latest commit

 

History

History
225 lines (149 loc) · 20 KB

Нейронный машинный перевод%3A использование Open-NMT для обучения модели перевода.md

File metadata and controls

225 lines (149 loc) · 20 KB

Нейронный машинный перевод: использование Open-NMT для обучения модели перевода

Этот блог предназначен для предоставления пошагового руководства, чтобы научиться генерировать переводы с данного языка на любой целевой язык. Методология, которую мы используем для поставленной задачи, полностью мотивирована библиотекой с открытым исходным кодом, реализация pyTorch которой доступна на языке python, называемой Open-NMT (Open-Source Neural Machine Translation). Он разработан для того, чтобы энтузиасты глубокого обучения могли его использовать для реализации своих идей в области машинного перевода, обобщения, преобразования изображений в текст, морфологии и т.д.

Хотя существует довольно много эффективных систем перевода от Google Translate, Microsoft и т. д., Они либо не имеют открытого исходного кода, либо закрыты по ограничительной лицензии. Другие библиотеки, такие как модели tennflow-seq2seq, существуют для этой цели, но в качестве исследовательского кода. Open-NMT не только с открытым исходным кодом, но также предоставляет хорошо документированный, модульный и читаемый код для быстрого обучения и эффективной работы моделей.

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

Краткий обзор архитектуры Open-NMT:

Open-NMT основан на исследованиях Гийома Кляйна и др., Найденных here .

Согласно документу, о его архитектуре раскрываются следующие подробности:

OpenNMT - это полная библиотека для обучения и развертывания моделей нейронного машинного перевода. Система является наследницей seq2seq-attn, разработанной в Гарварде, и была полностью переписана для простоты эффективности, удобочитаемости и обобщения. Он включает в себя ванильные модели NMT, а также поддержку внимания, стробирования, укладки, подачи входного сигнала, регуляризации, поиска луча и всех других опций, необходимых для современного уровня производительности.

Основная система реализована в математической структуре Lua / Torch и может быть легко расширена с помощью внутренних стандартных компонентов нейронной сети Torch. Он также был расширен Адамом Лерером из Facebook Research для поддержки платформы Python / PyTorch с тем же API.

Настройка необходимых модулей

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

Конечно, предварительным шагом является клонирование репозитория OpenNMT-py:

git clone https://github.com/OpenNMT/OpenNMT-py  
cd OpenNMT-py

Вот файл require.txt для сбора всех необходимых пакетов:

six  
tqdm  
torch>=0.4.0  
git+ [https://github.com/pytorch/text](https://github.com/pytorch/text)   
future

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

Выполните следующую команду, чтобы автоматически собрать обязательные зависимости:

pip install -r requirements.txt

Соберите наборы данных

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

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

  • src-train.txt : Учебный файл, содержащий 10000 предложений на английском языке (на исходном языке)
  • tgt-train.txt : Учебный файл, содержащий 10000 предложений на хинди (целевой язык)
  • src-val.txt : Данные проверки, состоящие из 1000 предложений на английском языке (на исходном языке)
  • tgt-val.txt : Данные проверки, состоящие из 1000 предложений на хинди (целевой язык)
  • src-test.txt : Данные тестовой оценки, состоящие из 1000 предложений на английском языке (на исходном языке)
  • tgt-test.txt : Данные оценки теста, состоящие из 1000 предложений на хинди (целевой язык)

Все вышеперечисленные файлы находятся в каталоге /data.

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

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

Вот пример, показывающий, как текстовые данные расположены в соответствующих файлах:

Исходные файлы: They also bring out a number of Tamil weekly newspapers.
They are a hard — working people and most of them work as labourers.
Tamil films are also shown in the local cinema halls.
There are quite a large number of Malayalees living here.

Целевые файлы:

तमिल भाषा में वे अनेक समाचार पत्र व पत्रिकाएं भी निकालते हैं .
ये लोग काफी परिश्रमी हैं , अधिकांश लोग मजदूरी करते हैं .
स्थानीय सिनेमा हालों में तमिल चलचित्रों का प्रदर्शन अक्सर किया जाता है .
मलयालम लोगों की बहुत बडी संख्या है .

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

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

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

Обучение модели «Переводчик»:

Главная команда для trianing действительно проста в использовании. По сути, он принимает в качестве входных данных файл данных и файл сохранения.

Резюме используемой модели по умолчанию выглядит следующим образом:

NMTModel(
(encoder): RNNEncoder(
(embeddings): Embeddings(
(make_embedding): Sequential(
(emb_luts): Elementwise(
(0): Embedding(20351, 500, padding_idx=1)
)
)
)
(rnn): LSTM(500, 500, num_layers=2, dropout=0.3)
)
(decoder): InputFeedRNNDecoder(
(embeddings): Embeddings(
(make_embedding): Sequential(
(emb_luts): Elementwise(
(0): Embedding(20570, 500, padding_idx=1)
)
)
)
(dropout): Dropout(p=0.3)
(rnn): StackedLSTM(
(dropout): Dropout(p=0.3)
(layers): ModuleList(
(0): LSTMCell(1000, 500)
(1): LSTMCell(500, 500)
)
)
(attn): GlobalAttention(
(linear_in): Linear(in_features=500, out_features=500, bias=False)
(linear_out): Linear(in_features=1000, out_features=500, bias=False)
(softmax): Softmax()
(tanh): Tanh()
)
)
(generator): Sequential(
(0): Linear(in_features=500, out_features=20570, bias=True)
(1): LogSoftmax()
)
)


python train.py -data data/demo -save\_model demo-model

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

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

Переведите свои собственные данные:

Следующая команда может быть выполнена для выполнения шага вывода невидимого текста на исходном языке (английском) и генерирования соответствующих предсказанных переводов:

python translate.py -model demo-model\_XYZ.pt -src data/src-test.txt -output pred.txt -replace\_unk -verbose

Это сгенерирует переведенный вывод и сохранит прогнозы в файл с именем pred.txt.

Модель была подготовлена для 10000 эпох на GPU NVIDIA GEFORCE 2 ГБ. Обучение на ЦП потребует очень высоких вычислительных затрат, поэтому рекомендуется использовать высокопроизводительный графический процессор для обучения модели с большим количеством данных с большей скоростью.

Примерные прогнозы модели:

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

Trees are capable of absorbing more of carbon dioxide, thus maintaining equilibrium in the air composition .

PREDICTED : पेडों में कार्बन डाईआक्साइड के बुरे लोग इस प्रकार पेड - पौधे का प्रयोग करने के लिए मौजूद हैं .

He has hope that the gods will throw good things from the heavens , upon them .

PREDICTED :वे उमीद है कि वे घर से कुछ नहीं बची हैं .

The Buddhist temple , the Dalai Lama Palace and dispensary of Tibet are tourist attractions here .

PREDICTED :यहां का बौद्ध मंदिर दलाई लामा का आवास तथा तिब्बती औषधालय स्थानिय लोगो में मिलता है .

He lets the hair grow long.

PREDICTED : वह अपने बढा लेता है .

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

Оцените вашу обученную модель:

Двуязычная оценка Оценка дублера

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

Идеальное совпадение в этом сравнении приводит к баллу BLEU, равному 1.0, а полное несовпадение - к баллу BLEU, равному 0.0.

Оценка BLEU - это универсально адаптированная метрика для оценки моделей перевода, поскольку она не зависит от языка, проста для интерпретации и имеет высокую корреляцию с ручной оценкой.

Оценка BLEU была предложена в исследовании, проведенном Kishore Papineni, et al. “ BLEU: метод автоматической оценки машинного перевода “.

BLEU SCore генерируется после подсчета n-граммов в переводе кандидата, совпадающего с n-граммами в тексте ссылки. Порядок слов в этом сравнении не учитывается.

Так как бы мы определили n-грамм? Скажем, 1 грамм или униграмма будут означать каждый отдельный токен, а биграмма будет представлять каждую пару слов.

Код для расчета баллов BLEU, с учетом вашего файла предсказанного кандидата и справочного файла, указанного в репозитории GitHub, ссылка на который приведена в конце блога.

Вот как мы запускаем код для оценки модели:

python calculatebleu.py "pred.txt" "tgt-test.txt"

Где pred.txt - это файл перевода, предсказанный кандидатом, а tgt-test.txt - файл, содержащий фактические переводы на целевом языке.

Поскольку наш словарный запас данных, сгенерированный с помощью 10 тыс. Предложений, состоит всего из нескольких тысяч слов, показатель BLEU, который мы получаем по нашему прогнозу, довольно плохой (0,025).

Заметка: Поскольку наша основная цель сосредоточена на разработке использования Open-NMT, мы используем только небольшой набор данных, поэтому оценка наших предсказанных результатов перевода является плохой оценкой BLEU. BLEU Оценка около 0,5 подразумевает приличный перевод. Увеличьте обучающий словарный запас, добавив еще несколько тысяч примеров для улучшения результата.

Однако Open-NMT позволяет нам обучать наши собственные модели переводчиков между любыми парами языков и очень удобен в использовании.

Код для генерации Балла BLEU и наборы данных, использованные при обучении нашей модели, были предоставлены здесь .

Если у вас есть какие-либо вопросы или предложения, я хотел бы услышать об этом. Пожалуйста, напишите мне по адресу abhishek.narayanan@dataturks.com.


NMT OpenNMT Нейронный машинный перевод