Este repositorio incluye los códigos y scripts para el aumento de datos dirigido a palabras raras para la traducción del automóvil neuronal propuesto en nuestro documento.
Si usa este código, cite:
@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}
}
Antes de entrenar el modelo de lenguaje monolingüe en [SRC/TRG], deberá preprocesar los datos para la dirección hacia adelante y hacia atrás usando 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
Esto producirá archivos data.h5 y data.json que se pasará al script de capacitación.
Después de preprocesar los datos, necesitará entrenar dos modelos de idiomas en direcciones hacia adelante y hacia atrás.
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
Hay muchos más banderas que puede usar para configurar la capacitación.
La entrada vocabfreq es la lista de frecuencia de palabras en la configuración de baja recursos que necesitan aumento más adelante utilizando estos modelos de idiomas. El formato es:
...
change 3028
taken 3007
large 2999
again 2994
...
Después de capacitar a los modelos de idiomas, puede generar nuevas oraciones en su BITEXT para [SRC TRG]. Puedes ejecutar esto:
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 es el lado del bittext al que está apuntando al aumento de palabras raras. vocabfreq es la lista de frecuencia utilizada para detectar palabras raras. topk indica el número máximo de sustituciones que desea tener para cada posición en la oración.
La ejecución de estos dos códigos le dará corpus aumentados con una lista de sustituciones en un lado: train.en.subs y train.en.rev.subs . Para encontrar subesticiones que mejor coincidan con el contexto, necesitará encontrar la intersección de estas dos listas:
perl ./scripts/generate_intersect.pl train.en.subs train.en.rev.subs subs.intersect
subs.intersect contiene las sustituciones que se pueden usar para aumentar el bittext. Aquí hay un ejemplo de la salida:
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{}
.{}
La primera línea es la oración original, y cada línea después de eso es una palabra en la oración y sustituciones sugeridas con frecuencias respectivas.
Usando la salida de sustitución, el lado [TRG/SRC] del BITEXT, la alineación y el archivo de probabilidad léxico puede generar los corpuses aumentados.
Puede usar Fast_Align para obtener alineaciones para su bittext. El formato de la entrada de alineación es:
...
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
...
La entrada de probabilidad léxica se puede obtener de un diccionario o las alineaciones. El formato es:
...
safely sicher 0.0051237409068
safemode safemode 1
safeness antikollisionssystem 0.3333333
safer sicherer 0.09545972221228
...
Para generar el BITEXT aumentado, puede ejecutar:
perl ./scripts/data_augmentation.pl subs.intersect train.de alignment.txt lex.txt augmentedOutput
Esto generará dos archivos: augmentedOutput.augmented en [SRC/TRG] y augmentedOutput.fillout en el lenguaje [TRG/SRC]. El primer archivo es el lado del Aumentado de BITEXT dirigido a las raras palabras. El segundo archivo son las traducciones respectivas de las oraciones aumentadas.
Si desea tener más de un cambio en cada oración, también puede ejecutar:
perl ./scripts/data_augmentation_multiplechanges.pl subs.intersect train.de alignment.txt lex.txt augmentedOutput
Aquí hay una oración del archivo aumentado en [SRC/TRG]:
at the same time , the rights of consumers began:604~need to be maintained .
y oración respectiva del archivo de relleno en [TRG/SRC]:
gleichzeitig begann~müssen die rechte der verbraucher geschützt werden .
En el archivo aumentado, la palabra comenzó con Frequncy 604 sustituye la palabra necesidad . En el archivo de relleno, la traducción de la palabra, comenzó , sustituye la palabra original Müssen .
Para eliminar todos los marcados y tener un bitex de limpieza que se pueda utilizar para el entrenamiento de traducción, puede ejecutar:
perl ./scripts/filter_out_augmentations.pl augmentedOutput.en augmentedOutput.de 1000
Puede imponer más límites de frekuncy en palabras raras que desea aumentar aquí.
En este trabajo se utiliza este código: