Spaces:
Build error
Build error
| import os | |
| import subprocess | |
| import sys | |
| import gradio as gr | |
| def install(package): | |
| subprocess.check_call([sys.executable, "-m", "pip", "install", package]) | |
| install("numpy") | |
| install("torch") | |
| install("transformers") | |
| install("unidecode") | |
| import numpy as np | |
| import torch | |
| from transformers import DebertaV2TokenizerFast, DebertaV2ForQuestionAnswering | |
| from transformers.pipelines import QuestionAnsweringPipeline | |
| from transformers import pipeline | |
| from collections import Counter | |
| from unidecode import unidecode | |
| import re | |
| import string | |
| tokenizer = DebertaV2TokenizerFast.from_pretrained("osiria/deberta-italian-question-answering") | |
| model = DebertaV2ForQuestionAnswering.from_pretrained("osiria/deberta-italian-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 | |
| device = torch.device("cpu") | |
| model = model.to(device) | |
| model.eval() | |
| pipeline_qa = OsiriaQA(model = model, tokenizer = tokenizer) | |
| header = '''-------------------------------------------------------------------------------------------------- | |
| <style> | |
| .vertical-text { | |
| writing-mode: vertical-lr; | |
| text-orientation: upright; | |
| background-color:red; | |
| } | |
| </style> | |
| <center> | |
| <body> | |
| <span class="vertical-text" style="background-color:lightgreen;border-radius: 3px;padding: 3px;"> </span> | |
| <span class="vertical-text" style="background-color:orange;border-radius: 3px;padding: 3px;"> D</span> | |
| <span class="vertical-text" style="background-color:lightblue;border-radius: 3px;padding: 3px;"> E</span> | |
| <span class="vertical-text" style="background-color:tomato;border-radius: 3px;padding: 3px;"> M</span> | |
| <span class="vertical-text" style="background-color:lightgrey;border-radius: 3px;padding: 3px;"> O</span> | |
| <span class="vertical-text" style="background-color:#CF9FFF;border-radius: 3px;padding: 3px;"> </span> | |
| </body> | |
| </center> | |
| <br> | |
| ''' | |
| def extract(question, context): | |
| res = pipeline_qa(context = context, | |
| question = question) | |
| out_text = context[0:res["start"]] + '<span style="background-color:lightgreen;border-radius: 3px;padding: 3px;"><b>ᴀɴs </b> ' + context[res["start"]:res["end"]] + '</span>' + context[res["end"]:] | |
| return out_text | |
| init_question= "Cos'è l'Agenzia Spaziale Italiana?" | |
| init_context = '''L'Agenzia Spaziale Italiana (ASI) è un ente governativo italiano, istituito nel 1988, che ha il compito di predisporre e attuare la politica aerospaziale italiana. Dipende e utilizza i fondi ricevuti dal Governo italiano per finanziare il progetto, lo sviluppo e la gestione operativa di missioni spaziali, con obiettivi scientifici e applicativi. | |
| Gestisce missioni spaziali in proprio e in collaborazione con i maggiori organismi spaziali internazionali, prima tra tutte l'Agenzia Spaziale Europea (dove l'Italia è il terzo maggior contribuente dopo Francia e Germania, e a cui l'ASI corrisponde una parte del proprio budget), quindi la NASA e le altre agenzie spaziali nazionali. Per la realizzazione di satelliti e strumenti scientifici, l'ASI stipula contratti con le imprese, italiane e non, operanti nel settore aerospaziale. | |
| Ha la sede principale a Roma e centri operativi a Matera (sede del Centro di geodesia spaziale Giuseppe Colombo) e Malindi, Kenya (sede del Centro spaziale Luigi Broglio). Il centro di Trapani-Milo, usato per i lanci di palloni stratosferici dal 1975, non è più operativo dal 2010.''' | |
| init_output = extract(question = init_question, context = init_context) | |
| with gr.Blocks(css="footer {visibility: hidden}", theme=gr.themes.Default(text_size="lg", spacing_size="lg")) as interface: | |
| with gr.Row(): | |
| gr.Markdown(header) | |
| with gr.Row(): | |
| context = gr.Text(label="Context", lines = 10, value = init_context) | |
| with gr.Row(): | |
| question = gr.Text(label="Question", lines = 1, value = init_question) | |
| with gr.Row(): | |
| gr.Examples([["Cosa fa l'Agenzia Spaziale Italiana?"], | |
| ["Qual è la sigla dell'Agenzia Spaziale Italiana?"], | |
| ["Quando è stata fondata l'ASI?"], | |
| ["Chi finanzia l'ASI?"], | |
| ["Chi altro contribuisce all'Agenzia Spaziale Europea oltre all'Italia?"], | |
| ["Dove ha sede l'Agenzia Spaziale Italiana?"], | |
| ["Dove si trova il centro spaziale Giuseppe Colombo?"], | |
| ["Dove si trova il centro spaziale Luigi Broglio?"], | |
| ["Il centro di Trapani-Milo è ancora in funzione?"]], | |
| inputs=[question]) | |
| with gr.Row(): | |
| with gr.Column(): | |
| button = gr.Button("Ask").style(full_width=False) | |
| with gr.Row(): | |
| with gr.Column(): | |
| output = gr.Markdown(init_output) | |
| with gr.Row(): | |
| with gr.Column(): | |
| gr.Markdown("<center>The input examples in this demo are extracted from https://it.wikipedia.org</center>") | |
| button.click(extract, inputs=[question, context], outputs = [output]) | |
| interface.launch() |