Task: Question Answering
Model: MiniLM
Lang: IT
Model description
This is a MiniLMv2 [1] model for the Italian language, fine-tuned for Extractive Question Answering on the SQuAD-IT dataset [2].
Training and Performances
The model is trained to perform question answering, given a context and a question (under the assumption that the context contains the answer to the question). It has been fine-tuned for Extractive Question Answering, using the SQuAD-IT dataset, for 2 epochs with a linearly decaying learning rate starting from 3e-5, maximum sequence length of 384 and document stride of 128.
The dataset includes 54.159 training instances and 7.609 test instances
update: version 2.0
The 2.0 version further improves the performances by exploiting a 2-phases fine-tuning strategy: the model is first fine-tuned on the English SQuAD v2 (1 epoch, 20% warmup ratio, and max learning rate of 3e-5) then further fine-tuned on the Italian SQuAD (2 epochs, no warmup, initial learning rate of 3e-5)
In order to maximize the benefits of the multilingual procedure, L6xH384 mMiniLMv2 is used as a pre-trained model. When the double fine-tuning is completed, the embedding layer is then compressed as in minilm-l6-h384-italian-cased to obtain a mono-lingual model size
The performances on the test set are reported in the following table:
(version 2.0 performances)
EM | F1 |
---|---|
60.28 | 72.04 |
Testing notebook: https://huggingface.co/osiria/minilm-italian-l6-h384-question-answering/blob/main/osiria_minilm_l6_h384_italian_qa_evaluation.ipynb
Quick usage
In order to get the best possible outputs from the model, it is recommended to use the following pipeline
from transformers import AutoTokenizer, AutoModelForQuestionAnswering
import re
import string
from transformers.pipelines import QuestionAnsweringPipeline
tokenizer = AutoTokenizer.from_pretrained("osiria/minilm-italian-l6-h384-question-answering")
model = AutoModelForQuestionAnswering.from_pretrained("osiria/minilm-italian-l6-h384-question-answering")
class OsiriaQA(QuestionAnsweringPipeline):
def __init__(self, punctuation = ',;.:!?()[\]{}', **kwargs):
QuestionAnsweringPipeline.__init__(self, **kwargs)
self.post_regex_left = "^[\s" + punctuation + "]+"
self.post_regex_right = "[\s" + punctuation + "]+$"
def postprocess(self, output):
output = QuestionAnsweringPipeline.postprocess(self, model_outputs=output)
output_length = len(output["answer"])
output["answer"] = re.sub(self.post_regex_left, "", output["answer"])
output["start"] = output["start"] + (output_length - len(output["answer"]))
output_length = len(output["answer"])
output["answer"] = re.sub(self.post_regex_right, "", output["answer"])
output["end"] = output["end"] - (output_length - len(output["answer"]))
return output
pipeline_qa = OsiriaQA(model = model, tokenizer = tokenizer)
pipeline_qa(context = "Alessandro Manzoni è nato a Milano nel 1785",
question = "Dove è nato Manzoni?")
# {'score': 0.9492858052253723, 'start': 28, 'end': 34, 'answer': 'Milano'}
You can also try the model online using this web app: https://huggingface.co/spaces/osiria/minilm-l6-h384-italian-question-answering
References
[1] https://arxiv.org/abs/2012.15828
[2] https://link.springer.com/chapter/10.1007/978-3-030-03840-3_29
Limitations
This model was trained on the English SQuAD v2 and on SQuAD-IT, which is mainly a machine translated version of the original SQuAD v1.1. This means that the quality of the training set is limited by the machine translation. Moreover, the model is meant to answer questions under the assumption that the required information is actually contained in the given context (which is the underlying assumption of SQuAD v1.1). If the assumption is violated, the model will try to return an answer in any case, which is going to be incorrect.
License
The model is released under MIT license
- Downloads last month
- 12
Dataset used to train osiria/minilm-italian-l6-h384-question-answering
Space using osiria/minilm-italian-l6-h384-question-answering 1
Collection including osiria/minilm-italian-l6-h384-question-answering
Evaluation results
- Exact Match on squad_itself-reported0.603
- F1 on squad_itself-reported0.720