Buckets:
| # 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]] | |
| ```py | |
| 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: | |
| ```py | |
| 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'} | |
| ```py | |
| from transformers import DataCollatorForSeq2Seq | |
| data_collator = DataCollatorForSeq2Seq(tokenizer, model=None) | |
| ``` | |
| {:else} | |
| ```py | |
| from transformers import DataCollatorForSeq2Seq | |
| data_collator = DataCollatorForSeq2Seq(tokenizer, model=None, return_tensors="tf") | |
| ``` | |
| {/if} | |
| ## Ajuste del modelo[[fine-tuning-the-model]] | |
| {#if fw === 'pt'} | |
| ```py | |
| from transformers import AutoModelForSeq2SeqLM | |
| model = AutoModelForSeq2SeqLM.from_pretrained(model_checkpoint) | |
| ``` | |
| En PyTorch, el flujo natural es usar `Seq2SeqTrainer`, que sabe evaluar con `generate()`. | |
| {:else} | |
| ```py | |
| 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](https://github.com/mjpost/sacrebleu), que normaliza la tokenización: | |
| ```py | |
| !pip install sacrebleu | |
| ``` | |
| ```py | |
| 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.