osiria/liteqa
0
1import os2import subprocess3import sys4import gradio as gr5 6def install(package):7 subprocess.check_call([sys.executable, "-m", "pip", "install", package])8 9install("numpy")10install("torch")11install("transformers")12install("unidecode")13 14import numpy as np15import torch16from transformers import DebertaV2TokenizerFast, DebertaV2ForQuestionAnswering17from transformers.pipelines import QuestionAnsweringPipeline18from transformers import pipeline19from collections import Counter20from unidecode import unidecode21import re22import string23 24tokenizer = DebertaV2TokenizerFast.from_pretrained("osiria/deberta-italian-question-answering", revision="liteqa")25model = DebertaV2ForQuestionAnswering.from_pretrained("osiria/deberta-italian-question-answering", revision="liteqa")26 27class OsiriaQA(QuestionAnsweringPipeline):28 29 def __init__(self, punctuation = ',;.:!?()[\]{}', **kwargs):30 31 QuestionAnsweringPipeline.__init__(self, **kwargs)32 self.post_regex_left = "^[\s" + punctuation + "]+"33 self.post_regex_right = "[\s" + punctuation + "]+$"34 35 def postprocess(self, output):36 37 output = QuestionAnsweringPipeline.postprocess(self, model_outputs=output)38 output_length = len(output["answer"])39 output["answer"] = re.sub(self.post_regex_left, "", output["answer"])40 output["start"] = output["start"] + (output_length - len(output["answer"]))41 output_length = len(output["answer"])42 output["answer"] = re.sub(self.post_regex_right, "", output["answer"])43 output["end"] = output["end"] - (output_length - len(output["answer"]))44 45 return output46 47 48device = torch.device("cpu")49model = model.to(device)50model.eval()51 52 53pipeline_qa = OsiriaQA(model = model, tokenizer = tokenizer)54 55 56header = '''--------------------------------------------------------------------------------------------------57<style>58.vertical-text {59 writing-mode: vertical-lr;60 text-orientation: upright;61 background-color:red;62}63</style>64<center>65<body>66<span class="vertical-text" style="background-color:lightgreen;border-radius: 3px;padding: 3px;"> </span>67<span class="vertical-text" style="background-color:orange;border-radius: 3px;padding: 3px;"> D</span>68<span class="vertical-text" style="background-color:lightblue;border-radius: 3px;padding: 3px;"> E</span>69<span class="vertical-text" style="background-color:tomato;border-radius: 3px;padding: 3px;"> M</span>70<span class="vertical-text" style="background-color:lightgrey;border-radius: 3px;padding: 3px;"> O</span>71<span class="vertical-text" style="background-color:#CF9FFF;border-radius: 3px;padding: 3px;"> </span>72</body>73</center>74<br>75'''76 77def extract(question, context):78 79 res = pipeline_qa(context = context,80 question = question)81 82 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"]:]83 84 return out_text85 86 87init_question= "Cos'è l'Agenzia Spaziale Italiana?"88 89init_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.90Gestisce 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.91Ha 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.'''92 93init_output = extract(question = init_question, context = init_context)94 95 96with gr.Blocks(css="footer {visibility: hidden}", theme=gr.themes.Default(text_size="lg", spacing_size="lg")) as interface:97 98 with gr.Row():99 gr.Markdown(header)100 with gr.Row():101 context = gr.Text(label="Context", lines = 10, value = init_context)102 with gr.Row():103 question = gr.Text(label="Question", lines = 1, value = init_question)104 with gr.Row():105 gr.Examples([["Cosa fa l'Agenzia Spaziale Italiana?"],106 ["Qual è la sigla dell'Agenzia Spaziale Italiana?"],107 ["Quando è stata fondata l'ASI?"],108 ["Chi finanzia l'ASI?"],109 ["Chi altro contribuisce all'Agenzia Spaziale Europea oltre all'Italia?"],110 ["Dove ha sede l'Agenzia Spaziale Italiana?"],111 ["Dove si trova il centro spaziale Giuseppe Colombo?"],112 ["Dove si trova il centro spaziale Luigi Broglio?"],113 ["Il centro di Trapani-Milo è ancora in funzione?"]],114 inputs=[question])115 with gr.Row():116 with gr.Column():117 button = gr.Button("Ask")118 with gr.Row():119 with gr.Column():120 output = gr.Markdown(init_output)121 122 with gr.Row():123 with gr.Column():124 gr.Markdown("<center>The input examples in this demo are extracted from https://it.wikipedia.org</center>") 125 126 button.click(extract, inputs=[question, context], outputs = [output])127 128 129interface.launch()