BryanBradfo commited on
Commit
a7915c4
·
1 Parent(s): ac59720
Files changed (1) hide show
  1. app.py +115 -198
app.py CHANGED
@@ -1,212 +1,129 @@
1
  import gradio as gr
2
- from transformers import T5ForConditionalGeneration, T5Tokenizer
3
 
4
- # Initialize T5 model and tokenizer
5
- tokenizer = T5Tokenizer.from_pretrained("t5-small")
6
- model = T5ForConditionalGeneration.from_pretrained("t5-small")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
 
8
- # Translation function using T5
9
- def translate_t5(text, source_code, target_code):
10
- # Format the input as expected by T5
11
- task_prefix = f"translate {source_code} to {target_code}: "
12
- input_text = task_prefix + text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
 
14
- # Tokenize and generate translation
15
- inputs = tokenizer(input_text, return_tensors="pt", padding=True)
16
 
17
- # Adjust generation parameters to get better translations
18
- output_sequences = model.generate(
19
- input_ids=inputs["input_ids"],
20
- attention_mask=inputs["attention_mask"],
21
- max_length=150, # Limit the length but allow reasonable translations
22
- min_length=5, # Prevent very short outputs
23
- length_penalty=1.0, # Slightly prefer longer sequences
24
- num_beams=4, # Use beam search for better results
25
- early_stopping=True,
26
- no_repeat_ngram_size=2 # Avoid repeating the same phrases
27
- )
28
-
29
- # Decode the output
30
- translation = tokenizer.decode(output_sequences[0], skip_special_tokens=True)
31
- return translation
32
 
33
- # Example texts
34
- example_text = [
35
- "I went to the supermarket yesterday.",
36
- "The weather is beautiful today.",
37
- "Helen is a good swimmer."
38
- ]
 
 
39
 
40
  # Create Gradio interface
41
  with gr.Blocks() as demo:
42
- gr.Markdown("# Multilingual Translation App (T5-small)")
43
 
