7-Sky commited on
Commit
cda14dc
·
verified ·
1 Parent(s): cce1f6c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +79 -39
app.py CHANGED
@@ -26,17 +26,44 @@ try:
26
  except ImportError:
27
  print("Устанавливаем необходимые пакеты...")
28
  install_packages()
29
- from transformers import MarianMTModel, MarianTokenizer
30
- import gradio as gr
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
 
32
  # Настройки модели
33
  MODEL_NAME = "7-Sky/skyopus-pol-rus"
34
  DEFAULT_TRANSLATIONS = 3
35
  MAX_TRANSLATIONS = 5
36
 
37
- # Загрузка модели
38
- tokenizer = MarianTokenizer.from_pretrained(MODEL_NAME)
39
- model = MarianMTModel.from_pretrained(MODEL_NAME)
 
 
 
 
 
 
 
 
40
 
41
  def translate_text(source_text, num_translations):
42
  if not source_text.strip():
@@ -44,53 +71,59 @@ def translate_text(source_text, num_translations):
44
 
45
  try:
46
  num_translations = min(int(num_translations), MAX_TRANSLATIONS)
47
- text_with_token = ">>rus<< " + source_text
48
 
49
- inputs = tokenizer(text_with_token, return_tensors="pt", padding=True)
50
-
51
- translated_tokens = model.generate(
52
  **inputs,
53
  num_return_sequences=num_translations,
54
  num_beams=num_translations,
55
  max_length=512
56
  )
57
 
58
- # Декодируем и удаляем >>rus<< из каждого варианта перевода
59
- translations = []
60
- for tokens in translated_tokens:
61
- decoded = tokenizer.decode(tokens, skip_special_tokens=True)
62
- # Удаляем >>rus<< если он есть в начале строки
63
- if decoded.startswith(">>rus<<"):
64
- decoded = decoded[7:].strip()
65
- translations.append(decoded)
66
-
67
- return translations
68
  except Exception as e:
69
- return [f"Произошла ошибка: {str(e)}"]
70
 
71
- # Создание интерфейса
72
- with gr.Blocks(title="Польско-русский переводчик") as app:
73
- gr.Markdown("## Польско-русский переводчик с несколькими вариантами перевода")
74
- gr.Markdown(f"Модель: {MODEL_NAME}")
75
 
76
  with gr.Row():
77
  with gr.Column():
78
- input_text = gr.Textbox(label="Польский текст", placeholder="Введите текст на польском...")
79
- num_translations = gr.Slider(1, MAX_TRANSLATIONS, value=DEFAULT_TRANSLATIONS, step=1,
80
- label="Количество вариантов перевода")
81
- translate_btn = gr.Button("Перевести")
 
 
 
 
 
 
 
 
 
82
 
83
  with gr.Column():
84
- output_text = gr.Textbox(label="Основной вариант перевода", interactive=False)
85
- variants = gr.Textbox(label="Все варианты перевода", lines=5, interactive=False)
 
 
 
 
 
 
 
 
86
 
87
  def update_outputs(text, num):
88
  translations = translate_text(text, num)
89
- if not translations:
90
- return "", ""
91
- main_translation = translations[0]
92
- all_variants = "\n\n".join(f"{i+1}. {t}" for i, t in enumerate(translations))
93
- return main_translation, all_variants
94
 
95
  translate_btn.click(
96
  fn=update_outputs,
@@ -98,14 +131,21 @@ with gr.Blocks(title="Польско-русский переводчик") as ap
98
  outputs=[output_text, variants]
99
  )
100
 
101
- examples = gr.Examples(
102
  examples=[
103
  ["Powiedzieć a zrobić to nie to samo.", 3],
104
  ["O jego propozycji nawet nie warto mówić.", 3],
105
- ["Nie od razu Rzym zbudowano.", 2]
 
106
  ],
107
- inputs=[input_text, num_translations]
 
108
  )
109
 
110
  if __name__ == "__main__":
111
- app.launch()
 
 
 
 
 
 
26
  except ImportError:
27
  print("Устанавливаем необходимые пакеты...")
28
  install_packages()
