From f89797195a974103a42968c3cf9ba92c94699e46 Mon Sep 17 00:00:00 2001 From: ModelHub XC Date: Sun, 14 Jun 2026 13:07:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=EF=BC=8C=E7=94=B1ModelHub=20XC=E7=A4=BE=E5=8C=BA=E6=8F=90?= =?UTF-8?q?=E4=BE=9B=E6=A8=A1=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Model: BSC-LT/salamandraTA-2b-instruct Source: Original Platform --- .gitattributes | 42 ++ README.md | 834 +++++++++++++++++++++++++++++++++++ config.json | 30 ++ generation_config.json | 9 + images/bleu_ca.png | 3 + images/bleu_en.png | 3 + images/bleu_es.png | 3 + images/bleu_eu.png | 3 + images/bleu_gl.png | 3 + images/chart.png | Bin 0 -> 34674 bytes images/salamandra_header.png | 3 + images/treemap.png | Bin 0 -> 40620 bytes model.safetensors | 3 + special_tokens_map.json | 28 ++ tokenizer.json | 3 + tokenizer.model | 3 + tokenizer_config.json | 64 +++ 17 files changed, 1034 insertions(+) create mode 100644 .gitattributes create mode 100644 README.md create mode 100644 config.json create mode 100644 generation_config.json create mode 100644 images/bleu_ca.png create mode 100644 images/bleu_en.png create mode 100644 images/bleu_es.png create mode 100644 images/bleu_eu.png create mode 100644 images/bleu_gl.png create mode 100644 images/chart.png create mode 100644 images/salamandra_header.png create mode 100644 images/treemap.png create mode 100644 model.safetensors create mode 100644 special_tokens_map.json create mode 100644 tokenizer.json create mode 100644 tokenizer.model create mode 100644 tokenizer_config.json diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..7335ab7 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,42 @@ +*.7z filter=lfs diff=lfs merge=lfs -text +*.arrow filter=lfs diff=lfs merge=lfs -text +*.bin filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.ckpt filter=lfs diff=lfs merge=lfs -text +*.ftz filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.h5 filter=lfs diff=lfs merge=lfs -text +*.joblib filter=lfs diff=lfs merge=lfs -text +*.lfs.* filter=lfs diff=lfs merge=lfs -text +*.mlmodel filter=lfs diff=lfs merge=lfs -text +*.model filter=lfs diff=lfs merge=lfs -text +*.msgpack filter=lfs diff=lfs merge=lfs -text +*.npy filter=lfs diff=lfs merge=lfs -text +*.npz filter=lfs diff=lfs merge=lfs -text +*.onnx filter=lfs diff=lfs merge=lfs -text +*.ot filter=lfs diff=lfs merge=lfs -text +*.parquet filter=lfs diff=lfs merge=lfs -text +*.pb filter=lfs diff=lfs merge=lfs -text +*.pickle filter=lfs diff=lfs merge=lfs -text +*.pkl filter=lfs diff=lfs merge=lfs -text +*.pt filter=lfs diff=lfs merge=lfs -text +*.pth filter=lfs diff=lfs merge=lfs -text +*.rar filter=lfs diff=lfs merge=lfs -text +*.safetensors filter=lfs diff=lfs merge=lfs -text +saved_model/**/* filter=lfs diff=lfs merge=lfs -text +*.tar.* filter=lfs diff=lfs merge=lfs -text +*.tar filter=lfs diff=lfs merge=lfs -text +*.tflite filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.wasm filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text +*tfevents* filter=lfs diff=lfs merge=lfs -text +images/salamandra_header.png filter=lfs diff=lfs merge=lfs -text +images/bleu_en.png filter=lfs diff=lfs merge=lfs -text +images/bleu_es.png filter=lfs diff=lfs merge=lfs -text +images/bleu_ca.png filter=lfs diff=lfs merge=lfs -text +images/bleu_eu.png filter=lfs diff=lfs merge=lfs -text +images/bleu_gl.png filter=lfs diff=lfs merge=lfs -text +tokenizer.json filter=lfs diff=lfs merge=lfs -text diff --git a/README.md b/README.md new file mode 100644 index 0000000..c3083cf --- /dev/null +++ b/README.md @@ -0,0 +1,834 @@ +--- +license: apache-2.0 +library_name: transformers +pipeline_tag: translation +language: +- bg +- ca +- cs +- cy +- da +- de +- el +- en +- es +- et +- eu +- fi +- fr +- ga +- gl +- hr +- hu +- it +- lt +- lv +- mt +- nl +- nb +- 'no' +- nn +- oc +- pl +- pt +- ro +- ru +- sl +- sk +- sr +- sv +- uk +- ast +- an +base_model: +- BSC-LT/salamandra-2b +--- + + +![](./images/salamandra_header.png) + +# SalamandraTA Model Card + +SalamandraTA-2b-instruct is a translation LLM that has been instruction-tuned from SalamandraTA-2b-base. +The base model results from continually pre-training [Salamandra-2b](https://huggingface.co/BSC-LT/salamandra-2b) on parallel data and has not been published, but is reserved for internal use. +SalamandraTA-2b-instruct is proficent in 35 European languages (plus 3 varieties) and supports translation-related tasks, namely: sentence-level-translation, paragraph-level-translation, automatic post-editing, grammar checking, machine translation evaluation, alternative translations, named-entity-recognition and context-aware translation. + +> [!WARNING] +> **DISCLAIMER:** This version of Salamandra is tailored exclusively for translation tasks. It lacks chat capabilities and has not been trained with any chat instructions. + + +--- + +## Model Details + +### Description + +SalamandraTA-2b-base is a continual pre-training of [Salamandra-2b](https://huggingface.co/BSC-LT/salamandra-2b) using parallel data, resulting in a total of 424B tokens processed during training. + +### Architecture + +| | | +|-------------------------|:--------------| +| Total Parameters | 2,253,490,176 | +| Embedding Parameters | 524,288,000 | +| Layers | 24 | +| Hidden size | 2,048 | +| Attention heads | 16 | +| Context length | 8,192 | +| Vocabulary size | 256,000 | +| Precision | bfloat16 | +| Embedding type | RoPE | +| Activation Function | SwiGLU | +| Layer normalization | RMS Norm | +| Flash attention | ✅ | +| Grouped Query Attention | ❌ | +| Num. query groups | N/A | + +--- + +## Intended Use + +### Direct Use + +The model is intended for both research and commercial use in any of the languages included in the training data for general machine translation tasks. + +### Out-of-scope Use + +The model is not intended for malicious activities, such as harming others or violating human rights. +Any downstream application must comply with current laws and regulations. +Irresponsible usage in production environments without proper risk assessment and mitigation is also discouraged. + +--- + + +## Hardware and Software + +### Training Framework + +SalamandraTA-2b-base was continually pre-trained using NVIDIA’s [NeMo Framework](https://github.com/NVIDIA-NeMo/NeMo), +which leverages PyTorch Lightning for efficient model training in highly distributed settings. + +SalamandraTA-2b-instruct was produced with [FastChat](https://github.com/lm-sys/FastChat). + +### Compute Infrastructure + +All models were trained on [MareNostrum 5](https://www.bsc.es/ca/marenostrum/marenostrum-5), a pre-exascale EuroHPC supercomputer hosted and +operated by Barcelona Supercomputing Center. + +The accelerated partition is composed of 1,120 nodes with the following specifications: +- 4x Nvidia Hopper GPUs with 64GB HBM2 memory +- 2x Intel Sapphire Rapids 8460Y+ at 2.3Ghz and 32c each (64 cores) +- 4x NDR200 (BW per node 800Gb/s) +- 512 GB of Main memory (DDR5) +- 460GB on NVMe storage + +--- + + +## How to use + +You can translate between the following **35 languages** (and 3 varieties): + +Aragonese, Asturian, Basque, Bulgarian, Catalan (and Catalan-Valencian variety), Croatian, Czech, Danish, Dutch, English, Estonian, Finnish, French, Galician, German, Greek, Hungarian, +Irish, Italian, Latvian, Lithuanian, Maltese, Norwegian (Bokmål and Nynorsk varieties), Occitan (and Aranese variety), Polish, Portuguese, Romanian, Russian, Serbian, Slovak, +Slovenian, Spanish, Swedish, Ukrainian, Welsh. + +The instruction-following model uses the commonly adopted ChatML template: + +``` +<|im_start|>system +{SYSTEM PROMPT}<|im_end|> +<|im_start|>user +{USER PROMPT}<|im_end|> +<|im_start|>assistant +{MODEL RESPONSE}<|im_end|> +<|im_start|>user +[...] +``` + +The easiest way to apply it is by using the tokenizer's built-in functions, as shown in the following snippet. + +```python +from datetime import datetime +from transformers import AutoTokenizer, AutoModelForCausalLM +import transformers +import torch + +model_id = "BSC-LT/salamandraTA-2b-instruct" + +source = 'Spanish' +target = 'Catalan' +sentence = "Ayer se fue, tomó sus cosas y se puso a navegar. Una camisa, un pantalón vaquero y una canción, dónde irá, dónde irá. Se despidió, y decidió batirse en duelo con el mar. Y recorrer el mundo en su velero. Y navegar, nai-na-na, navegar" + +text = f"Translate the following text from {source} into {target}.\n{source}: {sentence} \n{target}:" + +tokenizer = AutoTokenizer.from_pretrained(model_id) + +model = AutoModelForCausalLM.from_pretrained( + model_id, + device_map="auto", + torch_dtype=torch.bfloat16 + ) + +message = [ { "role": "user", "content": text } ] +date_string = datetime.today().strftime('%Y-%m-%d') + +prompt = tokenizer.apply_chat_template( + message, + tokenize=False, + add_generation_prompt=True, + date_string=date_string +) + +inputs = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt") +input_length = inputs.shape[1] +outputs = model.generate(input_ids=inputs.to(model.device), + max_new_tokens=400, + early_stopping=True, + num_beams=5) + +print(tokenizer.decode(outputs[0, input_length:], skip_special_tokens=True)) +# Ahir se'n va anar, va recollir les seves coses i es va fer a la mar. Una camisa, uns texans i una cançó, on anirà, on anirà. Es va acomiadar i va decidir batre's en duel amb el mar. I fer la volta al món en el seu veler. I navegar, nai-na-na, navegar +``` + +Using this template, each turn is preceded by a `<|im_start|>` delimiter and the role of the entity +(either `user`, for content supplied by the user, or `assistant` for LLM responses), and finished with the `<|im_end|>` token. + +#### General translation + +For machine translation tasks, you can use the following prompt template: + +``` +Translate the following text from {source} into {target}. +{source}: {source sentence} +{target}: +``` +
+Show an example + +```python +source = 'Catalan' +target = 'Galician' +source_sentence = "Als antics egipcis del període de l'Imperi Nou els fascinaven els monuments dels seus predecessors, que llavors tenien més de mil anys." + +text = f"Translate the following text from {source} into {target}.\n{source}: {source_sentence} \n{target}:" +# Os antigos exipcios do período do Imperio Novo estaban fascinados polos monumentos dos seus predecesores, que entón tiñan máis de mil anos de antigüidade. +``` + +
+ +### Post-editing + +For post-editing tasks, you can use the following prompt template: + +``` +Please fix any mistakes in the following {source}-{target} machine translation or keep it unedited if it's correct. +Source: {source_sentence} +MT: {machine_translation} +Corrected:" +``` + +
+Show an example + +```python +source = 'Catalan' +target = 'English' +source_sentence = 'Rafael Nadal i Maria Magdalena van inspirar a una generació sencera.' +machine_translation = 'Rafael Christmas and Maria the Muffin inspired an entire generation each in their own way.' + +text = f"Please fix any mistakes in the following {source}-{target} machine translation or keep it unedited if it's correct.\nSource: {source_sentence} \nMT: {machine_translation} \nCorrected:" + +# Rafael Nadal and Maria Magdalena inspired an entire generation. +``` + +
+ +### Paragraph-level translation + +For paragraph-level translation tasks, you can use the following prompt template: + +``` +Please translate this text from {source} into {target}. +{source}: {paragraph} +{target}: +``` + +
+Show an example + +```python +source = 'English' +target = 'Asturian' + +text = """Please translate this text from {} into {}.\n{}: President Donald Trump, who campaigned on promises to crack down on illegal immigration, has raised alarms in the U.S. dairy industry with his threat to impose 25% tariffs on Mexico and Canada by February 2025. This move is part of a broader strategy to declare a national emergency at the southern border to halt illegal migration completely. However, the implications for the agriculture sector, particularly dairy, are significant. Approximately half of the U.S. dairy industry's workforce consists of immigrant labor, many of whom are undocumented. The National Milk Producers Federation estimates that removing immigrant workers could decimate the dairy herd by 2.1 million cows and slash milk production by nearly 50 billion pounds, leading to a dramatic 90.4% increase in milk prices. The complex perspectives of Americans on undocumented workers were highlighted in a Pew Research Center study. While 64% of U.S. adults support legal pathways for undocumented immigrants, 35% oppose it—a gap that has been narrowing recently. Factors influencing public opinion include the belief that immigrants should have jobs and pass security checks, contrasted by concerns about lawbreakers being rewarded, fairness for legal migrants, and resource allocation. +{}:""".format(source, target, source, target) +``` + +
+ +### Named-entity recognition + +For named-entity recognition tasks, you can use the following prompt template: + +``` +Analyse the following tokenized text and mark the tokens containing named entities. +Use the following annotation guidelines with these tags for named entities: +- ORG (Refers to named groups or organizations) +- PER (Refers to individual people or named groups of people) +- LOC (Refers to physical places or natural landmarks) +- MISC (Refers to entities that don't fit into standard categories). +Prepend B- to the first token of a given entity and I- to the remaining ones if they exist. +If a token is not a named entity, label it as O. +Input: {list of words in a sentence} +Marked: +``` + +
+Show an example + +```python +text = """Analyse the following tokenized text and mark the tokens containing named entities. +Use the following annotation guidelines with these tags for named entities: +- ORG (Refers to named groups or organizations) +- PER (Refers to individual people or named groups of people) +- LOC (Refers to physical places or natural landmarks) +- MISC (Refers to entities that don't fit into standard categories). +Prepend B- to the first token of a given entity and I- to the remaining ones if they exist. +If a token is not a named entity, label it as O. +Input: ['La', 'defensa', 'del', 'antiguo', 'responsable', 'de', 'la', 'RFEF', 'confirma', 'que', 'interpondrá', 'un', 'recurso.'] +Marked: """ + +# [('La', 'O'), ('defensa', 'O'), ('del', 'O'), ('antiguo', 'O'), ('responsable', 'O'), ('de', 'O'), ('la', 'O'), ('RFEF', 'B-ORG'), ('confirma', 'O'), ('que', 'O'), ('interpondrá', 'O'), ('un', 'O'), ('recurso.', 'O')] +``` +
+ + +### Grammar checker + +For fixing any mistakes in grammar, you can use the following prompt template: + +``` +Please fix any mistakes in the following {source} sentence or keep it unedited if it's correct. +Sentence: {sentence} +Corrected: +``` + +
+Show an example + +```python +source = 'Catalan' +sentence = 'Entonses, el meu jefe m’ha dit que he de treballar els fins de setmana.' + +text = f"Please fix any mistakes in the following {source} sentence or keep it unedited if it's correct.\nSentence: {sentence} \nCorrected:" + +# Llavors, el meu cap m'ha dit que he de treballar els caps de setmana. +``` +
+ + +## Data + +### Pretraining Data + +The pretraining corpus consists of 424 billion tokens of Catalan-centric, Spanish-centric, and English-centric parallel data, +including all of the official European languages plus Catalan, Basque, Galician, Asturian, Aragonese and Aranese. +It amounts to 6,574,251,526 parallel sentence pairs. + +This highly multilingual corpus is predominantly composed of data sourced from [OPUS](https://opus.nlpl.eu/), +with additional data taken from the [NTEU Project](https://nteu.eu/), [Aina Project](https://projecteaina.cat/), and other sources +(see: [Data Sources](#pre-data-sources) and [References](#pre-references)). +Where little parallel Catalan <-> xx data could be found, synthetic Catalan data was generated from the Spanish side of the collected Spanish <-> xx corpora using +[Projecte Aina’s Spanish-Catalan model](https://huggingface.co/projecte-aina/aina-translator-es-ca). The final distribution of languages was as below: + +![](./images/treemap.png) + +Click the expand button below to see the full list of corpora included in the training data. + +
+Data Sources + +| Dataset | Ca-xx Languages | Es-xx Langugages | En-xx Languages | +|-----------------------------------------------|----------------------------------------------------------------|-----------------------------------------------|----------------------------------------------------------------| +|[AINA](https://huggingface.co/datasets/projecte-aina/CA-EN_Parallel_Corpus) | en | | | +|ARANESE-SYNTH-CORPUS-BSC | arn | | | +|BOUA-SYNTH-BSC | | val | | +|[BOUMH](https://github.com/transducens/PILAR/tree/main/valencian/BOUMH) | | val | | +|[BOUA-PILAR](https://github.com/transducens/PILAR/tree/main/valencian/BOUA) | | val | | +|[CCMatrix](https://opus.nlpl.eu/CCMatrix/corpus/version/CCMatrix) |eu | | ga | +|[DGT](https://opus.nlpl.eu/DGT/corpus/version/DGT) | |bg,cs,da,de,el ,et,fi,fr,ga,hr,hu,lt,lv,mt,nl,pl,pt,ro,sk,sl,sv | da,et,ga,hr,hu,lt,lv,mt,sh,sl| +|DOGV-SYNTH-BSC | | val | | +|[DOGV-PILAR](https://github.com/transducens/PILAR/tree/main/valencian/DOGV-html) | | val | | +|[ELRC-EMEA](https://opus.nlpl.eu/ELRC-EMEA/corpus/version/ELRC-EMEA) | |bg,cs,da,hu,lt,lv,mt,pl,ro,sk,sl | et,hr,lv,ro,sk,sl | +|[EMEA](https://opus.nlpl.eu/EMEA/corpus/version/EMEA) | |bg,cs,da,el,fi,hu,lt,mt,nl,pl,ro,sk,sl,sv | et,mt | +|[EUBookshop](https://opus.nlpl.eu/EUbookshop/corpus/version/EUbookshop) |lt,pl,pt |cs,da,de,el,fi,fr,ga,it,lv,mt,nl,pl,pt,ro,sk,sl,sv |cy,ga| +|[Europarl](https://opus.nlpl.eu/Europarl/corpus/version/Europarl) | |bg,cs,da,el,en,fi,fr,hu,lt,lv,nl,pl,pt ,ro,sk,sl,sv | | +|[Europat](https://opus.nlpl.eu/EuroPat/corpus/version/EuroPat) | |en,hr | no | +|[GAITU Corpus](https://gaitu.eus/) | | | eu| +|[KDE4](https://opus.nlpl.eu/KDE4/corpus/version/KDE4) |bg,cs,da,de,el ,et,eu,fi,fr,ga,gl,hr,it,lt,lv,nl,pl,pt,ro,sk,sl,sv |bg,ga,hr |cy,ga,nn,oc | +|[GlobalVoices](https://opus.nlpl.eu/GlobalVoices/corpus/version/GlobalVoices) | bg,de,fr,it,nl,pl,pt |bg,de,fr,pt | | +|[GNOME](https://opus.nlpl.eu/GNOME/corpus/version/GNOME) |eu,fr,ga,gl,pt |ga |cy,ga,nn| +|[JRC-Arquis](https://opus.nlpl.eu/JRC-Acquis/corpus/version/JRC-Acquis) | |cs,da,et,fr,lt,lv,mt,nl,pl ,ro,sv| et | +|LES-CORTS-VALENCIANES-SYNTH-BSC | | val | | +|[MaCoCu](https://opus.nlpl.eu/MaCoCu/corpus/version/MaCoCu) | en | | hr,mt,uk | +|[MultiCCAligned](https://opus.nlpl.eu/JRC-Acquis/corpus/version/JRC-Acquis) |bg,cs,de,el,et,fi,fr,hr,hu,it,lt,lv,nl,pl,ro,sk,sv |bg,fi,fr,hr,it,lv,nl,pt |bg,cy,da,et,fi,hr,hu,lt,lv,no,sl,sr,uk| +|[MultiHPLT](https://opus.nlpl.eu/MultiHPLT/corpus/version/MultiHPLT) |en, et,fi,ga,hr,mt | |fi,ga,gl,hr,mt,nn,sr | +|[MultiParaCrawl](https://opus.nlpl.eu/MultiParaCrawl/corpus/version/MultiParaCrawl) |bg,da |de,en,fr,ga,hr,hu,it,mt,pt |bg,cs,da,de,el,et,fi,fr,ga,hr,hu,lt,lv,mt,nn,pl,ro,sk,sl,uk| +|[MultiUN](https://opus.nlpl.eu/MultiUN/corpus/version/MultiUN) | |fr | | +|[News-Commentary](https://opus.nlpl.eu/News-Commentary/corpus/version/News-Commentary) | |fr | | +|[NLLB](https://opus.nlpl.eu/NLLB/corpus/version/NLLB) |bg,da,el,en,et,fi,fr,gl,hu,it ,lt,lv,pt,ro,sk,sl |bg,cs,da,de,el ,et,fi,fr,hu,it,lt,lv,nl,pl,pt ,ro,sk,sl,sv| bg,cs,cy,da,de,el,et,fi,fr,ga,hr,hu,it,lt,lv,mt,nl,no,oc,pl,pt,ro,ru,sk,sl,sr,sv,uk| +|[NÓS Authentic Corpus](https://zenodo.org/records/7675110) | | | gl | +|[NÓS Synthetic Corpus](https://zenodo.org/records/7685180) | | | gl | +|[NTEU](https://www.elrc-share.eu/repository/search/?q=NTEU) | |bg,cs,da,de,el,en,et,fi,fr,ga,hr,hu,it,lt,lv,mt,nl,pl,pt,ro,sk,sl,sv | da,et,ga,hr,lt,lv,mt,ro,sk,sl,sv | +|[OpenSubtitles](https://opus.nlpl.eu/OpenSubtitles/corpus/version/OpenSubtitles) |bg,cs,da,de,el ,et,eu,fi,gl,hr,hu,lt,lv,nl,pl,pt,ro,sk,sl,sv |da,de,fi,fr,hr,hu,it,lv,nl | bg,cs,de,el,et,hr,fi,fr,hr,hu,no,sl,sr| +|[OPUS-100](https://opus.nlpl.eu/opus-100.php) | en | | gl | +|[StanfordNLP-NMT](https://opus.nlpl.eu/StanfordNLP-NMT/corpus/version/StanfordNLP-NMT) | | |cs | +|[Tatoeba](https://opus.nlpl.eu/Tatoeba/corpus/version/Tatoeba) |de,pt |pt | | +|[TildeModel](https://opus.nlpl.eu/TildeMODEL/corpus/version/TildeMODEL) | |bg | et,hr,lt,lv,mt | +|[UNPC](https://opus.nlpl.eu/UNPC/corpus/version/UNPC) | |en,fr | ru | +|[PILAR-VALENCIAN-AUTH](https://github.com/transducens/PILAR/tree/main/valencian/Generalitat) | | val | | +|[PILAR-VALENCIAN-SYNTH](https://github.com/transducens/PILAR/tree/main/valencian/Generalitat) | | val | | +|[WikiMatrix](https://opus.nlpl.eu/WikiMatrix/corpus/version/WikiMatrix) |bg,cs,da,de,el ,et,eu,fi,fr,gl,hr,hu,it,lt,nl,pl,pt,ro,sk,sl,sv |bg,en,fr,hr,it,pt | oc,sh | +|[Wikimedia](https://opus.nlpl.eu/wikimedia/corpus/version/wikimedia) | | |cy,nn | +|[XLENT](https://opus.nlpl.eu/XLEnt/corpus/version/XLEnt) |eu,ga,gl |ga |cy,et,ga,gl,hr,oc,sh| + + +Datasets with "-BSC" in their names (e.g., BOUA-SYNTH-BSC, DOGV-SYNTH-BSC) are synthetic datasets obtained by machine translating +pre-existing monolingual corpora with our own seq-to-seq models. These datasets were generated internally for model training and are not published. + +To consult the data summary document with the respective licences, please send an e-mail to ipr@bsc.es. + + + +
+ + + +
+References + +- Aulamo, M., Sulubacak, U., Virpioja, S., & Tiedemann, J. (2020). OpusTools and Parallel Corpus Diagnostics. In N. Calzolari, F. Béchet, P. Blache, K. Choukri, C. Cieri, T. Declerck, S. Goggi, H. Isahara, B. Maegaard, J. Mariani, H. Mazo, A. Moreno, J. Odijk, & S. Piperidis (Eds.), Proceedings of the Twelfth Language Resources and Evaluation Conference (pp. 3782–3789). European Language Resources Association. https://aclanthology.org/2020.lrec-1.467 +- Chaudhary, V., Tang, Y., Guzmán, F., Schwenk, H., & Koehn, P. (2019). Low-Resource Corpus Filtering Using Multilingual Sentence Embeddings. In O. Bojar, R. Chatterjee, C. Federmann, M. Fishel, Y. Graham, B. Haddow, M. Huck, A. J. Yepes, P. Koehn, A. Martins, C. Monz, M. Negri, A. Névéol, M. Neves, M. Post, M. Turchi, & K. Verspoor (Eds.), Proceedings of the Fourth Conference on Machine Translation (Volume 3: Shared Task Papers, Day 2) (pp. 261–266). Association for Computational Linguistics. https://doi.org/10.18653/v1/W19-5435 +- DGT-Translation Memory—European Commission. (n.d.). Retrieved November 4, 2024, from https://joint-research-centre.ec.europa.eu/language-technology-resources/dgt-translation-memory_en +- Eisele, A., & Chen, Y. (2010). MultiUN: A Multilingual Corpus from United Nation Documents. In N. Calzolari, K. Choukri, B. Maegaard, J. Mariani, J. Odijk, S. Piperidis, M. Rosner, & D. Tapias (Eds.), Proceedings of the Seventh International Conference on Language Resources and Evaluation (LREC’10). European Language Resources Association (ELRA). http://www.lrec-conf.org/proceedings/lrec2010/pdf/686_Paper.pdf +- El-Kishky, A., Chaudhary, V., Guzmán, F., & Koehn, P. (2020). CCAligned: A Massive Collection of Cross-Lingual Web-Document Pairs. Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing (EMNLP), 5960–5969. https://doi.org/10.18653/v1/2020.emnlp-main.480 +- El-Kishky, A., Renduchintala, A., Cross, J., Guzmán, F., & Koehn, P. (2021). XLEnt: Mining a Large Cross-lingual Entity Dataset with Lexical-Semantic-Phonetic Word Alignment. Proceedings of the 2021 Conference on Empirical Methods in Natural Language Processing, 10424–10430. https://doi.org/10.18653/v1/2021.emnlp-main.814 +- Fan, A., Bhosale, S., Schwenk, H., Ma, Z., El-Kishky, A., Goyal, S., Baines, M., Celebi, O., Wenzek, G., Chaudhary, V., Goyal, N., Birch, T., Liptchinsky, V., Edunov, S., Grave, E., Auli, M., & Joulin, A. (2020). Beyond English-Centric Multilingual Machine Translation (No. arXiv:2010.11125). arXiv. https://doi.org/10.48550/arXiv.2010.11125 +- García-Martínez, M., Bié, L., Cerdà, A., Estela, A., Herranz, M., Krišlauks, R., Melero, M., O’Dowd, T., O’Gorman, S., Pinnis, M., Stafanovič, A., Superbo, R., & Vasiļevskis, A. (2021). Neural Translation for European Union (NTEU). 316–334. https://aclanthology.org/2021.mtsummit-up.23 +- Gibert, O. de, Nail, G., Arefyev, N., Bañón, M., Linde, J. van der, Ji, S., Zaragoza-Bernabeu, J., Aulamo, M., Ramírez-Sánchez, G., Kutuzov, A., Pyysalo, S., Oepen, S., & Tiedemann, J. (2024). A New Massive Multilingual Dataset for High-Performance Language Technologies (No. arXiv:2403.14009). arXiv. http://arxiv.org/abs/2403.14009 +- Koehn, P. (2005). Europarl: A Parallel Corpus for Statistical Machine Translation. Proceedings of Machine Translation Summit X: Papers, 79–86. https://aclanthology.org/2005.mtsummit-papers.11 +- Kreutzer, J., Caswell, I., Wang, L., Wahab, A., Van Esch, D., Ulzii-Orshikh, N., Tapo, A., Subramani, N., Sokolov, A., Sikasote, C., Setyawan, M., Sarin, S., Samb, S., Sagot, B., Rivera, C., Rios, A., Papadimitriou, I., Osei, S., Suarez, P. O., … Adeyemi, M. (2022). Quality at a Glance: An Audit of Web-Crawled Multilingual Datasets. Transactions of the Association for Computational Linguistics, 10, 50–72. https://doi.org/10.1162/tacl_a_00447 +- Rozis, R.,Skadiņš, R (2017). Tilde MODEL - Multilingual Open Data for EU Languages. https://aclanthology.org/W17-0235 +- Schwenk, H., Chaudhary, V., Sun, S., Gong, H., & Guzmán, F. (2019). WikiMatrix: Mining 135M Parallel Sentences in 1620 Language Pairs from Wikipedia (No. arXiv:1907.05791). arXiv. https://doi.org/10.48550/arXiv.1907.05791 +- Schwenk, H., Wenzek, G., Edunov, S., Grave, E., & Joulin, A. (2020). CCMatrix: Mining Billions of High-Quality Parallel Sentences on the WEB (No. arXiv:1911.04944). arXiv. https://doi.org/10.48550/arXiv.1911.04944 +- Steinberger, R., Pouliquen, B., Widiger, A., Ignat, C., Erjavec, T., Tufiş, D., & Varga, D. (n.d.). The JRC-Acquis: A Multilingual Aligned Parallel Corpus with 20+ Languages. http://www.lrec-conf.org/proceedings/lrec2006/pdf/340_pdf +- Subramani, N., Luccioni, S., Dodge, J., & Mitchell, M. (2023). Detecting Personal Information in Training Corpora: An Analysis. In A. Ovalle, K.-W. Chang, N. Mehrabi, Y. Pruksachatkun, A. Galystan, J. Dhamala, A. Verma, T. Cao, A. Kumar, & R. Gupta (Eds.), Proceedings of the 3rd Workshop on Trustworthy Natural Language Processing (TrustNLP 2023) (pp. 208–220). Association for Computational Linguistics. https://doi.org/10.18653/v1/2023.trustnlp-1.18 +- Tiedemann, J. (23-25). Parallel Data, Tools and Interfaces in OPUS. In N. C. (Conference Chair), K. Choukri, T. Declerck, M. U. Doğan, B. Maegaard, J. Mariani, A. Moreno, J. Odijk, & S. Piperidis (Eds.), Proceedings of the Eight International Conference on Language Resources and Evaluation (LREC’12). European Language Resources Association (ELRA). http://www.lrec-conf.org/proceedings/lrec2012/pdf/463_Paper +- Ziemski, M., Junczys-Dowmunt, M., & Pouliquen, B. (n.d.). The United Nations Parallel Corpus v1.0. https://aclanthology.org/L16-1561 + + + +
+ + +### Instruction Tuning Data + +This model has been fine-tuned on ~135k instructions, primarily targeting machine translation performance for Catalan, English, and Spanish. +Additional instruction data for other European and closely related Iberian languages was also included, as it yielded a positive impact on the languages of interest. +That said, the performance in these additional languages is not guaranteed due to the limited amount of available data and the lack of resources for thorough testing. + +A portion of our fine-tuning data comes directly from, or is sampled from [TowerBlocks](https://huggingface.co/datasets/Unbabel/TowerBlocks-v0.2). +We also created additional datasets for our main languages of interest. +While tasks relating to machine translation are included, it’s important to note that no chat data was used in the fine-tuning process. +The final distribution of tasks was as below: + +![](./images/chart.png) + + +Click the expand button below to see the full list of tasks included in the finetuning data. + +
+Data Sources + + + +| Task | Source | Languages | Count | +|----------------------------------|------------------------------------------------------------------------------------------|----------------------------------------------------------------|--------| +| Multi-reference Translation | [TowerBlocks](https://huggingface.co/datasets/Unbabel/TowerBlocks-v0.2): [Tatoeba Dev (filtered)](https://github.com/Helsinki-NLP/Tatoeba-Challenge) | mixed | 10000 | +| Paraphrase | [TowerBlocks](https://huggingface.co/datasets/Unbabel/TowerBlocks-v0.2): [PAWS-X Dev](https://github.com/google-research-datasets/paws) | mixed | 3521 | +| Named-entity Recognition | [AnCora-Ca-NER](https://huggingface.co/datasets/projecte-aina/ancora-ca-ner) | ca | 12059 | +| Named-entity Recognition | [BasqueGLUE](https://huggingface.co/datasets/orai-nlp/basqueGLUE), [EusIE](https://huggingface.co/datasets/HiTZ/EusIE) | eu | 4304 | +| Named-entity Recognition | [SLI NERC Galician Gold Corpus](https://github.com/xavier-gz/SLI_Galician_Corpora) | gl | 6483 | +| Named-entity Recognition | [TowerBlocks](https://huggingface.co/datasets/Unbabel/TowerBlocks-v0.2): [MultiCoNER 2022 and 2023 Dev](https://registry.opendata.aws/multiconer/) | pt | 854 | +| Named-entity Recognition | [TowerBlocks](https://huggingface.co/datasets/Unbabel/TowerBlocks-v0.2): [MultiCoNER 2022 and 2023 Dev](https://registry.opendata.aws/multiconer/) | nl | 800 | +| Named-entity Recognition | [TowerBlocks](https://huggingface.co/datasets/Unbabel/TowerBlocks-v0.2): [MultiCoNER 2022 and 2023 Dev](https://registry.opendata.aws/multiconer/) | es | 1654 | +| Named-entity Recognition | [TowerBlocks](https://huggingface.co/datasets/Unbabel/TowerBlocks-v0.2): [MultiCoNER 2022 and 2023 Dev](https://registry.opendata.aws/multiconer/) | en | 1671 | +| Named-entity Recognition | [TowerBlocks](https://huggingface.co/datasets/Unbabel/TowerBlocks-v0.2): [MultiCoNER 2022 and 2023 Dev](https://registry.opendata.aws/multiconer/) | ru | 800 | +| Named-entity Recognition | [TowerBlocks](https://huggingface.co/datasets/Unbabel/TowerBlocks-v0.2): [MultiCoNER 2022 and 2023 Dev](https://registry.opendata.aws/multiconer/) | it | 858 | +| Named-entity Recognition | [TowerBlocks](https://huggingface.co/datasets/Unbabel/TowerBlocks-v0.2): [MultiCoNER 2022 and 2023 Dev](https://registry.opendata.aws/multiconer/) | fr | 857 | +| Named-entity Recognition | [TowerBlocks](https://huggingface.co/datasets/Unbabel/TowerBlocks-v0.2): [MultiCoNER 2022 and 2023 Dev](https://registry.opendata.aws/multiconer/) | de | 1312 | +| Terminology-aware Translation | [TowerBlocks](https://huggingface.co/datasets/Unbabel/TowerBlocks-v0.2): [WMT21 Terminology Dev (filtered)](https://www.statmt.org/wmt21/terminology-task.html) | en-ru | 50 | +| Terminology-aware Translation | [TowerBlocks](https://huggingface.co/datasets/Unbabel/TowerBlocks-v0.2): [WMT21 Terminology Dev (filtered)](https://www.statmt.org/wmt21/terminology-task.html) | en-fr | 29 | +| Automatic Post Editing | [TowerBlocks](https://huggingface.co/datasets/Unbabel/TowerBlocks-v0.2): [QT21](https://lindat.mff.cuni.cz/repository/xmlui/handle/11372/LRT-2390), [ApeQuest](https://apequest.wordpress.com/) | en-fr | 6133 | +| Automatic Post Editing | [TowerBlocks](https://huggingface.co/datasets/Unbabel/TowerBlocks-v0.2): [QT21](https://lindat.mff.cuni.cz/repository/xmlui/handle/11372/LRT-2390), [ApeQuest](https://apequest.wordpress.com/) | en-nl | 9077 | +| Automatic Post Editing | [TowerBlocks](https://huggingface.co/datasets/Unbabel/TowerBlocks-v0.2): [QT21](https://lindat.mff.cuni.cz/repository/xmlui/handle/11372/LRT-2390), [ApeQuest](https://apequest.wordpress.com/) | en-pt | 5762 | +| Automatic Post Editing | [TowerBlocks](https://huggingface.co/datasets/Unbabel/TowerBlocks-v0.2): [QT21](https://lindat.mff.cuni.cz/repository/xmlui/handle/11372/LRT-2390), [ApeQuest](https://apequest.wordpress.com/) | de-en | 10000 | +| Automatic Post Editing | [TowerBlocks](https://huggingface.co/datasets/Unbabel/TowerBlocks-v0.2): [QT21](https://lindat.mff.cuni.cz/repository/xmlui/handle/11372/LRT-2390), [ApeQuest](https://apequest.wordpress.com/) | en-de | 10000 | +| Machine Translation Evaluation | [TowerBlocks](https://huggingface.co/datasets/Unbabel/TowerBlocks-v0.2)-sample: [WMT20 to WMT22 Metrics MQM](https://www.statmt.org/wmt22/results.html), [WMT17 to WMT22 Metrics Direct Assessments](https://www.statmt.org/wmt22/results.html) | en-ru, en-pl, ru-en, en-de, en-ru, de-fr, de-en, en-de | 353 | +| Machine Translation Evaluation | Non-public | four pivot languages (eu, es, ca, gl) paired with European languages (bg, cs, da, de, el, en, et, fi, fr, ga, hr, hu, it, lt, lv, mt, nl, pl, pt, ro, sk, sl, sv) | 9700 | +| General Machine Translation | [TowerBlocks](https://huggingface.co/datasets/Unbabel/TowerBlocks-v0.2): [WMT14 to WMT21](https://www.statmt.org/wmt22/results.html), [NTREX](https://github.com/MicrosoftTranslator/NTREX), [Flores Dev](https://github.com/facebookresearch/flores), [FRMT](https://github.com/google-research/google-research/tree/master/frmt), [QT21](https://lindat.mff.cuni.cz/repository/xmlui/handle/11372/LRT-2390), [ApeQuest](https://apequest.wordpress.com/), [OPUS (Quality Filtered)](https://opus.nlpl.eu/), [MT-GenEval](https://github.com/amazon-science/machine-translation-gender-eval) | nl-en, en-ru, it-en, fr-en, es-en, en-fr, ru-en, fr-de, en-nl, de-fr | 500 | +| General Machine Translation | Non-public | three pivot languages (es, ca, en) paired with European languages (ast, arn, arg, bg, cs, cy, da, de, el, et, fi, ga, gl, hr, it, lt, lv, mt, nb, nn, nl, oc, pl, pt, ro, ru, sk, sl, sr, sv, uk, eu) | 9350 | +| Fill-in-the-Blank | Non-public | five pivot languages (ca, es, eu, gl, en) paired with European languages (cs, da, de, el, et, fi, fr, ga, hr, hu, it, lt, lv, mt, nl, pl, pt, ro, sk, sl, sv) | 11500 | +| Document-level Translation | Non-public | two pivot languages (es, en) paired with European languages (bg, cs, da, de, el, et, fi, fr, hu, it, lt, lv, nl, pl, pt, ro, ru, sk, sv) | 7600 | +| Paragraph-level Translation | Non-public | two pivot languages (es, en) paired with European languages (bg, cs, da, de, el, et, fi, fr, hu, it, lt, lv, nl, pl, pt, ro, ru, sk, sv) | 7600 | +| Context-Aware Translation | [TowerBlocks](https://huggingface.co/datasets/Unbabel/TowerBlocks-v0.2): [MT-GenEval](https://github.com/amazon-science/machine-translation-gender-eval) | en-it | 348 | +| Context-Aware Translation | [TowerBlocks](https://huggingface.co/datasets/Unbabel/TowerBlocks-v0.2): [MT-GenEval](https://github.com/amazon-science/machine-translation-gender-eval) | en-ru | 454 | +| Context-Aware Translation | [TowerBlocks](https://huggingface.co/datasets/Unbabel/TowerBlocks-v0.2): [MT-GenEval](https://github.com/amazon-science/machine-translation-gender-eval) | en-fr | 369 | +| Context-Aware Translation | [TowerBlocks](https://huggingface.co/datasets/Unbabel/TowerBlocks-v0.2): [MT-GenEval](https://github.com/amazon-science/machine-translation-gender-eval) | en-nl | 417 | +| Context-Aware Translation | [TowerBlocks](https://huggingface.co/datasets/Unbabel/TowerBlocks-v0.2): [MT-GenEval](https://github.com/amazon-science/machine-translation-gender-eval) | en-es | 431 | +| Context-Aware Translation | [TowerBlocks](https://huggingface.co/datasets/Unbabel/TowerBlocks-v0.2): [MT-GenEval](https://github.com/amazon-science/machine-translation-gender-eval) | en-de | 558 | +|**Total** | | | **135,404** | + +The non-public portion of this dataset was jointly created by the [ILENIA](https://proyectoilenia.es/) partners: BSC-LT, [HiTZ](http://hitz.ehu.eus/es), +and [CiTIUS](https://citius.gal/es/). For further information regarding the instruction-tuning data, +please contact . + +
+ +
+References + +- Alves, D. M., Pombal, J., Guerreiro, N. M., Martins, P. H., Alves, J., Farajian, A., Peters, B., Rei, R., Fernandes, P., Agrawal, S., Colombo, P., de Souza, J. G. C., & Martins, A. F. T. (2024). Tower: An open multilingual large language model for translation-related tasks (No. arXiv: 2402.17733). arXiv. https://arxiv.org/abs/2402.17733 +- Armengol-Estapé, J., Carrino, C. P., Rodriguez-Penagos, C., de Gibert Bonet, O., Armentano-Oller, C., Gonzalez-Agirre, A., Melero, M., & Villegas, M. (2021). Are multilingual models the best choice for moderately under-resourced languages? A comprehensive assessment for Catalan. Findings of the Association for Computational Linguistics: ACL-IJCNLP 2021, 4933–4946. Association for Computational Linguistics. https://doi.org/10.18653/v1/2021.findings-acl.437 +- Currey, A., Nadejde, M., Pappagari, R. R., Mayer, M., Lauly, S., Niu, X., Hsu, B., & Dinu, G. (2022). MT-GenEval: A counterfactual and contextual dataset for evaluating gender accuracy in machine translation. In Y. Goldberg, Z. Kozareva, & Y. Zhang (Eds.), Proceedings of the 2022 Conference on Empirical Methods in Natural Language Processing (pp. 4287–4299). Association for Computational Linguistics. https://doi.org/10.18653/v1/2022.emnlp-main.288 +- Federmann, C., Kocmi, T., & Xin, Y. (2022). NTREX-128 – News test references for MT evaluation of 128 languages. Proceedings of the First Workshop on Scaling Up Multilingual Evaluation, 21–24. Association for Computational Linguistics. https://aclanthology.org/2022.sumeval-1.4 +- Ive, J., Specia, L., Szoc, S., Vanallemeersch, T., Van den Bogaert, J., Farah, E., Maroti, C., Ventura, A., & Khalilov, M. (2020). A post-editing dataset in the legal domain: Do we underestimate neural machine translation quality? In N. Calzolari, F. Béchet, P. Blache, K. Choukri, C. Cieri, T. Declerck, S. Goggi, H. Isahara, B. Maegaard, J. Mariani, H. Mazo, A. Moreno, J. Odijk, & S. Piperidis (Eds.), Proceedings of the Twelfth Language Resources and Evaluation Conference (pp. 3692–3697). European Language Resources Association. https://aclanthology.org/2020.lrec-1.455/ +- Malmasi, S., Fang, A., Fetahu, B., Kar, S., & Rokhlenko, O. (2022). MultiCoNER: A large-scale multilingual dataset for complex named entity recognition. Proceedings of the 29th International Conference on Computational Linguistics, 3798–3809. International Committee on Computational Linguistics. https://aclanthology.org/2022.coling-1.334/ +- NLLB Team, Costa-jussà, M. R., Cross, J., Çelebi, O., Elbayad, M., Heafield, K., Heffernan, K., Kalbassi, E., Lam, J., Licht, D., Maillard, J., Sun, A., Wang, S., Wenzek, G., Youngblood, A., Akula, B., Barrault, L., Mejia Gonzalez, G., Hansanti, P., Hoffman, J., Jarrett, S., Sadagopan, K. R., Rowe, D., Spruit, S., Tran, C., Andrews, P., Ayan, N. F., Bhosale, S., Edunov, S., Fan, A., Gao, C., Goswami, V., Guzmán, F., Koehn, P., Mourachko, A., Ropers, C., Saleem, S., Schwenk, H., & Wang, J. (2022). No language left behind: Scaling human-centered machine translation (No. arXiv: 2207.04672). arXiv. https://arxiv.org/abs/2207.04672 +- Riley, P., Dozat, T., Botha, J. A., Garcia, X., Garrette, D., Riesa, J., Firat, O., & Constant, N. (2022). FRMT: A benchmark for few-shot region-aware machine translation (No. arXiv: 2210.00193). arXiv. https://doi.org/10.48550/ARXIV.2210.00193 +- Specia, L., Harris, K., Blain, F., Burchardt, A., Macketanz, V., Skadiņa, I., Negri, M., & Turchi, M. (2017). Translation quality and productivity: A study on rich morphology languages. Proceedings of Machine Translation Summit XVI, 55–71. Nagoya, Japan. +- Tiedemann, J. (2020). The Tatoeba translation challenge – Realistic data sets for low-resource and multilingual MT. Proceedings of the Fifth Conference on Machine Translation, 1174–1182. Association for Computational Linguistics. https://www.aclweb.org/anthology/2020.wmt-1.139 +- Urbizu, G., San Vicente, I., Saralegi, X., Agerri, R., & Soroa, A. (2022). BasqueGLUE: A natural language understanding benchmark for Basque. Proceedings of the Language Resources and Evaluation Conference, 1603–1612. European Language Resources Association. https://aclanthology.org/2022.lrec-1.172 +- Yang, Y., Zhang, Y., Tar, C., & Baldridge, J. (2019). PAWS-X: A cross-lingual adversarial dataset for paraphrase identification. Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing and the 9th International Joint Conference on Natural Language Processing (EMNLP-IJCNLP) (pp. 3687–3692). Association for Computational Linguistics. https://doi.org/10.18653/v1/D19-1382 +- Zubillaga, M., Sainz, O., Estarrona, A., Lopez de Lacalle, O., & Agirre, E. (2024). Event extraction in Basque: Typologically motivated cross-lingual transfer-learning analysis (No. arXiv: 2404.06392). arXiv. https://arxiv.org/abs/2404.06392 + + + +
+ +## Evaluation + +Below are the evaluation results on the [Flores+200 devtest set](https://huggingface.co/datasets/openlanguagedata/flores_plus), +compared against the state-of-the-art [MADLAD400-3B-mt model](https://huggingface.co/google/madlad400-3b-mt) ([Kudugunta, S., et al.](https://arxiv.org/abs/2309.04662)) and [NLLB-200-3.3B](https://huggingface.co/facebook/nllb-200-3.3B) ([Costa-jussà et al., 2022](https://arxiv.org/abs/2207.04672)). +These results cover the translation directions CA-XX, ES-XX, EN-XX, as well as XX-CA, XX-ES, and XX-EN. +The metrics have been computed excluding Asturian, Aranese, and Aragonese, as we report them separately. +The evaluation was conducted using [MT-Lens](https://github.com/langtech-bsc/mt-evaluation), following the standard setting (beam search with beam size 5, limiting the translation length to 500 tokens). We report the following metrics: + +
+Click to show metrics details + +- `BLEU`: Sacrebleu implementation. Signature: nrefs:1— case:mixed— eff:no— tok:13a— smooth:exp—version:2.3.1 +- `TER`: Sacrebleu implementation. +- `ChrF`: Sacrebleu implementation. +- `Comet`: Model checkpoint: "Unbabel/wmt22-comet-da". +- `Comet-kiwi`: Model checkpoint: "Unbabel/wmt22-cometkiwi-da". +- `Bleurt`: Model checkpoint: "lucadiliello/BLEURT-20". +- `MetricX`: Model checkpoint: "google/metricx-23-xl-v2p0". +- `MetricX-QE`: Model checkpoint: "google/metricx-23-qe-xl-v2p0". + +
+ + +
+English evaluation + +### English + +This section presents the evaluation metrics for English translation tasks. + +| | Bleu ↑ | Ter ↓ | ChrF ↑ | Comet ↑ | Comet-kiwi ↑ | Bleurt ↑ | MetricX ↓ | MetricX-QE ↓ | +|:-------------------------|:----------|:----------|:----------|:---------|:-------------|:---------|:----------|:-------------| +| **EN-XX** | | | | | | | | | +| MADLAD400-3B | **35.11** | **52.61** | **63.04** | **0.88** | **0.85** | **0.78** | 1.21 | 1.12 | +| SalamandraTA-2b-instruct | 33.52 | 56.26 | 61.74 | **0.88** | **0.85** | **0.78** | **1.16** | **0.89** | +| nllb-200-3.3B | 31.17 | 56.03 | 59.19 | 0.87 | 0.83 | 0.76 | 2.22 | 2.20 | +| **XX-EN** | | | | | | | | | +| MADLAD400-3B | **41.84** | **44.43** | **67.04** | **0.88** | **0.85** | **0.79** | **1.22** | 1.18 | +| nllb-200-3.3B | 41.52 | 45.28 | 66.21 | **0.88** | **0.85** | 0.78 | 1.43 | 1.57 | +| SalamandraTA-2b-instruct | 41.44 | 45.24 | 66.64 | **0.88** | **0.85** | **0.79** | 1.24 | **1.05** | + +English + +
+ +
+ +Spanish evaluation + +### Spanish + +This section presents the evaluation metrics for Spanish translation tasks. + + +| | Bleu ↑ | Ter ↓ | ChrF ↑ | Comet ↑ | Comet-kiwi ↑ | Bleurt ↑ | MetricX ↓ | MetricX-QE ↓ | +|:-------------------------|:----------|:----------|:----------|:---------|:-------------|:---------|:----------|:-------------| +| **ES-XX** | | | | | | | | | +| MADLAD400-3B | **21.87** | **69.80** | **53.46** | **0.86** | **0.83** | **0.74** | **1.15** | 1.12 | +| SalamandraTA-2b-instruct | 20.77 | 73.37 | 52.16 | **0.86** | **0.83** | **0.74** | 1.16 | **0.89** | +| nllb-200-3.3B | 19.54 | 72.19 | 50.07 | 0.84 | 0.81 | 0.71 | 2.19 | 2.21 | +| **XX-ES** | | | | | | | | | +| SalamandraTA-2b-instruct | **25.01** | 63.35 | **52.74** | **0.85** | **0.84** | **0.73** | **1.03** | **1.20** | +| MADLAD400-3B | 24.38 | **62.31** | 52.65 | **0.85** | **0.84** | **0.73** | 1.13 | 1.54 | +| nllb-200-3.3B | 22.68 | 64.18 | 50.91 | 0.84 | 0.83 | 0.71 | 1.62 | 2.06 | + + +English + +
+ +
+Catalan evaluation + +### Catalan + +This section presents the evaluation metrics for Catalan translation tasks. + +| | Bleu ↑ | Ter ↓ | ChrF ↑ | Comet ↑ | Comet-kiwi ↑ | Bleurt ↑ | MetricX ↓ | MetricX-QE ↓ | +|:-------------------------|:----------|:----------|:----------|:---------|:-------------|:---------|:----------|:-------------| +| **CA-XX** | | | | | | | | | +| MADLAD400-3B | **28.86** | **59.60** | **58.05** | **0.87** | **0.81** | **0.77** | **1.15** | 1.28 | +| SalamandraTA-2b-instruct | 26.70 | 64.12 | 56.18 | **0.87** | **0.81** | 0.76 | 1.24 | **1.09** | +| nllb-200-3.3B | 25.17 | 63.15 | 54.02 | 0.85 | 0.79 | 0.72 | 2.42 | 2.59 | +| **XX-CA** | | | | | | | | | +| SalamandraTA-2b-instruct | **32.42** | 56.54 | 58.67 | **0.86** | **0.81** | 0.74 | **1.11** | **1.38** | +| MADLAD400-3B | 32.31 | **55.68** | **58.87** | **0.86** | **0.81** | **0.75** | 1.27 | 1.83 | +| nllb-200-3.3B | 29.28 | 58.95 | 55.97 | 0.84 | 0.80 | 0.71 | 2.18 | 2.61 | + +English + + +
+ +
+Galician evaluation + +### Galician + +This section presents the evaluation metrics for Galician translation tasks. + +| | Bleu ↑ | Ter ↓ | ChrF ↑ | Comet ↑ | Comet-kiwi ↑ | Bleurt ↑ | MetricX ↓ | MetricX-QE ↓ | +|:-------------------------|:----------|:----------|:----------|:---------|:-------------|:---------|:----------|:-------------| +| **GL-XX** | | | | | | | | | +| SalamandraTA-2b-instruct | **25.46** | 65.95 | 55.42 | **0.87** | 0.82 | **0.75** | **1.22** | **1.05** | +| MADLAD400-3B | 25.12 | 66.02 | **55.78** | 0.85 | **0.85** | 0.74 | 1.37 | 1.83 | +| nllb-200-3.3B | 24.20 | **64.70** | 53.37 | 0.85 | 0.80 | 0.72 | 2.29 | 2.42 | +| **XX-GL** | | | | | | | | | +| SalamandraTA-2b-instruct | **28.72** | **59.65** | **56.33** | **0.86** | 0.83 | **0.69** | **1.04** | **1.25** | +| MADLAD400-3B | 27.54 | 59.84 | 54.94 | 0.85 | **0.85** | 0.67 | 1.34 | 2.28 | +| nllb-200-3.3B | 26.22 | 60.15 | 53.84 | 0.84 | 0.81 | 0.67 | 1.91 | 2.54 | + + +English + +
+ +
+Basque evaluation + +### Basque + +This section presents the evaluation metrics for Basque translation tasks. + +| | Bleu ↑ | Ter ↓ | ChrF ↑ | Comet ↑ | Comet-kiwi ↑ | Bleurt ↑ | MetricX ↓ | MetricX-QE ↓ | +|:-------------------------|:----------|:----------|:----------|:---------|:-------------|:---------|:----------|:-------------| +| **EU-XX** | | | | | | | | | +| MADLAD400-3B | **20.02** | 71.82 | 48.71 | 0.84 | **0.85** | **0.71** | 1.68 | 2.76 | +| SalamandraTA-2b-instruct | 19.00 | 77.45 | **49.13** | **0.85** | 0.79 | **0.71** | **1.45** | **1.43** | +| nllb-200-3.3B | 18.83 | **71.60** | 47.96 | 0.83 | 0.76 | 0.69 | 2.35 | 2.89 | +| **XX-EU** | | | | | | | | | +| SalamandraTA-2b-instruct | **13.06** | 89.81 | **51.65** | **0.84** | 0.77 | **0.78** | **1.25** | **1.09** | +| MADLAD400-3B | 12.65 | 91.60 | 49.86 | 0.82 | **0.84** | **0.78** | 2.22 | 3.43 | +| nllb-200-3.3B | 7.58 | **86.57** | 40.43 | 0.73 | 0.62 | 0.64 | 4.68 | 6.08 | + +English + +
+ +### Low-Resource Languages of Spain + +The tables below summarize the performance metrics for English, Spanish, and Catalan to Asturian, Aranese and Aragonese compared +against [Transducens/IbRo-nllb](https://huggingface.co/Transducens/IbRo-nllb) [(Galiano Jimenez, et al.)](https://aclanthology.org/2024.wmt-1.85/), +[NLLB-200-3.3B](https://huggingface.co/facebook/nllb-200-3.3B) ([Costa-jussà et al., 2022](https://arxiv.org/abs/2207.04672)). + +
+English evaluation + +#### English-XX + +| | source | target | Bleu ↑ | Ter ↓ | ChrF ↑ | +|:-------------------------|:---------|:---------|:----------|:----------|:----------| +| SalamandraTA-2b-instruct | en | ast | **25.84** | **63.31** | **58.60** | +| nllb-200-3.3B | en | ast | 22.02 | 77.26 | 51.40 | +| Transducens/IbRo-nllb | en | ast | 20.56 | 63.92 | 53.32 | +| | | | | | | +| SalamandraTA-2b-instruct | en | arn | **19.09** | 76.04 | **50.18** | +| Transducens/IbRo-nllb | en | arn | 12.81 | **73.21** | 45.76 | +| | | | | | | +| SalamandraTA-2b-instruct | en | arg | **15.87** | 76.75 | **48.08** | +| Transducens/IbRo-nllb | en | arg | 14.07 | **70.37** | 46.89 | +| nllb-200-3.3B | en | arg | 0.31 | 114.39 | 6.87 | + +
+ + + +
+Spanish evaluation + +#### Spanish-XX + +| | source | target | Bleu ↑ | Ter ↓ | ChrF ↑ | +|:-------------------------|:---------|:---------|:----------|:----------|:----------| +| SalamandraTA-2b-instruct | es | ast | **17.30** | 76.72 | **51.31** | +| Transducens/IbRo-nllb | es | ast | 16.79 | **76.36** | 50.89 | +| nllb-200-3.3B | es | ast | 11.85 | 100.86 | 40.27 | +| | | | | | | +| Transducens/IbRo-nllb | es | arn | **50.20** | **36.60** | **73.16** | +| SalamandraTA-2b-instruct | es | arn | 46.76 | 39.32 | 70.76 | +| | | | | | | +| Transducens/IbRo-nllb | es | arg | **59.75** | **28.01** | **78.73** | +| SalamandraTA-2b-instruct | es | arg | 38.42 | 44.43 | 67.39 | + +
+ + +
+Catalan evaluation + + +#### Catalan-XX + +| | source | target | Bleu ↑ | Ter ↓ | ChrF ↑ | +|:-------------------------|:---------|:---------|:----------|:----------|:----------| +| Transducens/IbRo-nllb | ca | ast | **24.77** | **61.60** | **57.49** | +| SalamandraTA-2b-instruct | ca | ast | 24.49 | 65.71 | 57.40 | +| nllb-200-3.3B | ca | ast | 17.17 | 91.47 | 45.83 | +| | | | | | | +| Transducens/IbRo-nllb | ca | arn | **31.22** | **54.30** | **60.30** | +| SalamandraTA-2b-instruct | ca | arn | 29.75 | 57.69 | 59.20 | +| | | | | | | +| Transducens/IbRo-nllb | ca | arg | **24.44** | **60.79** | **55.51** | +| SalamandraTA-2b-instruct | ca | arg | 17.85 | 68.85 | 50.39 | + +
+ + +## Gender Aware Translation + +Below are the evaluation results for gender aware translation evaluated on the [MT-GenEval](https://github.com/amazon-science/machine-translation-gender-eval?tab=readme-ov-file#mt-geneval) +dataset ([Currey, A. et al.](https://arxiv.org/pdf/2211.01355)). +These have been calculated for translation from English into German, Spanish, French, Italian, Portuguese and Russian and are compared +against [MADLAD400-3b-mt](https://huggingface.co/google/madlad400-3b-mt), and [NLLB-200-3-3B](https://huggingface.co/facebook/nllb-200-3.3B). +Evaluation was conducted using [MT-Lens](https://github.com/langtech-bsc/mt-evaluation) and is reported as accuracy computed using the accuracy metric +provided with MT-GenEval. + +
+MT-GenEval Evaluation + +| | Source | Target | Masc | Fem | Pair | +|:--|:--|:--|:--|:--|:--| +| MADLAD400-3B | en | de | 0.863 | 0.837 | 0.713 | +| SalamandraTA-2b-instruct | en | de | **0.887** | **0.843** | **0.747** | +| nllb_3.3B | en | de | 0.870 | 0.787 | 0.677 | +| | | | | | | +| MADLAD400-3B | en | es | **0.883** | 0.750 | 0.660 | +| SalamandraTA-2b-instruct | en | es | 0.877 | **0.843** | **0.740** | +| nllb_3.3B | en | es | 0.867 | 0.777 | 0.663 | +| | | | | | | +| MADLAD400-3B | en | fr | 0.883 | 0.797 | 0.707 | +| SalamandraTA-2b-instruct | en | fr | **0.900** | **0.823** | **0.737** | +| nllb_3.3B | en | fr | **0.900** | 0.727 | 0.643 | +| | | | | | | +| MADLAD400-3B | en | it | **0.917** | 0.693 | 0.643 | +| SalamandraTA-2b-instruct | en | it | 0.910 | **0.757** | **0.687** | +| nllb_3.3B | en | it | 0.907 | 0.673 | 0.597 | +| | | | | | | +| MADLAD400-3B | en | pt | **0.923** | 0.697 | 0.640 | +| SalamandraTA-2b-instruct | en | pt | 0.910 | **0.720** | **0.660** | +| nllb_3.3B | en | pt | 0.913 | 0.713 | 0.650 | +| | | | | | | +| MADLAD400-3B | en | ru | **0.947** | 0.780 | 0.730 | +| SalamandraTA-2b-instruct | en | ru | 0.933 | **0.813** | **0.750** | +| nllb_3.3B | en | ru | 0.930 | 0.787 | 0.723 | +| | | | | | | + +
+ +## Ethical Considerations and Limitations + +Detailed information on the work done to examine the presence of unwanted social and cognitive biases in the base model can be found +at [Salamandra-2B model card](https://huggingface.co/BSC-LT/salamandra-2b). +With regard to MT models, the only analysis related to bias which we have conducted is the MT-GenEval evaluation. +No specific analysis has yet been carried out in order to evaluate potential biases or limitations in translation +accuracy across different languages, dialects, or domains. However, we recognize the importance of identifying and addressing any harmful stereotypes, +cultural inaccuracies, or systematic performance discrepancies that may arise in Machine Translation. As such, we plan to continue performing more analyses +as we implement the necessary metrics and methods within our evaluation framework [MT-Lens](https://github.com/langtech-bsc/mt-evaluation). +Note that the model has only undergone preliminary instruction tuning. +We urge developers to consider potential limitations and conduct safety testing and tuning tailored to their specific applications. + +## Additional information + +### Author +The Language Technologies Unit from Barcelona Supercomputing Center. + +### Contact +For further information, please send an email to . + +### Copyright +Copyright(c) 2025 by Language Technologies Unit, Barcelona Supercomputing Center. + +### Funding +This work has been promoted and financed by the Government of Catalonia through the [Aina Project](https://projecteaina.cat/). + +This work is funded by the _Ministerio para la Transformación Digital y de la Función Pública_ - Funded by EU – NextGenerationEU +within the framework of [ILENIA Project](https://proyectoilenia.es/) with reference 2022/TL22/00215337. + +### Acknowledgements + +The success of this project has been made possible thanks to the invaluable contributions of our partners in the [ILENIA Project](https://proyectoilenia.es/): +[HiTZ](http://hitz.ehu.eus/es), and [CiTIUS](https://citius.gal/es/). +Their efforts have been instrumental in advancing our work, and we sincerely appreciate their help and support. + + + +### Disclaimer + + +### Disclaimer +Be aware that the model may contain biases or other unintended distortions. +When third parties deploy systems or provide services based on this model, or use the model themselves, +they bear the responsibility for mitigating any associated risks and ensuring compliance with applicable regulations, +including those governing the use of Artificial Intelligence. + +The Barcelona Supercomputing Center, as the owner and creator of the model, shall not be held liable for any outcomes resulting from third-party use. + +### License +[Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0) + + +### Citation + +If you find our model useful, we would appreciate if you could cite our work as follows: + +``` +@misc{gilabert2025salamandrasalamandratabscsubmission, + title={From SALAMANDRA to SALAMANDRATA: BSC Submission for WMT25 General Machine Translation Shared Task}, + author={Javier Garcia Gilabert and Xixian Liao and Severino Da Dalt and Ella Bohman and Audrey Mash and Francesca De Luca Fornaciari and Irene Baucells and Joan Llop and Miguel Claramunt Argote and Carlos Escolano and Maite Melero}, + year={2025}, + eprint={2508.12774}, + archivePrefix={arXiv}, + primaryClass={cs.CL}, + url={https://arxiv.org/abs/2508.12774}, +} +``` \ No newline at end of file diff --git a/config.json b/config.json new file mode 100644 index 0000000..d71c697 --- /dev/null +++ b/config.json @@ -0,0 +1,30 @@ +{ + "_name_or_path": "BSC-LT/salamandraTA-2b-instruct", + "architectures": [ + "LlamaForCausalLM" + ], + "attention_bias": false, + "attention_dropout": 0.0, + "bos_token_id": 1, + "eos_token_id": 2, + "head_dim": 128, + "hidden_act": "silu", + "hidden_size": 2048, + "initializer_range": 0.02, + "intermediate_size": 5440, + "max_position_embeddings": 8192, + "mlp_bias": false, + "model_type": "llama", + "num_attention_heads": 16, + "num_hidden_layers": 24, + "num_key_value_heads": 16, + "pretraining_tp": 1, + "rms_norm_eps": 1e-05, + "rope_scaling": null, + "rope_theta": 10000.0, + "tie_word_embeddings": false, + "torch_dtype": "bfloat16", + "transformers_version": "4.40.2", + "use_cache": true, + "vocab_size": 256000 +} diff --git a/generation_config.json b/generation_config.json new file mode 100644 index 0000000..0e8923f --- /dev/null +++ b/generation_config.json @@ -0,0 +1,9 @@ +{ + "_from_model_config": true, + "bos_token_id": 1, + "eos_token_id": [ + 2, + 5 + ], + "transformers_version": "4.40.2" +} diff --git a/images/bleu_ca.png b/images/bleu_ca.png new file mode 100644 index 0000000..8aaf166 --- /dev/null +++ b/images/bleu_ca.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad425acce4eb518b90cd2125cc2b07b3ae3cb8c956122084e0752b54a389952c +size 947048 diff --git a/images/bleu_en.png b/images/bleu_en.png new file mode 100644 index 0000000..08eb569 --- /dev/null +++ b/images/bleu_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:661c0c24da1406d2f4befe6421af7ec6577cf9ccf0ad9315fb5c748a1838be93 +size 1065096 diff --git a/images/bleu_es.png b/images/bleu_es.png new file mode 100644 index 0000000..3e8ccc1 --- /dev/null +++ b/images/bleu_es.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eebdc3066b9ebdcdaa4089d19e3ccccd302dc0c43a9c3a2bed89dcfd2cc8f960 +size 1026839 diff --git a/images/bleu_eu.png b/images/bleu_eu.png new file mode 100644 index 0000000..3608cdf --- /dev/null +++ b/images/bleu_eu.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:975b1c12a1291935b58e47674f2af853497980972c4de31008a4f9132a540690 +size 981564 diff --git a/images/bleu_gl.png b/images/bleu_gl.png new file mode 100644 index 0000000..97b7ee4 --- /dev/null +++ b/images/bleu_gl.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8a19e876634f9bfa5d53878aa4574c345d4ff8be27375f748285304ff851e83 +size 925970 diff --git a/images/chart.png b/images/chart.png new file mode 100644 index 0000000000000000000000000000000000000000..c2a7fdf615870ff04bc22cc48e00b510801d4a22 GIT binary patch literal 34674 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 bMjvme&4S9v_D`#4??aN6RFbF^GYb4)9tZ`I literal 0 HcmV?d00001 diff --git a/images/salamandra_header.png b/images/salamandra_header.png new file mode 100644 index 0000000..948bbfc --- /dev/null +++ b/images/salamandra_header.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de12bec43f22c0c41b45b84425759d6c9e38ecdf06d58519f048f10fe6e826de +size 11097851 diff --git a/images/treemap.png b/images/treemap.png new file mode 100644 index 0000000000000000000000000000000000000000..93e64d16f473673835567d468737a4aabc50b116 GIT binary patch literal 40620 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 literal 0 HcmV?d00001 diff --git a/model.safetensors b/model.safetensors new file mode 100644 index 0000000..a705b63 --- /dev/null +++ b/model.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8040eab8c2fe404cc9be3e46559e77f95600f42ccbdd4ea62a728d774341f63 +size 4507005744 diff --git a/special_tokens_map.json b/special_tokens_map.json new file mode 100644 index 0000000..340cfab --- /dev/null +++ b/special_tokens_map.json @@ -0,0 +1,28 @@ +{ + "additional_special_tokens": [ + "<|im_start|>", + "<|im_end|>" + ], + "bos_token": { + "content": "", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false + }, + "eos_token": { + "content": "<|im_end|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false + }, + "pad_token": "", + "unk_token": { + "content": "", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false + } +} diff --git a/tokenizer.json b/tokenizer.json new file mode 100644 index 0000000..11e0807 --- /dev/null +++ b/tokenizer.json @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:139de51e6bbe12b772a255e157829f43bd67b63a4d55f1fe0e3abce37b2d8c9a +size 19066993 diff --git a/tokenizer.model b/tokenizer.model new file mode 100644 index 0000000..3307f8d --- /dev/null +++ b/tokenizer.model @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa490e57cebce5cb1a0a5b1a5d3fa4de05aee53dc3a44791f1c3401db44d802d +size 4813274 diff --git a/tokenizer_config.json b/tokenizer_config.json new file mode 100644 index 0000000..7df3666 --- /dev/null +++ b/tokenizer_config.json @@ -0,0 +1,64 @@ +{ + "add_bos_token": true, + "add_eos_token": false, + "add_prefix_space": true, + "added_tokens_decoder": { + "0": { + "content": "", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "1": { + "content": "", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "2": { + "content": "", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "4": { + "content": "<|im_start|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "5": { + "content": "<|im_end|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + } + }, + "additional_special_tokens": [ + "<|im_start|>", + "<|im_end|>" + ], + "bos_token": "", + "chat_template": "{% for message in messages %}{{'<|im_start|>' + message['role'] + '\n' + message['content'] + '<|im_end|>' + '\n'}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant\n' }}{% endif %}", + "clean_up_tokenization_spaces": false, + "eos_token": "<|im_end|>", + "legacy": true, + "model_max_length": 8192, + "pad_token": "", + "padding_side": "right", + "sp_model_kwargs": {}, + "spaces_between_special_tokens": false, + "tokenizer_class": "LlamaTokenizer", + "unk_token": "", + "use_default_system_prompt": false +}