|
--- |
|
language: |
|
- pt |
|
tags: |
|
- text2text-generation |
|
- t5 |
|
- pytorch |
|
- qa |
|
datasets: |
|
- squad |
|
- squad_v1_pt |
|
metrics: |
|
- precision |
|
- recall |
|
- f1 |
|
- accuracy |
|
- squad |
|
model-index: |
|
- name: checkpoints |
|
results: |
|
- task: |
|
name: text2text-generation |
|
type: text2text-generation |
|
dataset: |
|
name: squad |
|
type: squad |
|
metrics: |
|
- name: f1 |
|
type: f1 |
|
value: 79.3 |
|
- name: exact-match |
|
type: exact-match |
|
value: 67.3983 |
|
widget: |
|
- text: "question: Quando começou a pandemia de Covid-19 no mundo? context: A pandemia de COVID-19, também conhecida como pandemia de coronavírus, é uma pandemia em curso de COVID-19, uma doença respiratória aguda causada pelo coronavírus da síndrome respiratória aguda grave 2 (SARS-CoV-2). A doença foi identificada pela primeira vez em Wuhan, na província de Hubei, República Popular da China, em 1 de dezembro de 2019, mas o primeiro caso foi reportado em 31 de dezembro do mesmo ano." |
|
- text: "question: Onde foi descoberta a Covid-19? context: A pandemia de COVID-19, também conhecida como pandemia de coronavírus, é uma pandemia em curso de COVID-19, uma doença respiratória aguda causada pelo coronavírus da síndrome respiratória aguda grave 2 (SARS-CoV-2). A doença foi identificada pela primeira vez em Wuhan, na província de Hubei, República Popular da China, em 1 de dezembro de 2019, mas o primeiro caso foi reportado em 31 de dezembro do mesmo ano." |
|
--- |
|
|
|
# T5 base finetuned for Question Answering (QA) on SQUaD v1.1 Portuguese |
|
|
|
![Exemple of what can do with a T5 model (for example: Question Answering finetuned on SQUAD v1.1 in Portuguese)](https://miro.medium.com/max/2000/1*zp9niaQzWNo8Pipd8zvL1w.png) |
|
|
|
## Introduction |
|
|
|
**t5-base-qa-squad-v1.1-portuguese** is a QA model (Question Answering) in Portuguese that was finetuned on 27/01/2022 in Google Colab from the model [unicamp-dl/ptt5-base-portuguese-vocab](https://huggingface.co/unicamp-dl/ptt5-base-portuguese-vocab) of Neuralmind on the dataset SQUAD v1.1 in portuguese from the [Deep Learning Brasil group](http://www.deeplearningbrasil.com.br/) by using a Test2Text-Generation objective. |
|
|
|
Due to the small size of T5 base and finetuning dataset, the model overfitted before to reach the end of training. Here are the overall final metrics on the validation dataset: |
|
- **f1**: 79.3 |
|
- **exact_match**: 67.3983 |
|
|
|
Check our other QA models in Portuguese finetuned on SQUAD v1.1: |
|
- [Portuguese BERT base cased QA](https://huggingface.co/pierreguillou/bert-base-cased-squad-v1.1-portuguese) |
|
- [Portuguese BERT large cased QA](https://huggingface.co/pierreguillou/bert-large-cased-squad-v1.1-portuguese) |
|
- [Portuguese ByT5 small QA](https://huggingface.co/pierreguillou/byt5-small-qa-squad-v1.1-portuguese) |
|
|
|
## Blog post |
|
|
|
[NLP nas empresas | Como eu treinei um modelo T5 em português na tarefa QA no Google Colab](https://medium.com/@pierre_guillou/nlp-nas-empresas-como-eu-treinei-um-modelo-t5-em-portugu%C3%AAs-na-tarefa-qa-no-google-colab-e8eb0dc38894) (27/01/2022) |
|
|
|
## Widget & App |
|
|
|
You can test this model into the widget of this page. |
|
|
|
Use as well the [QA App | T5 base pt](https://huggingface.co/spaces/pierreguillou/question-answering-portuguese-t5-base) that allows using the model T5 base finetuned on the QA task with the SQuAD v1.1 pt dataset. |
|
|
|
## Using the model for inference in production |
|
```` |
|
# install pytorch: check https://pytorch.org/ |
|
# !pip install transformers |
|
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM |
|
|
|
# model & tokenizer |
|
model_name = "pierreguillou/t5-base-qa-squad-v1.1-portuguese" |
|
tokenizer = AutoTokenizer.from_pretrained(model_name) |
|
model = AutoModelForSeq2SeqLM.from_pretrained(model_name) |
|
|
|
# parameters |
|
max_target_length=32 |
|
num_beams=1 |
|
early_stopping=True |
|
|
|
input_text = 'question: Quando foi descoberta a Covid-19? context: A pandemia de COVID-19, também conhecida como pandemia de coronavírus, é uma pandemia em curso de COVID-19, uma doença respiratória aguda causada pelo coronavírus da síndrome respiratória aguda grave 2 (SARS-CoV-2). A doença foi identificada pela primeira vez em Wuhan, na província de Hubei, República Popular da China, em 1 de dezembro de 2019, mas o primeiro caso foi reportado em 31 de dezembro do mesmo ano.' |
|
label = '1 de dezembro de 2019' |
|
|
|
inputs = tokenizer(input_text, return_tensors="pt") |
|
|
|
outputs = model.generate(inputs["input_ids"], |
|
max_length=max_target_length, |
|
num_beams=num_beams, |
|
early_stopping=early_stopping |
|
) |
|
pred = tokenizer.decode(outputs[0], skip_special_tokens=True, clean_up_tokenization_spaces=True) |
|
|
|
print('true answer |', label) |
|
print('pred |', pred) |
|
```` |
|
You can use pipeline, too. However, it seems to have an issue regarding to the max_length of the input sequence. |
|
```` |
|
!pip install transformers |
|
import transformers |
|
from transformers import pipeline |
|
|
|
# model |
|
model_name = "pierreguillou/t5-base-qa-squad-v1.1-portuguese" |
|
|
|
# parameters |
|
max_target_length=32 |
|
num_beams=1 |
|
early_stopping=True |
|
clean_up_tokenization_spaces=True |
|
|
|
input_text = 'question: Quando foi descoberta a Covid-19? context: A pandemia de COVID-19, também conhecida como pandemia de coronavírus, é uma pandemia em curso de COVID-19, uma doença respiratória aguda causada pelo coronavírus da síndrome respiratória aguda grave 2 (SARS-CoV-2). A doença foi identificada pela primeira vez em Wuhan, na província de Hubei, República Popular da China, em 1 de dezembro de 2019, mas o primeiro caso foi reportado em 31 de dezembro do mesmo ano.' |
|
label = '1 de dezembro de 2019' |
|
|
|
text2text = pipeline( |
|
"text2text-generation", |
|
model=model_name, |
|
max_length=max_target_length, |
|
num_beams=num_beams, |
|
early_stopping=early_stopping, |
|
clean_up_tokenization_spaces=clean_up_tokenization_spaces |
|
) |
|
|
|
pred = text2text(input_text) |
|
|
|
print('true answer |', label) |
|
print('pred |', pred) |
|
```` |
|
## Training procedure |
|
|
|
### Notebook |
|
|
|
The notebook of finetuning ([HuggingFace_Notebook_t5-base-portuguese-vocab_question_answering_QA_squad_v11_pt.ipynb](https://github.com/piegu/language-models/blob/master/HuggingFace_Notebook_t5_base_portuguese_vocab_question_answering_QA_squad_v11_pt.ipynb)) is in github. |
|
|
|
### Hyperparameters |
|
```` |
|
# do training and evaluation |
|
do_train = True |
|
do_eval= True |
|
|
|
# batch |
|
batch_size = 4 |
|
gradient_accumulation_steps = 3 |
|
per_device_train_batch_size = batch_size |
|
per_device_eval_batch_size = per_device_train_batch_size*16 |
|
|
|
# LR, wd, epochs |
|
learning_rate = 1e-4 |
|
weight_decay = 0.01 |
|
num_train_epochs = 10 |
|
fp16 = True |
|
|
|
# logs |
|
logging_strategy = "steps" |
|
logging_first_step = True |
|
logging_steps = 3000 # if logging_strategy = "steps" |
|
eval_steps = logging_steps |
|
|
|
# checkpoints |
|
evaluation_strategy = logging_strategy |
|
save_strategy = logging_strategy |
|
save_steps = logging_steps |
|
save_total_limit = 3 |
|
|
|
# best model |
|
load_best_model_at_end = True |
|
metric_for_best_model = "f1" #"loss" |
|
if metric_for_best_model == "loss": |
|
greater_is_better = False |
|
else: |
|
greater_is_better = True |
|
|
|
# evaluation |
|
num_beams = 1 |
|
```` |
|
|
|
### Training results |
|
|
|
```` |
|
Num examples = 87510 |
|
Num Epochs = 10 |
|
Instantaneous batch size per device = 4 |
|
Total train batch size (w. parallel, distributed & accumulation) = 12 |
|
Gradient Accumulation steps = 3 |
|
Total optimization steps = 72920 |
|
|
|
Step Training Loss Exact Match F1 |
|
3000 0.776100 61.807001 75.114517 |
|
6000 0.545900 65.260170 77.468930 |
|
9000 0.460500 66.556291 78.491938 |
|
12000 0.393400 66.821192 78.745397 |
|
15000 0.379800 66.603595 78.815515 |
|
18000 0.298100 67.578051 79.287899 |
|
21000 0.303100 66.991485 78.979669 |
|
24000 0.251600 67.275307 78.929923 |
|
|
|
27000 0.237500 66.972564 79.333612 |
|
|
|
30000 0.220500 66.915799 79.236574 |
|
33000 0.182600 67.029328 78.964212 |
|
36000 0.190600 66.982025 79.086125 |
|
|
|
```` |