|
import os |
|
from glob import glob |
|
from sentence_transformers import SentenceTransformer |
|
import gradio as gr |
|
import numpy as np |
|
import faiss |
|
|
|
|
|
model_name = "quora-distilbert-multilingual" |
|
model = SentenceTransformer(model_name) |
|
|
|
|
|
def vectorize_text(text): |
|
return model.encode([text])[0] |
|
|
|
|
|
archivos_indices = glob("*.index") |
|
|
|
|
|
indices = [] |
|
nombres_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]) |
|
|
|
|
|
def predecir_similitud(texto): |
|
resultados = [] |
|
umbral_similitud = 0.65 |
|
|
|
|
|
texto_vectorizado = vectorize_text(texto) |
|
|
|
for i, (index, nombre_archivo) in enumerate(zip(indices, nombres_archivos)): |
|
|
|
texto_vectorizado_np = np.array([texto_vectorizado], dtype=np.float32) |
|
D, I = index.search(texto_vectorizado_np, 1) |
|
similitud = 1 - D[0][0] |
|
|
|
|
|
if similitud >= umbral_similitud: |
|
resultado = (nombre_archivo, similitud) |
|
resultados.append(resultado) |
|
|
|
|
|
resultados_ordenados = sorted(resultados, key=lambda x: x[1], reverse=True) |
|
|
|
|
|
if resultados_ordenados: |
|
resultados_texto = '\n'.join([f"{nombre} (similitud:{sim:.2f})" for nombre, sim in resultados_ordenados]) |
|
else: |
|
resultados_texto = "No se han encontrado resultados" |
|
|
|
return resultados_texto |
|
|
|
|
|
iface = gr.Interface( |
|
fn=predecir_similitud, |
|
inputs=gr.inputs.Textbox(default=""), |
|
outputs=gr.outputs.Textbox(label="Argumentos"), |
|
live=False, |
|
title="Argumentos", |
|
description="Ingrese un texto y haga clic en 'Submit' para detectar Argumentos." |
|
) |
|
|
|
|
|
iface.launch() |
|
|