import os from glob import glob from sentence_transformers import SentenceTransformer import gradio as gr import numpy as np import faiss # Cargar el modelo de Sentence Transformers model_name = "quora-distilbert-multilingual" model = SentenceTransformer(model_name) # Función para vectorizar un texto def vectorize_text(text): return model.encode([text])[0] # Obtener una lista de todos los archivos *.index en el directorio archivos_indices = glob("*.index") # Cargar todos los índices de Faiss indices = [] nombres_archivos = [] # Lista para almacenar los nombres de los archivos for archivo_index in archivos_indices: index = faiss.read_index(archivo_index) indices.append(index) nombres_archivos.append(os.path.splitext(archivo_index)[0]) # Obtener el nombre sin la extensión # Función para predecir la similitud con cada índice def predecir_similitud(texto): resultados = [] umbral_similitud = -11 # Vectorizar el texto (usando la misma función que antes) texto_vectorizado = vectorize_text(texto) for i, (index, nombre_archivo) in enumerate(zip(indices, nombres_archivos)): # Buscar similitud con Faiss texto_vectorizado_np = np.array([texto_vectorizado], dtype=np.float32) D, I = index.search(texto_vectorizado_np, 1) # Buscar el vector más cercano similitud = 1 - D[0][0] # Calcular similitud de coseno # Comparar con el umbral y proporcionar el resultado if similitud >= umbral_similitud: resultado = f"Argumento {nombre_archivo} (similitud: {similitud:.2f})" else: resultado = f"No se detectó Argumento {nombre_archivo} (similitud: {similitud:.2f})" resultados.append(resultado) return '\n'.join(resultados) # Crear la interfaz de Gradio con un botón de "Predecir" iface = gr.Interface( fn=predecir_similitud, inputs=gr.inputs.Textbox(default="Ingrese su texto aquí"), outputs=gr.outputs.Textbox(label="Resultados"), # Usar multiple=True live=False, title="Argumentos", description="Ingrese un texto y haga clic en 'Submit' para detectar Argumentos." ) # Ejecutar la interfaz iface.launch()