Downloads · 30 days
12
1% of all-time downloads
Propicto/t2p-nllb-200-distilled-600M-all
t2p-nllb-200-distilled-600M-all is a translation model from Propicto. Use it when you need text moved from one language to another. It is set up for transformers. The card lists the license as apache-2.0.
t2p-nllb-200-distilled-600M-all is a text-to-pictograms translation model built by fine-tuning the nllb-200-distilled-600M model on a dataset of pairs of transcriptions / pictogram token sequence (each token is linked…
Downloads · 30 days
12
1% of all-time downloads
All-time downloads
1.6K
Public
Parameters
615M
7.4 GB on disk
Likes
0
Public
Click a slice to open those files.
.pt4.9 GB · 66%
From the Hugging Face model README
t2p-nllb-200-distilled-600M-all is a text-to-pictograms translation model built by fine-tuning the nllb-200-distilled-600M model on a dataset of pairs of transcriptions / pictogram token sequence (each token is linked to a pictogram image from ARASAAC). The model is used only for inference.
The model was fine-tuned on a set of 4 training datasets :
All the datasets were built with the method presented in the research paper titled "A Multimodal French Corpus of Aligned Speech, Text, and Pictogram Sequences for Speech-to-Pictogram Machine Translation" at LREC-Coling 2024. The dataset was split into training, validation, and test sets.
| Corpus | train | valid | test |
|---|---|---|---|
| Propicto-commonvoice | 527,390 | 16,124 | 16,120 |
| Propicto-orfeo | 231,374 | 28,796 | 29,009 |
| Propicto-tedx | 85,106 | 749 | 804 |
| Propicto-polylexical | 1,462 | - | - |
| TOTAL | 845,332 | 45,669 | 45,933 |
A full list of the parameters is available in the config.json file. This is the arguments in the training pipeline :
training_args = Seq2SeqTrainingArguments(
output_dir="checkpoints_corpus_v2/",
evaluation_strategy="epoch",
save_strategy="epoch",
learning_rate=2e-5,
per_device_train_batch_size=32,
per_device_eval_batch_size=32,
weight_decay=0.01,
save_total_limit=3,
num_train_epochs=40,
predict_with_generate=True,
fp16=True,
load_best_model_at_end=True
)
The model was evaluated with sacreBLEU, where we compared the reference pictogram translation with the model hypothesis.
| Model | validation | test |
|---|---|---|
| t2p-nllb-200-distilled-600M-all | 92.4 | - |
Fine-tuning was performed using a single Nvidia V100 GPU with 32 GB of memory, which took 8.5 hours in total.
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
source_lang = "fr"
target_lang = "frp"
max_input_length = 128
max_target_length = 128
tokenizer = AutoTokenizer.from_pretrained("Propicto/t2p-nllb-200-distilled-600M-all")
model = AutoModelForSeq2SeqLM.from_pretrained("Propicto/t2p-nllb-200-distilled-600M-all")
inputs = tokenizer("Je mange une pomme", return_tensors="pt").input_ids
outputs = model.generate(inputs.to("cuda:0"), max_new_tokens=40, do_sample=True, top_k=30, top_p=0.95)
pred = tokenizer.decode(outputs[0], skip_special_tokens=True)
import pandas as pd
def process_output_trad(pred):
return pred.split()
def read_lexicon(lexicon):
df = pd.read_csv(lexicon, sep='\t')
df['keyword_no_cat'] = df['lemma'].str.split(' #').str[0].str.strip().str.replace(' ', '_')
return df
def get_id_picto_from_predicted_lemma(df_lexicon, lemma):
id_picto = df_lexicon.loc[df_lexicon['keyword_no_cat'] == lemma, 'id_picto'].tolist()
return (id_picto[0], lemma) if id_picto else (0, lemma)
lexicon = read_lexicon("lexicon.csv")
sentence_to_map = process_output_trad(pred)
pictogram_ids = [get_id_picto_from_predicted_lemma(lexicon, lemma) for lemma in sentence_to_map]
def generate_html(ids):
html_content = '<html><body>'
for picto_id, lemma in ids:
if picto_id != 0: # ignore invalid IDs
img_url = f"https://static.arasaac.org/pictograms/{picto_id}/{picto_id}_500.png"
html_content += f'''
<figure style="display:inline-block; margin:1px;">
<img src="{img_url}" alt="{lemma}" width="200" height="200" />
<figcaption>{lemma}</figcaption>
</figure>
'''
html_content += '</body></html>'
return html_content
html = generate_html(pictogram_ids)
with open("pictograms.html", "w") as file:
file.write(html)