| 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() |
|
|