我正在使用English to German中经过预训练的MarianMT机器翻译模型。我还有大量高质量的英语到德语的句子对,我想使用它们来增强模型的性能,这是在OPUS语料库上训练的,但是无需 忘记 OPUS培训数据。有没有办法做到这一点?谢谢。
答案 0 :(得分:1)
您是否尝试过here所示的finetune.sh脚本?除了此处列出的CLI标志简短列表之外,您还可以尝试添加:
--src_lang "en" \
--tgt_lang "de" \
--num_train_epochs 400 \
--warmup_steps 20 \
--train_batch_size 32 \
--eval_batch_size 32 \
--data_dir "/data/dir" \
--output_dir "/path/to/store/model/etc" \
--cache_dir "/path/for/misc/files" \
--max_source_length 128 \
--max_target_length 128 \
--val_max_target_length 128 \
--test_max_target_length 128 \
--model_name_or_path "</path/to/pretrained>"
其中“ / path / to / pretrained”可以是您计算机上的本地路径,也可以是MarianMT模型(Opus-en-de或等效名称)。 “ data / dir”具有用于源语言和目标语言的“ train.source”和“ train.target”,因此目标的行号x是源语言中行x的翻译(与“ val。源”和“目标值”)。我已将finetune.py脚本here更改为
parser = TranslationModule.add_model_specific_args(parser, os.getcwd())
然后运行finetune.sh脚本。
注意:当我使用“ fp16”标志(与Pytorch 1.6一起使用)时,渐变会爆炸,因此我将其删除了。另外,您可能要检查“ val_check_interval”,“ check_val_every_n_epoch”,并可能要检查this issue如何保存多个检查点。
答案 1 :(得分:1)
我按照此处所述进行了微调:https://github.com/huggingface/transformers/tree/master/examples/seq2seq#translation
要训练模型(从 fr 到 de)并在最后进行评估: python examples/seq2seq/run_translation.py --do_train True --do_eval True --model_name_or_path Helsinki-NLP/opus-mt-de-fr --source_lang de --target_lang fr --source_prefix "将德语翻译成法语:" -- train_file ../data/translations-train-de-fr1.json --validation_file ../data/translations-val-de-fr1.json --output_dir ../tst-translation-models --per_device_train_batch_size=4 -- per_device_eval_batch_size=4 --overwrite_output_dir True --predict_with_generate True --fp16 True
训练好的模型存储在文件夹中:tst-translation-models
仅使用微调模型进行评估: 文件夹使用“copy_mode.sh”,必须根据语言进行调整): python examples/seq2seq/run_translation.py --do_train False --do_eval True --model_name_or_path ../tst-translation-models --source_lang de --target_lang fr --source_prefix "将德语翻译成法语:" --validation_file .. /data/translations-val-de-fr1.json --per_device_eval_batch_size=4 --predict_with_generate True --fp16 True
问候,菲利克斯
PS:请注意,训练和估值数据必须采用以下形式(每行一个这样的条目): { "translation": { "de": "Freilegung der Leitung (durch VN installiert)", "fr": "Dégagement de la导管 (installée par le PA)" } }