ที่เก็บนี้รวมถึงรหัสและสคริปต์สำหรับการเพิ่มข้อมูลที่กำหนดเป้าหมายคำที่หายากสำหรับการแปลเครื่องประสาทที่เสนอในบทความของเรา
หากคุณใช้รหัสนี้โปรดอ้างอิง:
@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}
}
ก่อนที่จะฝึกอบรมแบบจำลองภาษาแบบ monolingual ใน [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{}
.{}
บรรทัดแรกคือประโยคดั้งเดิมและแต่ละบรรทัดหลังจากนั้นเป็นคำในประโยคและการแทนที่ที่แนะนำด้วยความถี่ที่เกี่ยวข้อง
การใช้เอาท์พุทการทดแทนด้าน [TRG/SRC] ของ Bitext การจัดตำแหน่งและไฟล์ความน่าจะเป็นคำศัพท์ที่คุณสามารถสร้าง Corpora ที่เพิ่มขึ้น
คุณสามารถใช้ fast_align เพื่อรับการจัดตำแหน่งสำหรับ 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
...
เพื่อสร้าง bitxt ที่เพิ่มขึ้นคุณสามารถเรียกใช้:
perl ./scripts/data_augmentation.pl subs.intersect train.de alignment.txt lex.txt augmentedOutput
สิ่งนี้จะสร้างสองไฟล์: augmentedOutput.augmented ใน [SRC/TRG] และ augmentedOutput.fillout ในภาษา [TRG/SRC] ไฟล์แรกคือด้านข้างของ bitext เพิ่มการกำหนดเป้าหมายคำที่หายาก ไฟล์ที่สองคือการแปลตามลำดับของประโยคที่เพิ่มขึ้น
หากคุณต้องการเปลี่ยนแปลงมากกว่าหนึ่งประโยคในแต่ละประโยคคุณสามารถเรียกใช้:
perl ./scripts/data_augmentation_multiplechanges.pl subs.intersect train.de alignment.txt lex.txt augmentedOutput
นี่คือประโยคจากไฟล์ Augmented ใน [SRC/TRG]:
at the same time , the rights of consumers began:604~need to be maintained .
และประโยคที่เกี่ยวข้องจากไฟล์ Fillout ใน [TRG/SRC]:
gleichzeitig begann~müssen die rechte der verbraucher geschützt werden .
ในไฟล์ Augmented คำ เริ่มต้น ด้วย Frequncy 604 แทนคำ ที่ต้องการ ในไฟล์ Fillout การแปลของคำ เริ่มต้น ใช้แทนคำต้นฉบับ Müssen
ในการลบ Markups ทั้งหมดและมี bitext ที่สะอาดซึ่งสามารถใช้สำหรับการฝึกอบรมการแปลคุณสามารถเรียกใช้:
perl ./scripts/filter_out_augmentations.pl augmentedOutput.en augmentedOutput.de 1000
คุณสามารถกำหนดขีด จำกัด ความถี่เพิ่มเติมเกี่ยวกับคำที่หายากที่คุณต้องการเพิ่มที่นี่
ในงานนี้ใช้รหัสนี้: