Spaces:
Running
Running
from transformers import pipeline | |
import gradio as gr | |
# Load models | |
summarizer = pipeline("summarization", model="sshleifer/distilbart-cnn-12-6") | |
answerer = pipeline("question-answering", model="valhalla/bart-large-finetuned-squadv1") | |
translator = pipeline("translation", model="facebook/nllb-200-distilled-600M") | |
filler = pipeline("fill-mask", model="FacebookAI/roberta-large") | |
paraphraser = pipeline("text2text-generation", model="humarin/chatgpt_paraphraser_on_T5_base") | |
# NLP functions | |
def summarize(text, min_length, max_length): | |
summary = summarizer(text, min_length=min_length, max_length=max_length) | |
return summary[0]['summary_text'] | |
def answer(context, question): | |
answers = answerer(context=context, question=question, top_k=3) | |
return [" ".join(answer['answer'].split("\n")) for answer in answers] | |
languages = ["zho_Hans (Chinese)", "spa_Latn (Spanish)", "eng_Latn (English)", "hin_Deva (Hindi)", "por_Latn (Portuguese)", "rus_Cyrl (Russian)", | |
"jpn_Jpan (Japanese)", "deu_Latn (German)", "yue_Hant (Yue Chinese)", "kor_Hang (Korean)", "fra_Latn (French)", "ita_Latn (Italian)"] | |
def translate(text, src_lang, tgt_lang): | |
src_lang = src_lang.split()[0] | |
tgt_lang = tgt_lang.split()[0] | |
translation = translator(text, src_lang=src_lang, tgt_lang=tgt_lang, max_length=translator.tokenizer.model_max_length) | |
return translation[0]['translation_text'] | |
def fill(text, to_fill): | |
if not to_fill: | |
text = text.replace("_", filler.tokenizer.mask_token) | |
else: | |
text = text.replace(to_fill, filler.tokenizer.mask_token) | |
words = filler(text, top_k=3) | |
return [word['token_str'].strip() for word in words] | |
def paraphrase(text): | |
paraphrases = paraphraser(text, num_beams=3, num_beam_groups=3, num_return_sequences=3, diversity_penalty=3.0, max_length=paraphraser.tokenizer.model_max_length) | |
return [paraphrase['generated_text'] for paraphrase in paraphrases] | |
# Build demo | |
with gr.Blocks() as demo: | |
gr.HTML("<center><h1>NLP Toolbox</h1></center>") | |
with gr.Tabs(): | |
with gr.TabItem("Summarization"): | |
text = gr.Textbox(label="text", placeholder="Enter text here...", lines=8) | |
with gr.Accordion("set summary length", open=False): | |
with gr.Row(): | |
with gr.Column(): | |
min_length = gr.Slider(label="minimum length", minimum=50, maximum=1000, step=10, value=100) | |
with gr.Column(): | |
max_length = gr.Slider(label="maximum length", minimum=50, maximum=1000, step=10, value=800) | |
output = gr.Textbox(label="summary", lines=3) | |
submit = gr.Button("Summarize") | |
submit.click(summarize, inputs=[text, min_length, max_length], outputs=output) | |
with gr.TabItem("Question Answering"): | |
context = gr.Textbox(label="context", placeholder="Enter text here...", lines=8) | |
question = gr.Textbox(label="question", placeholder="Enter question here...", lines=1) | |
output1 = gr.Textbox(label="answer no.1", lines=1) | |
output2 = gr.Textbox(label="answer no.2", lines=1) | |
output3 = gr.Textbox(label="answer no.3", lines=1) | |
submit = gr.Button("Answer") | |
submit.click(answer, inputs=[context, question], outputs=[output1, output2, output3]) | |
with gr.TabItem("Translation"): | |
text = gr.Textbox(label="text", placeholder="Enter text here...", lines=8) | |
with gr.Row(): | |
with gr.Column(): | |
src_lang = gr.Dropdown(languages, label="source language") | |
with gr.Column(): | |
tgt_lang = gr.Dropdown(languages, label="target language") | |
output = gr.Textbox(label="translation", lines=8) | |
submit = gr.Button("Translate") | |
submit.click(translate, inputs=[text, src_lang, tgt_lang], outputs=output) | |
with gr.TabItem("Fill-Mask"): | |
text = gr.Textbox(label="text", placeholder="Enter text here...", lines=6) | |
gr.Markdown("Please use the \"_\" symbol to represent the blank.") | |
to_fill = gr.Textbox(label="word to replace", placeholder="Enter word here...", lines=1) | |
gr.Markdown("If you are filling a blank, please leave the cell above blank.") | |
output1 = gr.Textbox(label="1st option", lines=1) | |
output2 = gr.Textbox(label="2nd option", lines=1) | |
output3 = gr.Textbox(label="3rd option", lines=1) | |
submit = gr.Button("Fill/Replace") | |
submit.click(fill, inputs=[text, to_fill], outputs=[output1, output2, output3]) | |
with gr.TabItem("Paraphrase"): | |
text = gr.Textbox(label="text", placeholder="Enter text here...", lines=8) | |
output1 = gr.Textbox(label="1st option", lines=8) | |
output2 = gr.Textbox(label="2nd option", lines=8) | |
output3 = gr.Textbox(label="3rd option", lines=8) | |
submit = gr.Button("Paraphrase") | |
submit.click(paraphrase, inputs=text, outputs=[output1, output2, output3]) | |
demo.launch(share=True) |