Repositori ini mencakup kode dan skrip untuk augmentasi data yang menargetkan kata -kata langka untuk terjemahan mesin saraf yang diusulkan dalam makalah kami.
Jika Anda menggunakan kode ini, silakan kutip:
@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}
}
Sebelum melatih model bahasa monolingual di [SRC/TRG], Anda harus melakukan preprocess data untuk arah maju dan mundur menggunakan 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
Ini akan menghasilkan file data.h5 dan data.json yang akan diteruskan ke skrip pelatihan.
Setelah preprocessing data, Anda perlu melatih dua model bahasa di arah maju dan mundur.
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
Ada lebih banyak bendera yang dapat Anda gunakan untuk mengonfigurasi pelatihan.
Input vocabfreq adalah daftar frekuensi kata-kata dalam pengaturan sumber daya rendah yang membutuhkan augmentasi nanti menggunakan model bahasa ini. Formatnya adalah:
...
change 3028
taken 3007
large 2999
again 2994
...
Setelah melatih model bahasa, Anda dapat menghasilkan kalimat baru di Bitext Anda untuk [SRC TRG]. Anda dapat menjalankan ini:
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 adalah sisi bitext yang Anda targetkan untuk augmentasi kata -kata langka. vocabfreq adalah daftar frekuensi yang digunakan untuk mendeteksi kata -kata langka. topk menunjukkan jumlah maksimum substitusi yang ingin Anda miliki untuk setiap posisi dalam kalimat.
Menjalankan dua kode ini akan memberi Anda augmented corpora dengan daftar pengganti di satu sisi: train.en.subs and train.en.rev.subs . Untuk menemukan substisi yang paling cocok dengan konteksnya, Anda harus menemukan persimpangan kedua daftar ini:
perl ./scripts/generate_intersect.pl train.en.subs train.en.rev.subs subs.intersect
subs.intersect berisi substitusi yang dapat digunakan untuk menambah bitext. Berikut contoh output:
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{}
.{}
Baris pertama adalah kalimat asli, dan setiap baris setelah itu adalah kata dalam kalimat dan penggantian yang disarankan dengan frekuensi masing -masing.
Menggunakan output substitusi, sisi [trg/src] dari bitext, penyelarasan, dan file probabilitas leksikal Anda dapat menghasilkan korpora augmented.
Anda dapat menggunakan Fast_align untuk mendapatkan keberpihakan untuk Bitext Anda. Format input penyelarasan adalah:
...
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
...
Input probabilitas leksikal dapat diperoleh dari kamus, atau keberpihakan. Formatnya adalah:
...
safely sicher 0.0051237409068
safemode safemode 1
safeness antikollisionssystem 0.3333333
safer sicherer 0.09545972221228
...
Untuk menghasilkan bitext augmented, Anda dapat menjalankan:
perl ./scripts/data_augmentation.pl subs.intersect train.de alignment.txt lex.txt augmentedOutput
Ini akan menghasilkan dua file: augmentedOutput.augmented dalam [SRC/TRG] dan augmentedOutput.fillout dalam bahasa [TRG/SRC]. File pertama adalah sisi Bitext Augmented yang menargetkan kata -kata langka. File kedua adalah terjemahan masing -masing dari kalimat yang ditambah.
Jika Anda ingin memiliki lebih dari satu perubahan dalam setiap kalimat, Anda juga dapat menjalankan:
perl ./scripts/data_augmentation_multiplechanges.pl subs.intersect train.de alignment.txt lex.txt augmentedOutput
Berikut adalah kalimat dari file augmented di [src/trg]:
at the same time , the rights of consumers began:604~need to be maintained .
dan kalimat masing -masing dari file pengisian di [trg/src]:
gleichzeitig begann~müssen die rechte der verbraucher geschützt werden .
Dalam file augmented, kata itu dimulai dengan frequncy 604 menggantikan kata kebutuhan . Dalam file pengisian terjemahan kata, dimulai , menggantikan kata asli Müssen .
Untuk menghapus semua markup dan memiliki bitext bersih yang dapat digunakan untuk pelatihan terjemahan yang dapat Anda jalankan:
perl ./scripts/filter_out_augmentations.pl augmentedOutput.en augmentedOutput.de 1000
Anda dapat memaksakan batas frequncy lebih lanjut pada kata -kata langka yang ingin Anda ungkapkan di sini.
Dalam pekerjaan ini kode ini digunakan: