Этот репозиторий включает в себя коды и сценарии для увеличения данных, нацеленных на редкие слова для перевода нейронной машины, предложенной в нашей статье.
Если вы используете этот код, цитируйте:
@InProceedings{fadaee-bisazza-monz:2017:Short2,
author = {Fadaee, Marzieh and Bisazza, Arianna and Monz, Christof},
title = {Data Augmentation for Low-Resource Neural Machine Translation},
booktitle = {Proceedings of the 55th Annual Meeting of the Association for Computational Linguistics (Volume 2: Short Papers)},
month = {July},
year = {2017},
address = {Vancouver, Canada},
publisher = {Association for Computational Linguistics},
pages = {567--573},
url = {http://aclweb.org/anthology/P17-2090}
}
Перед обучением модели одноязычного языка в [SRC/TRG] вам нужно будет предварительно обработать данные как для прямого и обратного направления, используя preprocess.no_preset_v.py .
python src/preprocess.no_preset_v.py --train_txt ./wiki.train.txt
--val_txt ./wiki.val.txt --test_txt ./wiki.test.txt
--output_h5 ./data.h5 --output_json ./data.json
Это создаст файлы data.h5 и data.json , которые будут переданы в учебный скрипт.
После предварительной обработки данных вам понадобятся две языковые модели в направлении вперед и назад.
th src/train.lua -input_h5 data.h5 -input_json data.json
-checkpoint_name models_rnn/cv -vocabfreq vocab_freq.trg.txt
th src/train.lua -input_h5 data.rev.h5 -input_json data.rev.json
-checkpoint_name models_rnn_rev/cv -vocabfreq vocab_freq.trg.txt
Есть еще много флагов, которые вы можете использовать для настройки обучения.
Вход vocabfreq -это частотный список слов в настройке с низким разрешением, которые нуждаются в увеличении позже при использовании этих языковых моделей. Формат:
...
change 3028
taken 3007
large 2999
again 2994
...
После обучения языковых моделей вы можете генерировать новые предложения в своем Bitext для [src trg]. Вы можете запустить это:
th src/substitution.lua -checkpoint models_rnn/cv_xxx.t7 -start_text train.en
-vocabfreq vocab_freq.trg.txt -sample 0 -topk 1000 -bwd 0 > train.en.subs
th src/substitution.lua -checkpoint models_rev.rnn/cv_xxx.t7 -start_text train.en.rev
-vocabfreq vocab_freq.trg.txt -sample 0 -topk 1000 -bwd 1 > train.en.rev.subs
start_text - это сторона Bitext, на которую вы нацелены на увеличение редких слов. vocabfreq - это список частот, используемый для обнаружения редких слов. topk указывает максимальное количество замен, которые вы хотите иметь для каждой позиции в предложении.
Запуск этих двух кодов даст вам дополненные корпусы со списком замен на одной стороне: train.en.subs и train.en.rev.subs . Чтобы найти разжижения, которые лучше всего соответствуют контексту, вам нужно найти пересечение этих двух списков:
perl ./scripts/generate_intersect.pl train.en.subs train.en.rev.subs subs.intersect
subs.intersect содержит замены, которые можно использовать для увеличения Bitext. Вот пример вывода:
information where we are successful will be published in this unk .
information{}
where{}
we{doctors:136 humans:135}
are{became:764 remained:245}
successful{}
will{}
be{}
published{interested:728 introduced:604 kept:456 performed:289 placed:615 played:535 released:477 written:790}
in{behind:932 beyond:836}
this{henry:58}
unk{}
.{}
Первая строка - это исходное предложение, и каждая строка после этого является словом в предложении и предлагается замены с соответствующими частотами.
Используя выход замену, сторону BiteSt, выравнивание и файл лексической вероятности [TRG/SRC, вы можете генерировать дополненные корпора.
Вы можете использовать FAST_ALINE, чтобы получить выравнивания для вашего Bitext. Формат ввода выравнивания:
...
0-0 1-10 2-3 2-4 2-5 3-13 4-14 5-8 5-9 6-16 7-14 8-11 10-6 11-7 12-17
0-0 1-0 2-0 2-2 3-1 3-3 4-5 5-5 6-6 8-8 9-9 10-10 11-11
...
Ввод лексической вероятности может быть получен из словаря или выравнивания. Формат:
...
safely sicher 0.0051237409068
safemode safemode 1
safeness antikollisionssystem 0.3333333
safer sicherer 0.09545972221228
...
Чтобы генерировать дополненный Bitext, который вы можете запустить:
perl ./scripts/data_augmentation.pl subs.intersect train.de alignment.txt lex.txt augmentedOutput
Это будет генерировать два файла: augmentedOutput.augmented на [SRC/TRG] и augmentedOutput.fillout на языке [TRG/SRC]. Первый файл является стороной Bitext Augmented, нацеленной на редкие слова. Второй файл является соответствующим переводом дополненных предложений.
Если вы хотите иметь более одного изменения в каждом предложении, вы также можете запустить:
perl ./scripts/data_augmentation_multiplechanges.pl subs.intersect train.de alignment.txt lex.txt augmentedOutput
Вот предложение из дополненного файла в [src/trg]:
at the same time , the rights of consumers began:604~need to be maintained .
и соответствующее предложение из файла заполнения в [trg/src]:
gleichzeitig begann~müssen die rechte der verbraucher geschützt werden .
В дополненном файле слово началось с Frequncy 604 заменяет слово необходимость . В файле начинки перевод слова, Betnan , заменяет исходное слово Müssen .
Чтобы удалить все наценки и иметь чистый Bitext, который можно использовать для тренировок по переводу, вы можете запустить:
perl ./scripts/filter_out_augmentations.pl augmentedOutput.en augmentedOutput.de 1000
Вы можете навязывать дальнейшее ограничение на редкие слова, которые вы хотите увеличить здесь.
В этой работе этот код используется: