Buckets:

rtrm's picture
|
download
raw
3 kB

Traducción[[translation]]

{#if fw === 'pt'}

{:else}

{/if}

La traducción es una tarea de secuencia a secuencia: recibimos una secuencia en un idioma y generamos otra secuencia en un idioma distinto.

En esta sección ajustaremos un modelo Marian de inglés a francés sobre el conjunto KDE4.

El conjunto de datos KDE4[[the-kde4-dataset]]

from datasets import load_dataset

raw_datasets = load_dataset("kde4", lang1="en", lang2="fr")
split_datasets = raw_datasets["train"].train_test_split(train_size=0.9, seed=20)
split_datasets["validation"] = split_datasets.pop("test")

Cada ejemplo contiene un diccionario translation con la frase origen y la frase destino.

Tokenización de entradas y objetivos[[processing-the-data]]

La diferencia importante respecto a otras tareas es que debemos tokenizar tanto las entradas como los objetivos:

from transformers import AutoTokenizer

model_checkpoint = "Helsinki-NLP/opus-mt-en-fr"
tokenizer = AutoTokenizer.from_pretrained(model_checkpoint, return_tensors="pt")

max_length = 128

def preprocess_function(examples):
    inputs = [ex["en"] for ex in examples["translation"]]
    targets = [ex["fr"] for ex in examples["translation"]]
    model_inputs = tokenizer(
        inputs, text_target=targets, max_length=max_length, truncation=True
    )
    return model_inputs

tokenized_datasets = split_datasets.map(
    preprocess_function,
    batched=True,
    remove_columns=split_datasets["train"].column_names,
)

Data collator[[data-collation]]

Usaremos DataCollatorForSeq2Seq, que rellena entradas y etiquetas y además prepara los decoder_input_ids cuando el modelo lo necesita:

{#if fw === 'pt'}

from transformers import DataCollatorForSeq2Seq

data_collator = DataCollatorForSeq2Seq(tokenizer, model=None)

{:else}

from transformers import DataCollatorForSeq2Seq

data_collator = DataCollatorForSeq2Seq(tokenizer, model=None, return_tensors="tf")

{/if}

Ajuste del modelo[[fine-tuning-the-model]]

{#if fw === 'pt'}

from transformers import AutoModelForSeq2SeqLM

model = AutoModelForSeq2SeqLM.from_pretrained(model_checkpoint)

En PyTorch, el flujo natural es usar Seq2SeqTrainer, que sabe evaluar con generate().

{:else}

from transformers import TFAutoModelForSeq2SeqLM

model = TFAutoModelForSeq2SeqLM.from_pretrained(model_checkpoint, from_pt=True)

En TensorFlow, preparamos tf.data.Dataset y entrenamos con model.fit().

{/if}

Métricas[[metrics]]

La métrica clásica para traducción es BLEU, y hoy en día suele preferirse SacreBLEU, que normaliza la tokenización:

!pip install sacrebleu
import evaluate

metric = evaluate.load("sacrebleu")

Para calcular la métrica, decodificamos las secuencias generadas y las comparamos con las referencias. BLEU no mide comprensión semántica profunda, pero sigue siendo una referencia útil para comparar modelos de traducción.

Xet Storage Details

Size:
3 kB
·
Xet hash:
9b4a8428fbe381e130394d7181e427f854da05b19aba9c5dde0bc0820880ee69

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.