File size: 1,967 Bytes
a9ccfae
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import torch
import utils
from utils import camel_tokenizer, spacy_tokenizer
from Vocabulary import Vocabulary
from models import Seq2seq_with_attention, Encoder, Decoder, Attention
import gradio as gr

device = 'cuda' if torch.cuda.is_available() else 'cpu'

en_tokenizer = spacy_tokenizer()
en_vocab = Vocabulary(en_tokenizer, max_freq=2, unk=True, sos=True, eos=True)
ar_tokenizer = camel_tokenizer()
ar_vocab = Vocabulary(ar_tokenizer, max_freq=2, unk=True, sos=True, eos=True)

vocabs = torch.load('./seq2seq_with_attention_states.pt', weights_only=False, map_location=device)
    
en_vocab.set_vocabulary(vocabs['en_vocabulary'])
ar_vocab.set_vocabulary(vocabs['ar_vocabulary'])

seq2seq_with_attention = torch.load("./seq2seq_with_attention.bin", map_location=device, weights_only=False)

def pre_processor(text):
    preprocessed = utils.preprocess_en(text)
    en_tokens = torch.tensor(en_vocab(preprocessed)).unsqueeze(0).to(device)
    return en_tokens

def post_processor(raw_output):
    return ar_vocab.tokens_to_text(raw_output[1:-1])

@torch.no_grad
def lunch(raw_input, maxtries=30):
    en_tokens = pre_processor(raw_input)
    output = seq2seq_with_attention.translate(en_tokens, maxtries)
    return post_processor(output)


custom_css ='.gr-button {background-color: #bf4b04; color: white;}'
with gr.Blocks(css=custom_css) as demo:
    with gr.Row():
        with gr.Column():
            input_text = gr.Textbox(label='English Sentence')
            gr.Examples(['how are you?',
                         'she is a good girl.',
                         'who is a better?'],
                        inputs=input_text, label="Examples: ")
        with gr.Column():
            output = gr.Textbox(label="Arabic Translation")
            
            start_btn = gr.Button(value='Submit', elem_classes=["gr-button"])
    start_btn.click(fn=lunch, inputs=input_text, outputs=output)

demo.launch()