DonWare commited on
Commit
5132e53
·
verified ·
1 Parent(s): d7fdbbd

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +37 -9
app.py CHANGED
@@ -1,5 +1,9 @@
1
  import gradio as gr
2
  from transformers import MarianMTModel, MarianTokenizer
 
 
 
 
3
 
4
  # Diccionario de modelos multilenguaje OPUS-MT (origen -> destino)
5
  modelos = {
@@ -10,35 +14,59 @@ modelos = {
10
  ("fr", "en"): "Helsinki-NLP/opus-mt-fr-en",
11
  }
12
 
13
- # Función para cargar modelo y tokenizer según idioma
 
 
 
14
  def cargar_modelo(origen, destino):
15
  key = (origen, destino)
 
 
16
  model_name = modelos.get(key, "Helsinki-NLP/opus-mt-mul-en")
17
  tokenizer = MarianTokenizer.from_pretrained(model_name)
18
  model = MarianMTModel.from_pretrained(model_name)
 
19
  return tokenizer, model
20
 
21
- # Función de traducción
22
- def traducir(texto, idioma_origen, idioma_destino):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
  tokenizer, model = cargar_modelo(idioma_origen, idioma_destino)
24
- inputs = tokenizer(texto, return_tensors="pt", padding=True)
25
- translated = model.generate(**inputs)
26
- return tokenizer.decode(translated[0], skip_special_tokens=True)
 
 
 
 
27
 
28
  # Lista de idiomas disponibles
29
  idiomas = ["mul", "en", "es", "fr"]
30
 
31
  # Crear interfaz Gradio
32
  iface = gr.Interface(
33
- fn=traducir,
34
  inputs=[
35
- gr.Textbox(label="Texto a traducir", lines=5, placeholder="Escribe aquí..."),
36
  gr.Dropdown(idiomas, label="Idioma origen", value="mul"),
37
  gr.Dropdown(idiomas, label="Idioma destino", value="en")
38
  ],
39
  outputs=gr.Textbox(label="Traducción"),
40
  title="Traductor Multilenguaje OPUS-MT",
41
- description="Traduce textos entre múltiples idiomas usando OPUS-MT en CPU."
42
  )
43
 
44
  iface.launch()
 
1
  import gradio as gr
2
  from transformers import MarianMTModel, MarianTokenizer
3
+ import torch
4
+
5
+ # Limitar threads de CPU para optimizar
6
+ torch.set_num_threads(4)
7
 
8
  # Diccionario de modelos multilenguaje OPUS-MT (origen -> destino)
9
  modelos = {
 
14
  ("fr", "en"): "Helsinki-NLP/opus-mt-fr-en",
15
  }
16
 
17
+ # Cache de modelos cargados
18
+ modelo_cache = {}
19
+
20
+ # Función para cargar modelo y tokenizer según idioma (caché)
21
  def cargar_modelo(origen, destino):
22
  key = (origen, destino)
23
+ if key in modelo_cache:
24
+ return modelo_cache[key]
25
  model_name = modelos.get(key, "Helsinki-NLP/opus-mt-mul-en")
26
  tokenizer = MarianTokenizer.from_pretrained(model_name)
27
  model = MarianMTModel.from_pretrained(model_name)
28
+ modelo_cache[key] = (tokenizer, model)
29
  return tokenizer, model
30
 
31
+ # Dividir texto en fragmentos ≤512 tokens
32
+ def dividir_texto(texto, max_len=512):
33
+ palabras = texto.split()
34
+ fragmentos = []
35
+ fragmento = []
36
+ for palabra in palabras:
37
+ fragmento.append(palabra)
38
+ if len(fragmento) >= max_len:
39
+ fragmentos.append(" ".join(fragmento))
40
+ fragmento = []
41
+ if fragmento:
42
+ fragmentos.append(" ".join(fragmento))
43
+ return fragmentos
44
+
45
+ # Función de traducción optimizada para textos largos
46
+ def traducir_fragmentos(texto, idioma_origen, idioma_destino):
47
  tokenizer, model = cargar_modelo(idioma_origen, idioma_destino)
48
+ fragmentos = dividir_texto(texto, max_len=512)
49
+ traduccion = []
50
+ for frag in fragmentos:
51
+ inputs = tokenizer(frag, return_tensors="pt", padding=True, truncation=True)
52
+ translated = model.generate(**inputs, max_length=512)
53
+ traduccion.append(tokenizer.decode(translated[0], skip_special_tokens=True))
54
+ return " ".join(traduccion)
55
 
56
  # Lista de idiomas disponibles
57
  idiomas = ["mul", "en", "es", "fr"]
58
 
59
  # Crear interfaz Gradio
60
  iface = gr.Interface(
61
+ fn=traducir_fragmentos,
62
  inputs=[
63
+ gr.Textbox(label="Texto a traducir", lines=8, placeholder="Escribe aquí..."),
64
  gr.Dropdown(idiomas, label="Idioma origen", value="mul"),
65
  gr.Dropdown(idiomas, label="Idioma destino", value="en")
66
  ],
67
  outputs=gr.Textbox(label="Traducción"),
68
  title="Traductor Multilenguaje OPUS-MT",
69
+ description="Traduce textos largos entre múltiples idiomas usando OPUS-MT en CPU. Optimizado para uso comercial."
70
  )
71
 
72
  iface.launch()