44
- with gr.Tabs():
45
- # English to French tab
46
- with gr.TabItem("English to French"):
47
- with gr.Row():
48
- with gr.Column():
49
- english_fr = gr.Textbox(label="English Text")
50
- translate_to_fr = gr.Button(value="Translate To French")
51
- with gr.Column():
52
- french = gr.Textbox(label="French Text")
53
- translate_to_fr.click(
54
- lambda text: translate_t5(text, "English", "French"),
55
- inputs=english_fr,
56
- outputs=french
57
- )
58
- # Also translate when Enter key is pressed
59
- english_fr.submit(
60
- lambda text: translate_t5(text, "English", "French"),
61
- inputs=english_fr,
62
- outputs=french
63
- )
64
- gr.Examples(examples=example_text, inputs=[english_fr])
65
-
66
- # English to Japanese tab
67
- with gr.TabItem("English to Japanese"):
68
- with gr.Row():
69
- with gr.Column():
70
- english_ja = gr.Textbox(label="English Text")
71
- translate_to_ja = gr.Button(value="Translate To Japanese")
72
- with gr.Column():
73
- japanese = gr.Textbox(label="Japanese Text")
74
- translate_to_ja.click(
75
- lambda text: translate_t5(text, "English", "Japanese"),
76
- inputs=english_ja,
77
- outputs=japanese
78
- )
79
- english_ja.submit(
80
- lambda text: translate_t5(text, "English", "Japanese"),
81
- inputs=english_ja,
82
- outputs=japanese
83
- )
84
- gr.Examples(examples=example_text, inputs=[english_ja])
85
-
86
- # English to Spanish tab
87
- with gr.TabItem("English to Spanish"):
88
- with gr.Row():
89
- with gr.Column():
90
- english_es = gr.Textbox(label="English Text")
91
- translate_to_es = gr.Button(value="Translate To Spanish")
92
- with gr.Column():
93
- spanish = gr.Textbox(label="Spanish Text")
94
- translate_to_es.click(
95
- lambda text: translate_t5(text, "English", "Spanish"),
96
- inputs=english_es,
97
- outputs=spanish
98
- )
99
- english_es.submit(
100
- lambda text: translate_t5(text, "English", "Spanish"),
101
- inputs=english_es,
102
- outputs=spanish
103
- )
104
- gr.Examples(examples=example_text, inputs=[english_es])
105
-
106
- # English to Mandarin/Chinese tab
107
- with gr.TabItem("English to Mandarin"):
108
- with gr.Row():
109
- with gr.Column():
110
- english_zh = gr.Textbox(label="English Text")
111
- translate_to_zh = gr.Button(value="Translate To Mandarin")
112
- with gr.Column():
113
- chinese = gr.Textbox(label="Mandarin Text")
114
- translate_to_zh.click(
115
- lambda text: translate_t5(text, "English", "Chinese"),
116
- inputs=english_zh,
117
- outputs=chinese
118
- )
119
- english_zh.submit(
120
- lambda text: translate_t5(text, "English", "Chinese"),
121
- inputs=english_zh,
122
- outputs=chinese
123
- )
124
- gr.Examples(examples=example_text, inputs=[english_zh])
125
-
126
- # Add the reverse direction tabs
127
- # French to English
128
- with gr.TabItem("French to English"):
129
- with gr.Row():
130
- with gr.Column():
131
- french_en = gr.Textbox(label="French Text")
132
- translate_fr_to_en = gr.Button(value="Translate To English")
133
- with gr.Column():
134
- english_from_fr = gr.Textbox(label="English Text")
135
- translate_fr_to_en.click(
136
- lambda text: translate_t5(text, "French", "English"),
137
- inputs=french_en,
138
- outputs=english_from_fr
139
- )
140
- french_en.submit(
141
- lambda text: translate_t5(text, "French", "English"),
142
- inputs=french_en,
143
- outputs=english_from_fr
144
- )
145
- fr_examples = ["Je suis allé au supermarché hier.", "Le temps est magnifique aujourd'hui."]
146
- gr.Examples(examples=fr_examples, inputs=[french_en])
147
-
148
- # Japanese to English
149
- with gr.TabItem("Japanese to English"):
150
- with gr.Row():
151
- with gr.Column():
152
- japanese_en = gr.Textbox(label="Japanese Text")
153
- translate_ja_to_en = gr.Button(value="Translate To English")
154
- with gr.Column():
155
- english_from_ja = gr.Textbox(label="English Text")
156
- translate_ja_to_en.click(
157
- lambda text: translate_t5(text, "Japanese", "English"),
158
- inputs=japanese_en,
159
- outputs=english_from_ja
160
- )
161
- japanese_en.submit(
162
- lambda text: translate_t5(text, "Japanese", "English"),
163
- inputs=japanese_en,
164
- outputs=english_from_ja
165
- )
166
- ja_examples = ["昨日スーパーマーケットに行きました。", "今日の天気は素晴らしいです。"]
167
- gr.Examples(examples=ja_examples, inputs=[japanese_en])
168
-
169
- # Spanish to English
170
- with gr.TabItem("Spanish to English"):
171
- with gr.Row():
172
- with gr.Column():
173
- spanish_en = gr.Textbox(label="Spanish Text")
174
- translate_es_to_en = gr.Button(value="Translate To English")
175
- with gr.Column():
176
- english_from_es = gr.Textbox(label="English Text")
177
- translate_es_to_en.click(
178
- lambda text: translate_t5(text, "Spanish", "English"),
179
- inputs=spanish_en,
180
- outputs=english_from_es
181
- )
182
- spanish_en.submit(
183
- lambda text: translate_t5(text, "Spanish", "English"),
184
- inputs=spanish_en,
185
- outputs=english_from_es
186
- )
187
- es_examples = ["Fui al supermercado ayer.", "El clima está hermoso hoy."]
188
- gr.Examples(examples=es_examples, inputs=[spanish_en])
189
 
