import gradio as gr from sentence_transformers import SentenceTransformer from sklearn.metrics.pairwise import cosine_similarity import numpy as np # 1. Загрузка модели # Используем rubert-tiny для скорости и поддержки русского языка # Модель загружается только один раз при запуске сервиса # Новая (более легкая и мульти-языковая): MODEL_NAME = 'cointegrated/rubert-tiny-sentiment-balanced' model = SentenceTransformer(MODEL_NAME, device='cpu') def calculate_similarity(text_new: str, text_old: str) -> float: """ Вычисляет косинусное сходство между двумя текстами. """ if not text_new or not text_old: return 0.0 # 2. Получение эмбеддингов embeddings = model.encode([text_new, text_old], convert_to_tensor=True) # 3. Вычисление косинусного сходства similarity_score = cosine_similarity(embeddings.cpu())[0][1] return float(similarity_score) # 4. Создание интерфейса Gradio # Gradio автоматически создает API-эндпоинт для этой функции iface = gr.Interface( fn=calculate_similarity, inputs=[ gr.Textbox(lines=5, label="Новый текст (Текст 1)"), gr.Textbox(lines=5, label="Старый текст (Текст 2)"), ], outputs=gr.Number(label="Косинусное сходство (от 0 до 1)"), title="Сервис проверки семантического сходства текста", description="Использует Sentence-BERT для сравнения двух русскоязычных текстов по смыслу." ) # Запуск с указанием пути к API без fn_index iface.launch(server_name="0.0.0.0", server_port=7860, show_error=True)