29
+
30
+
31
+ import subprocess
32
+ import sys
33
+ import warnings
34
+ from transformers import MarianMTModel, MarianTokenizer
35
+ import gradio as gr
36
+
37
+ # Подавление предупреждений
38
+ warnings.filterwarnings("ignore", message="Recommended: pip install sacremoses.")
39
+
40
+ # Установка недостающих пакетов
41
+ def install_packages():
42
+ required = ['sentencepiece', 'sacremoses', 'torch', 'gradio']
43
+ for package in required:
44
+ try:
45
+ __import__(package.split('==')[0])
46
+ except ImportError:
47
+ subprocess.check_call([sys.executable, "-m", "pip", "install", package])
48
+
49
+ install_packages()
50
 
51
  # Настройки модели
52
  MODEL_NAME = "7-Sky/skyopus-pol-rus"
53
  DEFAULT_TRANSLATIONS = 3
54
  MAX_TRANSLATIONS = 5
55
 
56
+ # Загрузка модели с обработкой ошибок
57
+ try:
58
+ tokenizer = MarianTokenizer.from_pretrained(MODEL_NAME)
59
+ model = MarianMTModel.from_pretrained(MODEL_NAME)
60
+ except Exception as e:
61
+ print(f"Ошибка загрузки модели: {e}")
62
+ sys.exit(1)
63
+
64
+ def clean_translation(text):
65
+ """Очистка перевода от языковых тегов и лишних пробелов"""
66
+ return text.replace(">>rus<<", "").strip()
67
 
68
  def translate_text(source_text, num_translations):
69
  if not source_text.strip():
 
71
 
72
  try:
73
  num_translations = min(int(num_translations), MAX_TRANSLATIONS)
74
+ inputs = tokenizer(">>rus<< " + source_text, return_tensors="pt", padding=True)
75
 
76
+ outputs = model.generate(
 
 
77
  **inputs,
78
  num_return_sequences=num_translations,
79
  num_beams=num_translations,
80
  max_length=512
81
  )
82
 
83
+ return [clean_translation(tokenizer.decode(tokens, skip_special_tokens=True))
84
+ for tokens in outputs]
 
 
 
 
 
 
 
 
85
  except Exception as e:
86
+ return [f"Ошибка перевода: {str(e)}"]
87
 
88
+ # Интерфейс Gradio
89
+ with gr.Blocks(title="Польско-русский переводчик", theme="soft") as app:
90
+ gr.Markdown("## 🎯 Точный перевод с польского на русский")
91
+ gr.Markdown(f"**Модель:** `{MODEL_NAME}`")
92
 
93
  with gr.Row():
94
  with gr.Column():
95
+ input_text = gr.Textbox(
96
+ label="Польский текст",
97
+ placeholder="Введите текст для перевода...",
98
+ lines=3
99
+ )
100
+ num_translations = gr.Slider(
101
+ minimum=1,
102
+ maximum=MAX_TRANSLATIONS,
103
+ value=DEFAULT_TRANSLATIONS,
104
+ step=1,
105
+ label="Количество вариантов"
106
+ )
107
+ translate_btn = gr.Button("Перевести", variant="primary")
108
 
109
  with gr.Column():
110
+ output_text = gr.Textbox(
111
+ label="Лучш��й вариант",
112
+ interactive=False,
113
+ lines=3
114
+ )
115
+ variants = gr.Textbox(
116
+ label=f"Все варианты (макс. {MAX_TRANSLATIONS})",
117
+ interactive=False,
118
+ lines=5
119
+ )
120
 
121
  def update_outputs(text, num):
122
  translations = translate_text(text, num)
123
+ return (
124
+ translations[0] if translations else "",
125
+ "\n\n".join(f"{i+1}. {t}" for i, t in enumerate(translations)) if translations else ""
126
+ )
 
127
 
128
  translate_btn.click(
129
  fn=update_outputs,
 
131
  outputs=[output_text, variants]
132
  )
133
 
134
+ gr.Examples(
135
  examples=[
136
  ["Powiedzieć a zrobić to nie to samo.", 3],
137
  ["O jego propozycji nawet nie warto mówić.", 3],
138
+ ["Nie od razu Rzym zbudowano.", 2],
139
+ ["To jest przykładowe zdanie do tłumaczenia.", 1]
140
  ],
141
+ inputs=[input_text, num_translations],
142
+ label="Примеры для теста"
143
  )
144
 
145
  if __name__ == "__main__":
146
+ app.launch(
147
+ server_name="0.0.0.0",
148
+ server_port=7860,
149
+ share=False,
150
+ show_error=True
151
+ )