190
- # Mandarin/Chinese to English
191
- with gr.TabItem("Mandarin to English"):
192
- with gr.Row():
193
- with gr.Column():
194
- chinese_en = gr.Textbox(label="Mandarin Text")
195
- translate_zh_to_en = gr.Button(value="Translate To English")
196
- with gr.Column():
197
- english_from_zh = gr.Textbox(label="English Text")
198
- translate_zh_to_en.click(
199
- lambda text: translate_t5(text, "Chinese", "English"),
200
- inputs=chinese_en,
201
- outputs=english_from_zh
202
- )
203
- chinese_en.submit(
204
- lambda text: translate_t5(text, "Chinese", "English"),
205
- inputs=chinese_en,
206
- outputs=english_from_zh
207
- )
208
- zh_examples = ["我昨天去了超市。", "今天天气很好。"]
209
- gr.Examples(examples=zh_examples, inputs=[chinese_en])
 
 
 
 
 
 
 
 
210
 
211
  if __name__ == "__main__":
212
  demo.launch()
 
1
  import gradio as gr
2
+ from transformers import pipeline
3
 
4
+ # Initialize translation pipelines
5
+ en_to_fr = pipeline("translation", model="Helsinki-NLP/opus-mt-en-fr")
6
+ fr_to_en = pipeline("translation", model="Helsinki-NLP/opus-mt-fr-en")
7
+ en_to_ja = pipeline("translation", model="Helsinki-NLP/opus-mt-en-jap")
8
+ ja_to_en = pipeline("translation", model="Helsinki-NLP/opus-mt-jap-en")
9
+ en_to_es = pipeline("translation", model="Helsinki-NLP/opus-mt-en-es")
10
+ es_to_en = pipeline("translation", model="Helsinki-NLP/opus-mt-es-en")
11
+ en_to_zh = pipeline("translation", model="Helsinki-NLP/opus-mt-en-zh")
12
+ zh_to_en = pipeline("translation", model="Helsinki-NLP/opus-mt-zh-en")
13
+ fr_to_es = pipeline("translation", model="Helsinki-NLP/opus-mt-fr-es")
14
+ es_to_fr = pipeline("translation", model="Helsinki-NLP/opus-mt-es-fr")
15
+ fr_to_zh = pipeline("translation", model="Helsinki-NLP/opus-mt-fr-zh")
16
+ zh_to_fr = pipeline("translation", model="Helsinki-NLP/opus-mt-zh-fr")
17
+ fr_to_ja = pipeline("translation", model="Helsinki-NLP/opus-mt-fr-jap")
18
+ ja_to_fr = pipeline("translation", model="Helsinki-NLP/opus-mt-jap-fr")
19
+ es_to_ja = pipeline("translation", model="Helsinki-NLP/opus-mt-es-jap")
20
+ ja_to_es = pipeline("translation", model="Helsinki-NLP/opus-mt-jap-es")
21
+ es_to_zh = pipeline("translation", model="Helsinki-NLP/opus-mt-es-zh")
22
+ zh_to_es = pipeline("translation", model="Helsinki-NLP/opus-mt-zh-es")
23
+ ja_to_zh = pipeline("translation", model="Helsinki-NLP/opus-mt-jap-zh")
24
+ zh_to_ja = pipeline("translation", model="Helsinki-NLP/opus-mt-zh-jap")
25
 
