Creación de buscador semántico con Gradio y Sentence Transformer
Clase 25 de 26 • Curso de Embeddings y Bases de Datos Vectoriales para NLP
Resumen
¿Cómo crear una función de búsqueda semántica con Pinecone y Sentence Transformers?
Explorar la creación de un buscador semántico en un dataset de películas es un proyecto fascinante que explota al máximo el potencial de los embeddings y vectores en el manejo de bases de datos. Con Pinecone y Sentence Transformer, se puede construir una herramienta poderosa que entiende la búsqueda a nivel semántico, casi como lo haría un humano. Vamos a desglosar cómo estructurar una función de búsqueda paso a paso.
¿Cómo estructurar la función principal?
Para definir la función de búsqueda en nuestro proyecto, llamada search
, se necesitan varios parámetros esenciales que van más allá de una simple búsqueda por palabras clave:
- Query: El término de búsqueda que representa nuestra consulta.
- Género: Permite filtrar los resultados por género específico.
- Rating: Define un umbral de puntuación mínima para las películas.
- Top K: Número de resultados que queremos recuperar.
Aquí se detalla cómo podemos comenzar con la función en Python:
def search(query, genre=None, rating=0, top_k=5):
query_vector = model.encode(query).tolist()
filter_rating = rating if rating else 0
if genre:
conditions = {
"genres": {"$in": [genre]},
"rating": {"$gte": filter_rating}
}
else:
conditions = {"rating": {"$gte": filter_rating}}
responses = index.query(vector=query_vector, top_k=top_k, include_metadata=True, filter=conditions)
response_data = []
for response in responses['matches']:
response_data.append({
"title": response['metadata']['movie_title'],
"overview": response['metadata']['overview'],
"director": response['metadata']['director'],
"genres": response['metadata']['genres'],
"year": response['metadata']['year'],
"rating": response['metadata']['rating'],
"score": response['score'],
})
return pd.DataFrame(response_data)
¿Cómo integrar filtros en la búsqueda?
A menudo no todos los filtros son obligatorios. Por ejemplo, el rating puede ser opcional, marcándose como cero si no se usa, lo que permitiría recuperar todos los resultados sin este filtro en particular. Este tipo de flexibilidad es crucial para una herramienta de búsqueda más manipulable.
¿Cómo configurar una interfaz gráfica con Gradio?
Gradio simplifica la conexión entre modelos de machine learning y su representación gráfica, permitiendo que estas funciones se ejecuten en una interfaz amigable. Añadir Gradio al proyecto eleva la accesibilidad y usabilidad:
- Implementación: Se define la función
search
como base de la interfaz. - Parámetros de entrada: Campos como la caja de texto para la
query
, lista desplegable paragéneros
, unslider
para elrating
y un campo numérico para losresultados
. - Salida: Se muestra como un DataFrame con resultados filtrados y organizados.
import gradio as gr
iface = gr.Interface(
fn=search,
inputs=[
gr.Textbox(lines=5, label="Escribe aquí tu consulta"),
gr.Dropdown(choices=["Action", "Comedy", ...], label="Género de la película"),
gr.Slider(minimum=1, maximum=10, default=5, label="Puntuación mínima"),
gr.Slider(minimum=1, maximum=10, default=5, label="Número de resultados")
],
outputs=gr.Dataframe(label="Resultados"),
title="Buscador de películas",
description="Encuentra películas basadas en su búsqueda semántica"
)
iface.launch()
¿Cómo se utilizan embeddings para una búsqueda más precisa?
El uso de embeddings permite una búsqueda basada en similitud coseno entre el vector de la query
y los datos almacenados en Pinecone. Esto significa que no se requiere una coincidencia exacta de las palabras, sino que se enfoca en el significado contextual, mejorando significativamente la relevancia de los resultados obtenidos.
¿Qué ventajas ofrece la búsqueda semántica?
A diferencia de las búsquedas de texto tradicionales, la búsqueda semántica:
- Ofrece resultados más relevantes y relacionados conceptualmente.
- Se ajusta al lenguaje natural similar al humano.
- Permite expandir las capacidades de búsqueda en proyectos empresariales o personales.
¡Descubrir y aplicar estas herramientas tecnológicas es solo el comienzo! Continúa experimentando y refinando tus habilidades, y comparte tus experiencias y proyectos para inspirar y ser inspirado en la comunidad académica y profesional.