Spaces:
Sleeping
Sleeping
File size: 5,207 Bytes
aaa05a3 2409ded aaa05a3 2409ded aaa05a3 2409ded aaa05a3 2631e2b aaa05a3 2631e2b aaa05a3 2631e2b aaa05a3 2631e2b |
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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
import gradio as gr
import os
import ctranslate2
from transformers import M2M100Tokenizer
from huggingface_hub import snapshot_download
import time
# Model settings
MODEL_PATH = os.getenv("MODEL_PATH", "skypro1111/m2m100-ukr-verbalization-ct2")
TOKENIZER_PATH = os.getenv("TOKENIZER_PATH", "skypro1111/m2m100-ukr-verbalization")
# Initialize translator and tokenizer globally
def init_model(model_path=MODEL_PATH, tokenizer_path=TOKENIZER_PATH):
print("\nInitializing CTranslate2 model and tokenizer...")
# Download the model from HuggingFace Hub
local_model_path = snapshot_download(
repo_id=model_path,
allow_patterns=["*.bin", "*.json", "tokenizer.json", "vocab.json"],
)
# Initialize translator with optimizations for CPU
translator = ctranslate2.Translator(
local_model_path,
device="cpu",
compute_type="int8", # Use INT8 quantization for CPU
intra_threads=4, # Adjust based on CPU cores available
)
# Load tokenizer
tokenizer = M2M100Tokenizer.from_pretrained(tokenizer_path)
tokenizer.src_lang = "uk"
return translator, tokenizer
translator, tokenizer = init_model()
def process_text(text: str):
"""Process a single text input using the CTranslate2 model."""
start_time = time.time()
# Tokenize input
source = tokenizer.convert_ids_to_tokens(tokenizer.encode(text))
target_prefix = [tokenizer.lang_code_to_token["uk"]]
# Run inference
results = translator.translate_batch(
[source],
target_prefix=[target_prefix],
beam_size=1,
num_hypotheses=1,
use_vmap=True,
)
# Get target tokens and decode
target = results[0].hypotheses[0][1:] # Remove language token
output = tokenizer.decode(tokenizer.convert_tokens_to_ids(target))
inference_time = time.time() - start_time
return output, inference_time
def inference(text):
"""Gradio interface function."""
output, inference_time = process_text(text)
return output, f"{inference_time:.3f} секунд"
# Define examples from inference_ct2.py
examples = [
["Моя бабуся народилася 07.11.1919, у важкий післявоєнний час."],
["Зустріч призначена на 15:30 12.05.2025 у конференц-залі №3."],
["Телефонуйте нам за номером +380 (44) 123-45-67 або 0800 500 123."],
["Температура повітря сьогодні становить +25°C, а тиск 750 мм.рт.ст."],
["ТОВ «Мрія» було засновано 28/06/2022 з початковим капіталом 50 тис. грн."],
["Швидкість вітру 15 м/с, видимість 10 км, вологість 65%."],
["Потяг №743 Київ-Львів відправляється о 08:45 з платформи №2."],
["Ціна на пальне зросла на 2,5 грн/л і становить 54,99 грн."],
["Площа квартири 75,5 м², висота стелі 2,75 м."],
["Відстань між містами становить 450 км або 280 миль."],
["Станом на 7:00 15 квітня 2025 року температура повітря становить +18°C, вологість 60%."]
]
# Define Gradio interface
with gr.Blocks() as interface:
gr.Markdown("# Вербалізація українського тексту (M2M100-CT2)")
gr.Markdown("""Модель для перетворення чисел, дат, одиниць вимірювання та інших символьних позначень
у їх текстовий запис українською мовою. Використовує оптимізовану CTranslate2 версію для швидкого інференсу.""")
with gr.Row():
with gr.Column():
input_text = gr.Textbox(
label="Введіть текст для вербалізації",
placeholder="Наприклад: Температура повітря сьогодні становить +25°C"
)
submit_btn = gr.Button("Вербалізувати")
gr.Examples(
examples=examples,
inputs=input_text,
)
with gr.Column():
output_text = gr.Textbox(label="Вербалізований текст")
inference_time = gr.Textbox(label="Час обробки")
gr.Markdown("""
### Можливості моделі:
- Дати та час
- Телефонні номери
- Одиниці вимірювання
- Грошові суми
- Числові вирази
### Технічні деталі:
- Базова модель: facebook/m2m100_418M
- Оптимізація: CTranslate2 з INT8 квантизацією
""")
submit_btn.click(
fn=inference,
inputs=input_text,
outputs=[output_text, inference_time],
)
# Launch the interface
interface.launch(share=False) |