26
+ # Dictionary to map language pairs to translation pipelines
27
+ translators = {
28
+ "English-French": en_to_fr,
29
+ "French-English": fr_to_en,
30
+ "English-Japanese": en_to_ja,
31
+ "Japanese-English": ja_to_en,
32
+ "English-Spanish": en_to_es,
33
+ "Spanish-English": es_to_en,
34
+ "English-Mandarin": en_to_zh,
35
+ "Mandarin-English": zh_to_en,
36
+ "French-Spanish": fr_to_es,
37
+ "Spanish-French": es_to_fr,
38
+ "French-Mandarin": fr_to_zh,
39
+ "Mandarin-French": zh_to_fr,
40
+ "French-Japanese": fr_to_ja,
41
+ "Japanese-French": ja_to_fr,
42
+ "Spanish-Japanese": es_to_ja,
43
+ "Japanese-Spanish": ja_to_es,
44
+ "Spanish-Mandarin": es_to_zh,
45
+ "Mandarin-Spanish": zh_to_es,
46
+ "Japanese-Mandarin": ja_to_zh,
47
+ "Mandarin-Japanese": zh_to_ja
48
+ }
49
+
50
+ def get_translator(source_lang, target_lang):
51
+ """Get the appropriate translation pipeline based on source and target languages."""
52
+ key = f"{source_lang}-{target_lang}"
53
+ return translators.get(key)
54
+
55
+ def translate(text, source_lang, target_lang):
56
+ """Translate text from source language to target language."""
57
+ if not text:
58
+ return ""
59
 
60
+ if source_lang == target_lang:
61
+ return text
62
 
63
+ translator = get_translator(source_lang, target_lang)
64
+ if translator:
65
+ return translator(text)[0]["translation_text"]
66
+ else:
67
+ return f"Translation from {source_lang} to {target_lang} is not supported."
 
 
 
 
 
 
 
 
 
 
68
 
69
+ # Example texts in different languages
70
+ examples = {
71
+ "English": ["Hello, how are you today?", "I would like to visit Japan someday."],
72
+ "French": ["Bonjour, comment allez-vous aujourd'hui?", "J'aimerais visiter le Japon un jour."],
73
+ "Japanese": ["こんにちは、今日はお元気ですか?", "いつか日本を訪れたいです。"],
74
+ "Spanish": ["Hola, ¿cómo estás hoy?", "Me gustaría visitar Japón algún día."],
75
+ "Mandarin": ["你好,今天好吗?", "我希望有一天能去日本。"]
76
+ }
77
 
78
  # Create Gradio interface
79
  with gr.Blocks() as demo:
80
+ gr.Markdown("# Multilingual Translation")
81
 
82
+ with gr.Row():
83
+ source_lang = gr.Dropdown(
84
+ choices=["English", "French", "Japanese", "Spanish", "Mandarin"],
85
+ label="Source Language",
86
+ value="English"
87
+ )
88
+ target_lang = gr.Dropdown(
89
+ choices=["English", "French", "Japanese", "Spanish", "Mandarin"],
90
+ label="Target Language",
91
+ value="French"
92
+ )
93
+
94
+ with gr.Row():
95
+ with gr.Column():
96
+ source_text = gr.Textbox(label="Source Text", lines=5)
97
+ translate_btn = gr.Button(value="Translate")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
 
99
+ with gr.Column():
100
+ target_text = gr.Textbox(label="Translation Result", lines=5)
101
+
102
+ # Set up examples based on source language
103
+ example_list = gr.Examples(
104
+ examples=examples["English"],
105
+ inputs=source_text
106
+ )
107
+
108
+ # Update examples when source language changes
109
+ def update_examples(lang):
110
+ return gr.Examples.update(examples=examples.get(lang, examples["English"]))
111
+
112
+ source_lang.change(update_examples, inputs=source_lang, outputs=example_list)
113
+
114
+ # Set up translation function
115
+ translate_btn.click(
116
+ translate,
117
+ inputs=[source_text, source_lang, target_lang],
118
+ outputs=target_text
119
+ )
120
+
121
+ # Also translate when Enter is pressed in the source text box
122
+ source_text.submit(
123
+ translate,
124
+ inputs=[source_text, source_lang, target_lang],
125
+ outputs=target_text
126
+ )
127
 
128
  if __name__ == "__main__":
129
  demo.launch()