OpenNMT-py низкие баллы BLEU для переводчиков на немецкий язык

Я обучал модели OpenNLP-py с английского на немецкий и с итальянского на немецкий на Europarl, и я получил очень низкие баллы BLEU: 8,13 для английского -> немецкий и 4,79 для итальянского -> немецкий.

Поскольку я еще не являюсь экспертом в NN, я принял настройки по умолчанию, предоставляемые библиотекой. Обучение 13 эпох занимало в обоих случаях примерно 20 часов. В обоих случаях я использовал 80% набора данных для обучения, 10% для проверки и 10% для тестирования.

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

# $ wc -l Europarl.de-it.de
# 1832052 Europarl.de-it.de

head -1465640 Europarl.de-it.de > train_de-it.de
head -1465640 Europarl.de-it.it > train_de-it.it

tail -n 366412 Europarl.de-it.de | head -183206 > dev_de-it.de
tail -n 366412 Europarl.de-it.it | head -183206 > dev_de-it.it

tail -n 183206 Europarl.de-it.de > test_de-it.de
tail -n 183206 Europarl.de-it.it > test_de-it.it

perl tokenizer.perl -a -no-escape -l de < ../data/train_de-it.de > ../data/train_de-it.atok.de
perl tokenizer.perl -a -no-escape -l de < ../data/dev_de-it.de > ../data/dev_de-it.atok.de
perl tokenizer.perl -a -no-escape -l de < ../data/test_de-it.de > ../data/test_de-it.atok.de

perl tokenizer.perl -a -no-escape -l it < ../data/train_de-it.it > ../data/train_de-it.atok.it
perl tokenizer.perl -a -no-escape -l it < ../data/dev_de-it.it > ../data/dev_de-it.atok.it
perl tokenizer.perl -a -no-escape -l it < ../data/test_de-it.it > ../data/test_de-it.atok.it

python3 preprocess.py \
-train_src ../data/train_de-it.atok.it \
-train_tgt ../data/train_de-it.atok.de \
-valid_src ../data/dev_de-it.atok.it \
-valid_tgt ../data/dev_de-it.atok.de \
-save_data ../data/europarl_de_it.atok.low \
-lower

python3 train.py \
-data ../data/europarl_de_it.atok.low.train.pt \
-save_model ../models_en_de/europarl_it_de_models \
-gpus 0

1 ответ

Решение

Вы можете получить множество советов по модели Training Romance Multi-Way, а также по обучению англо-немецкому двигателю WMT15 NMT. Основная идея состоит в том, чтобы запустить токенизацию BPE в объединенном учебном корпусе XXYY, а затем токенизировать учебные корпуса с помощью изученных моделей BPE.

Токенизация байтовой пары должна быть полезна для немецкого языка из-за его составления, алгоритм помогает разбить слова на единицы подслов. Хитрость в том, что вам нужно тренировать модель BPE на одном тренировочном корпусе, содержащем источник и цель. Смотрите комментарий Жана Сенеллара:

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

Другая идея состоит в том, чтобы токенизировать с -case_feature, Это также хорошая идея для всех языков, где буквы могут иметь разные регистры. Смотрите комментарий Жана:

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

Чтобы улучшить качество МП, вы также можете попробовать

  1. Получение большего количества корпусов (например, корпусов WMT16)
  2. Настройтесь, используя обучение в домене
Другие вопросы по тегам