kadirnar's picture
Update app.py
d2c2e0b
from transformers import pipeline
from multilingual_translation import text_to_text_generation
from utils import lang_ids
import gradio as gr
paper_id = "kadirnar/biogpt_paper"
biogpt_model_list = [
"microsoft/biogpt",
"microsoft/BioGPT-Large",
"microsoft/BioGPT-Large-PubMedQA"
]
lang_model_list = [
"facebook/m2m100_1.2B",
"facebook/m2m100_418M"
]
whisper_model_list = [
"openai/whisper-small",
"openai/whisper-medium",
"openai/whisper-tiny",
"openai/whisper-large"
]
lang_list = list(lang_ids.keys())
def whisper_demo(input_audio, model_id):
pipe = pipeline(task="automatic-speech-recognition",model=model_id, device='cuda:0')
pipe.model.config.forced_decoder_ids = pipe.tokenizer.get_decoder_prompt_ids(language='en', task="transcribe")
output_text = pipe(input_audio)['text']
return output_text
def translate_to_english(prompt, lang_model_id, base_lang):
if base_lang == "English":
return prompt
else:
output_text = text_to_text_generation(
prompt=prompt,
model_id=lang_model_id,
device='cuda:0',
target_lang='en'
)
return output_text[0]
def biogpt_text(
prompt: str,
biogpt_model_id: str,
lang_model_id: str,
base_lang: str,
):
en_prompt = translate_to_english(prompt, lang_model_id, base_lang)
generator = pipeline("text-generation", model=biogpt_model_id, device="cuda:0")
output = generator(en_prompt, max_length=250, num_return_sequences=1, do_sample=True)
output = output[0]['generated_text']
if base_lang == "English":
output_text = output
else:
output_text = text_to_text_generation(
prompt=output,
model_id=lang_model_id,
device='cuda:0',
target_lang=lang_ids[base_lang]
)
return en_prompt, output, output_text
def biogpt_audio(
input_audio: str,
biogpt_model_id: str,
whisper_model_id: str,
base_lang: str,
lang_model_id: str,
):
en_prompt = whisper_demo(input_audio=input_audio, model_id=whisper_model_id)
generator = pipeline("text-generation", model=biogpt_model_id, device="cuda:0")
output = generator(en_prompt, max_length=250, num_return_sequences=1, do_sample=True)
output = output[0]['generated_text']
if base_lang == "English":
output_text = output
else:
output_text = text_to_text_generation(
prompt=output,
model_id=lang_model_id,
device='cuda:0',
target_lang=lang_ids[base_lang]
)
return en_prompt, output, output_text
question_example = "Can 'high-risk' human papillomaviruses (HPVs) be detected in human breast milk? context: Using polymerase chain reaction techniques, we evaluated the presence of HPV infection in human breast milk collected from 21 HPV-positive and 11 HPV-negative mothers. Of the 32 studied human milk specimens, no 'high-risk' HPV 16, 18, 31, 33, 35, 39, 45, 51, 52, 56, 58 or 58 DNA was detected. answer: This preliminary case-control study indicates the absence of mucosal 'high-risk' HPV types in human breast milk."
examples = [
["COVID-19 is", biogpt_model_list[0], lang_model_list[1], "English"],
[question_example, biogpt_model_list[2], lang_model_list[1], "English"]
]
app = gr.Blocks()
with app:
gr.Markdown("# **<h4 align='center'>Whisper + M2M100 + BioGPT: Generative Pre-trained Transformer for Biomedical Text Generation and Mining<h4>**")
gr.Markdown(
"""
<h5 style='text-align: center'>
Follow me for more!
<a href='https://twitter.com/kadirnar_ai' target='_blank'>Twitter</a> | <a href='https://github.com/kadirnar' target='_blank'>Github</a> | <a href='https://www.linkedin.com/in/kadir-nar/' target='_blank'>Linkedin</a> |
</h5>
"""
)
with gr.Row():
with gr.Column():
with gr.Tab("Text"):
input_text = gr.Textbox(lines=3, value="COVID-19 is", label="Text")
text_biogpt = gr.Dropdown(choices=biogpt_model_list, value=biogpt_model_list[0], label='BioGpt Model')
text_m2m100 = gr.Dropdown(choices=lang_model_list, value=lang_model_list[1], label='Language Model')
text_lang = gr.Dropdown(lang_list, value="English", label="Base Language")
text_button = gr.Button(value="Predict")
with gr.Tab("Audio"):
input_audio = gr.Audio(source="microphone", type="filepath", label='Audio')
audio_biogpt = gr.Dropdown(choices=biogpt_model_list, value=biogpt_model_list[0], label='BioGpt Model')
audio_whisper = gr.Dropdown(choices=whisper_model_list, value=whisper_model_list[0], label='Audio Model')
audio_lang = gr.Dropdown(lang_list, value="English", label="Base Language")
audio_m2m100 = gr.Dropdown(choices=lang_model_list, value=lang_model_list[1], label='Language Model')
audio_button = gr.Button(value="Predict")
with gr.Tab("Output"):
with gr.Column():
prompt_text = gr.Textbox(lines=3, label="Prompt")
output_text = gr.Textbox(lines=3, label="BioGpt Text")
translated_text = gr.Textbox(lines=3,label="Translated Text")
gr.Examples(examples, inputs=[input_text, text_biogpt, text_m2m100,text_lang], outputs=[prompt_text, output_text, translated_text], fn=biogpt_text, cache_examples=False)
text_button.click(biogpt_text, inputs=[input_text, text_biogpt, text_m2m100 ,text_lang], outputs=[prompt_text, output_text, translated_text])
audio_button.click(biogpt_audio, inputs=[input_audio, audio_biogpt, audio_whisper, audio_lang, audio_m2m100], outputs=[prompt_text, output_text, translated_text])
app.launch()