Dieses Repository enthält die Codes und Skripte für die Datenerweiterung, die auf seltene Wörter für die in unserem Papier vorgeschlagene neuronale maschinelle Übersetzung abzielen.
Wenn Sie diesen Code verwenden, zitieren Sie bitte:
@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}
}
Vor dem Training des einsprachigen Sprachmodells in [SRC/TRG] müssen Sie die Daten sowohl für die Vorwärts- als auch für die Rückwärtsrichtung mit preprocess.no_preset_v.py vorbereiten.
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
Dadurch werden Dateien data.h5 und data.json erstellt, die an das Trainingsskript übergeben werden.
Nach der Vorverarbeitung der Daten müssen Sie zwei Sprachmodelle in Vorwärts- und Rückwärtsrichtungen trainieren.
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
Es gibt viele weitere Flags, mit denen Sie das Training konfigurieren können.
Die vocabfreq Eingabe ist die Frequenzliste von Wörtern in der Einstellung mit niedrigem Ressourcen, die später die Verwendung dieser Sprachmodelle erweitern müssen. Das Format lautet:
...
change 3028
taken 3007
large 2999
again 2994
...
Nach dem Training der Sprachmodelle können Sie neue Sätze in Ihrem Bitext für [Src trg] generieren. Sie können dies ausführen:
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 ist die Seite des Bitext, den Sie für die Augmentation seltener Wörter abzielen. vocabfreq ist die Frequenzliste, die zum Erkennen seltener Wörter verwendet wird. topk gibt die maximale Anzahl von Substitutionen an, die Sie für jede Position im Satz haben möchten.
Wenn Sie diese beiden Codes ausführen, erhalten Sie ein Augmented Corpora mit einer Liste von Substitutionen auf der einen Seite: train.en.subs und train.en.rev.subs . Um Er Substenten zu finden, die am besten dem Kontext entsprechen, müssen Sie den Schnittpunkt dieser beiden Listen finden:
perl ./scripts/generate_intersect.pl train.en.subs train.en.rev.subs subs.intersect
subs.intersect enthält die Substitutionen, mit denen der Bitext erweitert werden kann. Hier ist ein Beispiel für die Ausgabe:
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{}
.{}
Die erste Zeile ist der ursprüngliche Satz, und jede Zeile danach ist ein Wort im Satz und vorgeschlagene Substitutionen mit jeweiligen Frequenzen.
Unter Verwendung der Substitutionsausgabe, der [TRG/SRC] -Seite des Bitext, der Ausrichtung und der lexikalischen Wahrscheinlichkeitsdatei können Sie die Augmented Corpora generieren.
Sie können Fast_Align verwenden, um Ausrichtungen für Ihren Bitext zu erhalten. Das Format des Ausrichtungseingangs lautet:
...
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
...
Die lexikalische Wahrscheinlichkeitseingabe kann aus einem Wörterbuch oder den Ausrichtungen erhalten werden. Das Format lautet:
...
safely sicher 0.0051237409068
safemode safemode 1
safeness antikollisionssystem 0.3333333
safer sicherer 0.09545972221228
...
Um den Augmented Bitext zu generieren, können Sie ausführen:
perl ./scripts/data_augmentation.pl subs.intersect train.de alignment.txt lex.txt augmentedOutput
Dadurch werden zwei Dateien generiert: augmentedOutput.augmented in [SRC/TRG] und augmentedOutput.fillout in [TRG/SRC] Sprache. Die erste Datei ist die Seite des Bitext Augmented, das auf die seltenen Wörter abzielt. Die zweite Datei sind entsprechende Übersetzungen der erweiterten Sätze.
Wenn Sie in jedem Satz mehr als eine Änderung haben möchten, können Sie auch ausführen:
perl ./scripts/data_augmentation_multiplechanges.pl subs.intersect train.de alignment.txt lex.txt augmentedOutput
Hier ist ein Satz aus der erweiterten Datei in [SRC/TRG]:
at the same time , the rights of consumers began:604~need to be maintained .
und jeweiliger Satz aus der Fülldatei in [TRG/SRC]:
gleichzeitig begann~müssen die rechte der verbraucher geschützt werden .
In der erweiterten Datei begann das Wort mit Frequncy 604 Ersetzte das Wort Bedürfnis . In der Fillout -Datei begann die Übersetzung des Wortes, ersetzt das ursprüngliche Wort Müssen .
Um alle Markups zu entfernen und einen sauberen Bitext zu haben, der für das Übersetzungstraining verwendet werden kann, können Sie ausgeführt werden:
perl ./scripts/filter_out_augmentations.pl augmentedOutput.en augmentedOutput.de 1000
Sie können die seltene Wörter, die Sie hier erweitern möchten, eine weitere Frequncy -Grenze auferlegen.
In dieser Arbeit wird dieser Code verwendet: