Tutorial: Fine‐tuning de modelos de OpusMT - mtuoc/mtuoc.github.io GitHub Wiki
Introducción
En el Tutorial: poner en marcha motores OpusMT con MTUOC‐server tuvimos un primer contacto con los modelos de OpusMT y aprendimos a ponerlos en marcha con el MTUOC-server.
En este tutorial vamos a aprender a adaptar estos motores a nuestras necesidades mediante el proceso que se denomina fine-tuning. Este proceso consiste en tomar un modelo ya creado y continuar el entrenamiento con otro corpus del mismo par de lenguas. Este segundo corpus será el corpus especializado y nuestro objetivo es que las traducciones que ofrezca el modelo una vez adapatado se asemejen a las traducciones que hay en el corpus.
Al igual con lo que ocurre en el entrenamiento de modelos de traducción automática neuronal, el fine-tuning de modelos también requiere de unidades GPU, ya que si no se dispone de ellas el proceso puede llegar a ser extremadamente largo.
Preprocesamiento del corpus para finetuning
Finetuning del modelo
Evaluación de los modelos
Al procesar el corpus reservamos 5.000 segmentos para la evaluación. Quizás 5.000 sean demasiados segmentos y más aún si entre los sistemas comparados se encuentran sistemas comerciales que tienen un coste asociado. Utilizaremos únicamente los 1.000 primeros segmentos del corpus de evaluación. Recordad que en terminal Linux se puede hacer:
head -n 1000 eval.en > eval1K.en
head -n 1000 eval.es > eval1K.es
Ahora pondremos en marcha el motor OpusMT sin el finetuning y traduciremos el conjunto de evaluación con este corpus. Una buena idea es utilizar MTUOC-Translator-lite.py, que se puede obtener de https://github.com/mtuoc/MTUOC-Translator. Si el motor esta en la ip 192.168.1.51, puerto 8000 y se ha puesto en marcha con el protocolo MTUOC, escribiremos.
python3 MTUOC-Translator-lite.py --ip 192.168.1.51 --port 8000 --type MTUOC -i eval1K.en -o eval1K.en-OpusMT.es
Y ahora ponemos en marcha el motor OpusMT con el finetuning, escribiremos:
python3 MTUOC-Translator-lite.py --ip 192.168.1.51 --port 8000 --type MTUOC -i eval1K.en -o eval1K.en-OpusMTFineTuned.es
Podemos traducir también el conjunto de evaluación con Google Translate y DeepL.
Ahora podemos evaluar los resultados con métricas automáticas, utilizando por ejemplo sacrebleu o si te resulta más fácil, puedes utilizar Mateo.
sacrebleu eval1K.es -i eval1K.en-OpusMT.es eval1K.en-OpusMTFineTuned.es eval1K.en-GoogleT.es eval1K.en-DeepL.es -m bleu chrf ter --paired-bs -f latex
Y obtenemos los siguientes resultados.
System | BLEU (μ ± 95% CI) | chrF2 (μ ± 95% CI) | TER (μ ± 95% CI) |
---|---|---|---|
Baseline: eval1K.en-OpusMT.es | 45.1 (45.1 ± 2.3) | 65.8 (65.8 ± 1.6) | 43.5 (43.6 ± 2.0) |
eval1K.en-OpusMTFineTuned.es | 52.9 (52.8 ± 2.6) (p = 0.0010)* | 71.1 (71.0 ± 1.6) (p = 0.0010)* | 37.5 (37.6 ± 2.1) (p = 0.0010)* |
eval1K.en-GoogleT.es | 46.2 (46.2 ± 2.7) (p = 0.0779) | 66.1 (66.1 ± 1.6) (p = 0.1838) | 45.1 (45.1 ± 2.2) (p = 0.0040)* |
eval1K.en-DeepL.es | 45.2 (45.2 ± 3.1) (p = 0.3796) | 64.9 (64.9 ± 2.2) (p = 0.1329) | 44.7 (44.8 ± 2.8) (p = 0.1329) |
Donde podemos observar que el modelo OpusMT sin finetuning obtiene un BLEU de 45.1 y con el proceso de finetuning obtenemos resultados mucho meores, de 52.9 puntos de BLEU, es decir una mejora de 7.8 puntos de BLEU. Google Translate y DeepL obtienen resultados muy similares al de OpusMT sin finetuning, y el modelo con finetuning supera claramente también a estos dos sistemas comerciales.