File size: 4,808 Bytes
b13db2e
 
7cbe3b6
c79091a
 
328a923
c79091a
7c33ac4
c79091a
 
 
328a923
 
 
 
 
b13db2e
 
 
 
 
 
 
7cbe3b6
 
b13db2e
 
 
 
 
 
 
 
5ee913f
b13db2e
7cbe3b6
b13db2e
 
 
 
 
 
 
 
7cbe3b6
b13db2e
 
c79091a
328a923
b13db2e
6fd8f41
c79091a
b13db2e
b6ad8fb
959c711
b13db2e
 
 
 
 
 
 
 
 
 
7af5441
b13db2e
 
 
 
 
 
 
 
 
 
 
 
 
 
2dee8e6
b6ad8fb
 
 
a906b66
b6ad8fb
 
 
a906b66
b13db2e
c79091a
 
b13db2e
c79091a
843d693
b13db2e
 
d3f9d5e
b13db2e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
from transformers import pipeline
from multilingual_translation import text_to_text_generation
from utils import lang_ids
import gradio as gr

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:
        text_output = text_to_text_generation(
            prompt=prompt,
            model_id=lang_model_id,
            device='cuda:0',
            target_lang='en'
        )
            
        return text_output[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,
    max_length: str,
    num_return_sequences: int
):
    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=max_length, num_return_sequences=num_return_sequences, do_sample=True)
    output_dict = {}
    for i in range(num_return_sequences):
        output_dict[str(i+1)] = output[i]['generated_text']

    output_text = ""
    for i in range(num_return_sequences):
        output_text += f'{output_dict[str(i+1)]}\n\n'
    
    return en_prompt, output_text, output_text

examples = [
    ["COVID-19 is", biogpt_model_list[0], lang_model_list[1], "English"]
]

app = gr.Blocks()
with app:
    gr.Markdown("# **<p align='center'>Whisper + M2M100 + BioGPT: Generative Pre-trained Transformer for Biomedical Text Generation and Mining</p>**")
    gr.Markdown(
        """
        <p style='text-align: center'>
        Follow me for more! 
        <br> <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> | 
        </p>
        """
    )    
    with gr.Row():
        with gr.Column():
            with gr.Tab("Text"):
                input_text = gr.Textbox(lines=3, value="COVID-19 is", label="Text")
                input_text_button = gr.Button(value="Predict")
                input_biogpt_model =gr.Dropdown(choices=biogpt_model_list, value=biogpt_model_list[0], label='BioGpt Model')
                input_m2m100_model =gr.Dropdown(choices=lang_model_list,  value=lang_model_list[1], label='Language Model')
                input_base_lang = gr.Dropdown(lang_list, value="English", label="Base Language")
            
            with gr.Tab("Audio"):
                input_audio = gr.Microphone(label='Audio')
                input_audio_button = gr.Button(value="Predict")    

        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, input_biogpt_model, input_m2m100_model,input_base_lang], outputs=[prompt_text, output_text, translated_text], fn=biogpt_text, cache_examples=True)
    input_text_button.click(biogpt_text, inputs=[input_text, input_biogpt_model, input_m2m100_model,input_base_lang], outputs=[prompt_text, output_text, translated_text])
    input_audio_button.click(biogpt_audio, inputs=[input_audio, input_biogpt_model,input_m2m100_model,input_base_lang], outputs=[prompt_text, output_text, translated_text])
    
app.launch()