¿Alguna vez buscó "viejas comedias en blanco y negro" y lo bombardearon con una mezcla de películas de acción modernas? Frustrante, ¿verdad? Ese es el desafío de los motores de búsqueda tradicionales: a menudo tienen dificultades para comprender los matices de nuestras consultas, dejándonos vadeando entre resultados irrelevantes.
Aquí es donde entra en juego el filtrado inteligente. Es un elemento revolucionario que utiliza metadatos y búsqueda vectorial para ofrecer resultados de búsqueda que realmente coincidan con su intención. Imagínese encontrar exactamente las comedias clásicas que anhela, sin complicaciones.
Analizaremos qué es el filtrado inteligente, cómo funciona y por qué es esencial para crear mejores experiencias de búsqueda. Descubramos la magia detrás de esta tecnología y exploremos cómo puede revolucionar la forma de buscar.
La búsqueda vectorial es una poderosa herramienta que ayuda a las computadoras a comprender el significado detrás de los datos, no solo las palabras mismas. En lugar de hacer coincidir palabras clave, se centra en los conceptos y relaciones subyacentes. Imagínese buscar "perro" y obtener resultados que incluyan "cachorro", "canino" e incluso imágenes de perros. ¡Esa es la magia de la búsqueda vectorial!
¿Cómo funciona? Bueno, transforma datos en representaciones matemáticas llamadas vectores. Estos vectores son como coordenadas en un mapa y los puntos de datos similares están más cerca entre sí en este espacio vectorial. Cuando busca algo, el sistema encuentra los vectores más cercanos a su consulta, brindándole resultados semánticamente similares.
Si bien la búsqueda vectorial es fantástica para comprender el contexto, a veces se queda corta cuando se trata de tareas de filtrado simples. Por ejemplo, encontrar todas las películas estrenadas antes del año 2000 requiere un filtrado preciso, no sólo una comprensión semántica. Aquí es donde entra en juego el filtrado inteligente para complementar la búsqueda vectorial.
Si bien el vector nos acerca a la comprensión del verdadero significado de las consultas, todavía existe una brecha entre lo que los usuarios quieren y lo que ofrecen los motores de búsqueda. Las consultas de búsqueda complejas como "las primeras películas de comedia anteriores al 2000" aún pueden ser un desafío. La búsqueda semántica puede comprender los conceptos de "comedia" y "películas", pero puede tener dificultades con los detalles de "primeras" y "antes de 2000".
Aquí es donde los resultados empiezan a ser confusos. Es posible que obtengamos una mezcla de comedias antiguas y nuevas, o incluso dramas que se incluyeron por error. Para satisfacer verdaderamente a los usuarios, necesitamos una forma de refinar estos resultados de búsqueda y hacerlos más precisos. Ahí es donde entran en juego los prefiltros.
Smart Filtering es la solución a este desafío. Es una técnica que utiliza los metadatos de un conjunto de datos para crear filtros específicos, refinando los resultados de búsqueda y haciéndolos más precisos y eficientes. Al analizar la información sobre sus datos, como su estructura, contenido y atributos, Smart Filtering puede identificar criterios relevantes para filtrar su búsqueda.
Imagínese buscar "películas de comedia estrenadas antes del año 2000". El filtrado inteligente utilizaría metadatos como género, fecha de lanzamiento y potencialmente incluso palabras clave de la trama para crear un filtro que solo incluya películas que coincidan con esos criterios. De esta manera, obtendrá una lista de exactamente lo que desea, sin ruido irrelevante.
Profundicemos en cómo funciona el filtrado inteligente en la siguiente sección.
El filtrado inteligente es un proceso de varios pasos que implica extraer información de sus datos, analizarla y crear filtros específicos según sus necesidades. Vamos a desglosarlo:
Extracción de metadatos: el primer paso es recopilar información relevante sobre sus datos. Esto incluye detalles como:
Generación de prefiltros: una vez que tenga los metadatos, puede comenzar a crear prefiltros. Estas son condiciones específicas que los datos deben cumplir para ser incluidos en los resultados de la búsqueda. Por ejemplo, si buscas películas de comedia estrenadas antes del año 2000, puedes crear filtros previos para:
Integración con Búsqueda de vectores: el paso final es combinar estos prefiltros con su búsqueda de vectores. Esto garantiza que la búsqueda vectorial solo considere puntos de datos que coincidan con sus criterios predefinidos.
Si sigue estos pasos, el filtrado inteligente mejora significativamente la precisión y eficiencia de los resultados de su búsqueda.
Extracción de metadatos: con el fin de simplificar las cosas, utilizaremos datos de muestra y definiremos manualmente los metadatos. Consulte: get_docs_metadata en prepare_test_data.py
.
Generación de Prefiltros: Generaremos los prefiltros en dos pasos.
Paso 1: filtro basado en metadatos
Este paso incluye generar un filtro basado en los metadatos. Pasaremos la consulta del usuario y los metadatos a un LLM y generaremos el filtro de metadatos.
Usaremos el query_constructor que se inicializa con este DEFAULT_SCHEMA_PROMPT.
Nota: actualice el mensaje y algunos ejemplos de tomas según su caso de uso.
Por ejemplo: si los metadatos tienen genre
y release_date
, y el usuario solicita películas de género action
lanzadas antes de 2020, entonces podemos usar LLM para generar un filtro como el siguiente:
{"$and": [{"genre": {"$in": ["anime"]}}, {"release_date": {"$lt": "2024-01-01"}}]}
Paso 2: filtrado basado en el tiempo
En este paso, manejaremos los casos en los que el usuario solicita el tipo de información latest
, most recent
y earliest
. Tendremos que consultar los datos reales para obtener esta información. Usaremos el Agente LLM en este paso para consultar la colección mongodb usando la herramienta ejecutora: QueryExecutorMongoDBTool. Estamos generando el filtro basado en tiempo en generate_time_based_filter. También usaremos el pre_filter generado en el primer paso en $match
en la etapa de agregación. Por ejemplo: si el usuario desea la última película, el agente LLM ejecutará la siguiente consulta de agregación utilizando la herramienta ejecutora:
Invoking: `mongo_db_executor` with `{'pipeline': '[{"$match": {"$and": [{"genre": {"$in": ["anime"]}}, {"release_date": {"$lt": "2024-01-01"}}]}}, { "$sort": { "release_date": -1 } }, { "$limit": 1 }, { "$project": { "release_date": 1 } }]'}`
Integración con Vector Search: el prefiltro generado se utilizará con el recuperador MongoDBAtlasVectorSearch:
retriever = vectorstore.as_retriever(
search_kwargs={ ' pre_filter ' : pre_filter}
)
Crear un nuevo entorno de Python
python3 -m venv env
source env/bin/activate
Instalar los requisitos
pip3 install -r requirements.txt
Establecer las configuraciones en config.yaml
database_name: < your database name >
collection_name: < your collection name >
vector_index_name: default
embedding_model_dimensions: 1536
similarity: cosine
model: gpt-4o
embedding_model: text-embedding-ada-002
Establecer las variables de entorno
export OPEN_AI_API_KEY = " "
export OPEN_API_BASE = " "
# headers are optional
export OPEN_API_DEFAULT_HEADERS= " "
export MONGO_URI= " "
Inicialice la colección mongodb con datos de muestra. Este comando indexará algunos datos de muestra y también creará un índice de búsqueda vectorial en la colección.
python3 rag/initialize_mongo_collection.py
python3 rag/main.py --queries < list of queries in json format >
python3 rag/main.py --queries ' ["I want to watch an anime genre movie", "Recommend a thriller or action movie release after Feb, 2010", "Recommend an anime movie released before 2023 with the latest release date"] '
Prefiltros generados:
Consulta de entrada: "I want to watch an anime genre movie", "Recommend a thriller or action movie release after Feb, 2010"
Producción:
Consulta de entrada: "Recommend a thriller or action movie release after Feb, 2010"
Producción:
Consulta de entrada: "Recommend an anime movie released before 2023 with the latest release date"
Producción:
El filtrado inteligente aporta una serie de ventajas, lo que lo convierte en una herramienta valiosa para mejorar las experiencias de búsqueda:
Precisión de búsqueda mejorada: al apuntar con precisión a los datos que coinciden con su consulta, el filtrado inteligente aumenta drásticamente la probabilidad de encontrar resultados relevantes. No más navegar entre información irrelevante.
Resultados de búsqueda más rápidos: dado que el filtrado inteligente reduce el alcance de la búsqueda, el sistema puede procesar la información de manera más eficiente, lo que genera resultados más rápidos.
Experiencia de usuario mejorada: cuando los usuarios encuentran lo que buscan rápida y fácilmente, se genera una mayor satisfacción y una mejor experiencia general.
Versatilidad: el filtrado inteligente se puede aplicar a varios dominios, desde búsquedas de productos de comercio electrónico hasta recomendaciones de contenido, lo que la convierte en una herramienta versátil.
Al aprovechar los metadatos y crear filtros previos específicos, Smart Filtering le permite ofrecer resultados de búsqueda que realmente cumplan con las expectativas de los usuarios.
Smart Filtering es una poderosa herramienta que transforma las experiencias al cerrar la brecha entre la intención del usuario y los resultados. Al aprovechar el poder de los metadatos y la búsqueda vectorial, ofrece resultados de búsqueda más precisos, relevantes y eficientes.
Ya sea que esté creando una plataforma de comercio electrónico, un sistema de recomendación de contenido o cualquier aplicación que dependa de una búsqueda efectiva, la incorporación del filtrado inteligente puede mejorar significativamente la satisfacción del usuario y generar mejores resultados.
Al comprender los fundamentos del filtrado inteligente, estará preparado para explorar su potencial e implementarlo en sus proyectos. Entonces, ¿por qué esperar? ¡Empiece a aprovechar el poder del filtrado inteligente hoy y revolucione su juego de búsqueda!
Inspirado en el Self Query Retriever de LangChain.