skypro1111 commited on
Commit
aaa05a3
·
1 Parent(s): 8cc032a
Files changed (1) hide show
  1. app.py +103 -0
app.py ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import os
3
+ import ctranslate2
4
+ from transformers import M2M100Tokenizer
5
+ import time
6
+
7
+ # Model settings
8
+ MODEL_PATH = os.getenv("MODEL_PATH", "skypro1111/m2m100-ukr-verbalization-ct2")
9
+ TOKENIZER_PATH = os.getenv("TOKENIZER_PATH", "skypro1111/m2m100-ukr-verbalization")
10
+
11
+ # Initialize translator and tokenizer globally
12
+ def init_model(model_path=MODEL_PATH, tokenizer_path=TOKENIZER_PATH):
13
+ print("\nInitializing CTranslate2 model and tokenizer...")
14
+
15
+ # Initialize translator with optimizations for CPU
16
+ translator = ctranslate2.Translator(
17
+ model_path,
18
+ device="cpu",
19
+ compute_type="int8", # Use INT8 quantization for CPU
20
+ intra_threads=4, # Adjust based on CPU cores available
21
+ )
22
+
23
+ # Load tokenizer
24
+ tokenizer = M2M100Tokenizer.from_pretrained(tokenizer_path)
25
+ tokenizer.src_lang = "uk"
26
+
27
+ return translator, tokenizer
28
+
29
+ translator, tokenizer = init_model()
30
+
31
+ def process_text(text: str):
32
+ """Process a single text input using the CTranslate2 model."""
33
+ start_time = time.time()
34
+
35
+ # Tokenize input
36
+ source = tokenizer.convert_ids_to_tokens(tokenizer.encode(text))
37
+ target_prefix = [tokenizer.lang_code_to_token["uk"]]
38
+
39
+ # Run inference
40
+ results = translator.translate_batch(
41
+ [source],
42
+ target_prefix=[target_prefix],
43
+ beam_size=1,
44
+ num_hypotheses=1,
45
+ use_vmap=True,
46
+ )
47
+
48
+ # Get target tokens and decode
49
+ target = results[0].hypotheses[0][1:] # Remove language token
50
+ output = tokenizer.decode(tokenizer.convert_tokens_to_ids(target))
51
+
52
+ inference_time = time.time() - start_time
53
+ return output, inference_time
54
+
55
+ def inference(text):
56
+ """Gradio interface function."""
57
+ output, inference_time = process_text(text)
58
+ return f"Вихідний текст: {output}\nЧас обробки: {inference_time:.3f} секунд"
59
+
60
+ # Define examples from inference_ct2.py
61
+ examples = [
62
+ ["Моя бабуся народилася 07.11.1919, у важкий післявоєнний час."],
63
+ ["Зустріч призначена на 15:30 12.05.2025 у конференц-залі №3."],
64
+ ["Телефонуйте нам за номером +380 (44) 123-45-67 або 0800 500 123."],
65
+ ["Температура повітря сьогодні становить +25°C, а тиск 750 мм.рт.ст."],
66
+ ["ТОВ «Мрія» було засновано 28/06/2022 з початковим капіталом 50 тис. грн."],
67
+ ["Швидкість вітру 15 м/с, видимість 10 км, вологість 65%."],
68
+ ["Потяг №743 Київ-Львів відправляється о 08:45 з платформи №2."],
69
+ ["Ціна на пальне зросла на 2,5 грн/л і становить 54,99 грн."],
70
+ ["Площа квартири 75,5 м², висота стелі 2,75 м."],
71
+ ["Відстань між містами становить 450 км або 280 миль."],
72
+ ["Станом на 7:00 15 квітня 2025 року температура повітря становить +18°C, вологість 60%."]
73
+ ]
74
+
75
+ # Define Gradio interface
76
+ interface = gr.Interface(
77
+ fn=inference,
78
+ inputs=gr.Textbox(
79
+ label="Введіть текст для вербалізації",
80
+ placeholder="Наприклад: Температура повітря сьогодні становить +25°C"
81
+ ),
82
+ outputs=gr.Textbox(label="Результат"),
83
+ examples=examples,
84
+ title="Вербалізація українського тексту (M2M100-CT2)",
85
+ description="""Модель для перетворення чисел, дат, одиниць вимірювання та інших символьних позначень
86
+ у їх текстовий запис українською мовою. Використовує оптимізовану CTranslate2 версію для швидкого інференсу.""",
87
+ article="""
88
+ ### Можливості моделі:
89
+ - Дати та час
90
+ - Телефонні номери
91
+ - Одиниці вимірювання
92
+ - Грошові суми
93
+ - Числові вирази
94
+
95
+ ### Технічні деталі:
96
+ - Базова модель: facebook/m2m100_418M
97
+ - Оптимізація: CTranslate2 з INT8 квантизацією
98
+ - Середній час інференсу: ~0.15-0.25 секунд на CPU
99
+ """
100
+ )
101
+
102
+ # Launch the interface
103
+ interface.launch()