|
--- |
|
library_name: transformers |
|
tags: |
|
- seq2seq |
|
license: apache-2.0 |
|
datasets: |
|
- Helsinki-NLP/europarl |
|
- Helsinki-NLP/opus-100 |
|
language: |
|
- en |
|
- it |
|
base_model: |
|
- bigscience/mt0-small |
|
pipeline_tag: translation |
|
metrics: |
|
- bleu |
|
--- |
|
|
|
## 🍀 Quadrifoglio - A small model for English -> Italian translation |
|
|
|
Quadrifoglio is an encoder-decoder transformer model for English-Italian text translation based on `bigscience/mt0-small`. It was trained on the `en-it` section of `Helsinki-NLP/opus-100` and `Helsinki-NLP/europarl`. |
|
|
|
|
|
## Usage |
|
|
|
```python |
|
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM |
|
|
|
# Load model and tokenizer from checkpoint directory |
|
tokenizer = AutoTokenizer.from_pretrained("LeonardPuettmann/mt0-Quadrifoglio-mt-en-it") |
|
model = AutoModelForSeq2SeqLM.from_pretrained("LeonardPuettmann/mt0-Quadrifoglio-mt-en-it") |
|
|
|
def generate_response(input_text): |
|
input_ids = tokenizer("translate English to Italian:" + input_text, return_tensors="pt").input_ids |
|
output = model.generate(input_ids, max_new_tokens=256) |
|
return tokenizer.decode(output[0], skip_special_tokens=True) |
|
|
|
text_to_translate = "I would like a cup of green tea, please." |
|
response = generate_response(text_to_translate) |
|
print(response) |
|
``` |
|
|
|
As this model is trained on translating sentence pairs, it is best to split longer text into individual sentences, ideally using SpaCy: |
|
```python |
|
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM |
|
import spacy |
|
# First, install spaCy and the English language model if you haven't already |
|
# !pip install spacy |
|
# !python -m spacy download en_core_web_sm |
|
|
|
nlp = spacy.load("en_core_web_sm") |
|
|
|
tokenizer = AutoTokenizer.from_pretrained("LeonardPuettmann/mt0-Quadrifoglio-mt-en-it") |
|
model = AutoModelForSeq2SeqLM.from_pretrained("LeonardPuettmann/mt0-Quadrifoglio-mt-en-it") |
|
|
|
def generate_response(input_text): |
|
input_ids = tokenizer("translate Italian to English: " + input_text, return_tensors="pt").input_ids |
|
output = model.generate(input_ids, max_new_tokens=256) |
|
return tokenizer.decode(output[0], skip_special_tokens=True) |
|
|
|
text = "How are you doing? Today is a beautiful day. I hope you are doing fine." |
|
doc = nlp(text) |
|
sentences = [sent.text for sent in doc.sents] |
|
|
|
sentence_translations = [] |
|
for i, sentence in enumerate(sentences): |
|
sentence_translation = generate_response(sentence) |
|
sentence_translations.append(sentence_translation) |
|
|
|
full_translation = " ".join(sentence_translations) |
|
print(full_translation) |
|
``` |
|
|
|
## Evaluation |
|
Done on the Opus 100 test set. |
|
|
|
### BLEU |
|
| | Quadrifoglio (this model) | mt0-small| DeepL | |
|
|--------------|-------------------------------|----------|--------| |
|
| BLEU Score | 0.4816 | 0.0159 | 0.5210 | |
|
| Precision 1 | 0.7305 | 0.2350 | 0.7613 | |
|
| Precision 2 | 0.5413 | 0.0290 | 0.5853 | |
|
| Precision 3 | 0.4289 | 0.0076 | 0.4800 | |
|
| Precision 4 | 0.3417 | 0.0013 | 0.3971 | |
|
|