Use ScyllaDB to perform semantic search across movie plot descriptions. Hemos construido una aplicación de recomendación de películas para mostrar La aplicación muestra le ofrece una manera sencilla de experimentar la construcción de búsquedas semánticas de baja latencia y aplicaciones basadas en vectores con ScyllaDB. Nuevas capacidades de búsqueda vectorial de ScyllaDB Acceso anticipado al programa de búsqueda vectorial Acceso anticipado al programa de búsqueda vectorial En este post, mostraremos cómo realizar una búsqueda semántica en las descripciones de la trama de películas para encontrar películas por significado, no por palabras clave. Antes de sumergirse en la aplicación, aclaremos lo que entendemos por búsqueda semántica y proporcionemos algún contexto sobre las funciones de similitud. Funciones de semejanza vectorial La similitud entre dos vectores se puede calcular de varias maneras. , de (Producto interno) y ScyllaDB Vector Search soporta todas estas funciones. Similitud cosmológica Productos DOT L2 Para las incorporaciones de texto, la similitud cosina es la función de similitud más utilizada. Esto es porque, cuando trabajamos con texto, principalmente nos enfocamos en la dirección del vector, en lugar de su magnitud. La similitud cosina sólo considera el ángulo entre los vectores (es decir, la diferencia en direcciones) e ignora la magnitud (la longitud del vector). Por ejemplo, un documento corto (1 página) y un documento más largo (10 páginas) sobre el mismo tema todavía apuntarán en direcciones similares en el espacio vectorial aunque sean de diferentes longitudes. En la práctica, muchos modelos de embalaje (por ejemplo, ) producir vectores normalizados. vectores normalizados todos tienen la misma longitud (magnitud de 1). Para vectores normalizados, la similitud cosina y el producto de punto devuelven el mismo resultado. Esto es porque la similitud cosina divide el producto de punto por las magnitudes de los vectores, que son todos 1 cuando los vectores se normalizan. La función L2 produce valores de distancia diferentes en comparación con el producto de punto o la similitud cosina, pero el orden de las incorporaciones permanece el mismo (asumiendo vectores normalizados). Modelos abiertos Ahora que tiene una mejor comprensión de las funciones de semejanza semántica, explicemos cómo funciona la aplicación de recomendación. App visión general La aplicación permite a los usuarios introducir qué tipo de película quieren ver. Por ejemplo, si escribe “Fútbol americano”, la aplicación compara su entrada con la almacenados en la base de datos. El primer resultado es el mejor encuentro, seguido de otras recomendaciones similares. . plots of movies ScyllaDB Vector Search Puedes encontrar el , junto con las instrucciones de configuración y a Para el conjunto de datos, estamos reutilizando un conjunto de datos TMDB . El código fuente en GitHub Tutorial paso a paso Disponible en Kaggle Requisitos del proyecto Para ejecutar la aplicación, necesitas una cuenta de ScyllaDB Cloud y un clúster habilitado para la búsqueda de vectores. ! Siga las instrucciones para comenzar La aplicación depende de varios paquetes de Python: ScyllaDB Python driver – para conectar y consultar ScyllaDB. Transformadores de sentencia: para generar embeddings localmente sin requerir OpenAI u otras APIs pagadas. Streamlit – para la UI. Pydantic – para facilitar el trabajo con los resultados de la consulta. Por defecto, la aplicación utiliza el modelo para que cualquiera pueda ejecutarlo localmente sin requerimientos de computación pesados. , no se necesitan servicios comerciales o de pago para ejecutar el ejemplo. todo-MiniLM-L6-v2 ScyllaDB en la nube Configuración y conexión de bases de datos a archivos almacenan las credenciales ScyllaDB Cloud, incluyendo la dirección del host y los detalles de conexión. config.py Un nuevo ScyllaDB Gestiona lo siguiente: Módulo de ayuda Crear la conexión y la sesión Introducción y consulta de datos Proporcionar funciones de ayuda para interacciones de bases de datos limpias Esquema de base de datos El esquema está definido en un archivo, ejecutado al ejecutar el script de migración del proyecto. Incluye: schema.cql Creación de Keyspace (con un factor de replicación de 3) Definición de tabla para películas, almacenando campos como release_date, título, género y trama Índice de búsqueda de vectores CREATE KEYSPACE recommend WITH replication = {'class': 'NetworkTopologyStrategy', 'replication_factor': '3'}; CREATE TABLE recommend.movies ( id INT, release_date TIMESTAMP, title TEXT, tagline TEXT, genre TEXT, imdb_id TEXT, poster_url TEXT, plot TEXT, plot_embedding VECTOR<FLOAT, 384>, PRIMARY KEY (id) ) WITH cdc = {'enabled': 'true'}; CREATE INDEX IF NOT EXISTS ann_index ON recommend.movies(plot_embedding) USING 'vector_index' WITH OPTIONS = { 'similarity_function': 'DOT_PRODUCT' }; hospedado con el Página .cql GitHub El esquema destaca: 'plot' - texto, almacena la descripción de la película utilizada para la comparación de similitudes. 'plot_embedding' - vector, representación embedded de la trama, definida utilizando el tipo de datos vector con 384 dimensiones (cumpliendo con el modelo de Transformadores de sentencia). 'Clave primaria' - id como la clave de partición para búsquedas eficientes consultando por id CDC habilitado - requerido para la búsqueda vectorial de ScyllaDB. 'Índice de vector' - un índice de vecino más cercano aproximado (ANN) creado en la columna plot_embedding para permitir consultas de vectores eficientes. El objetivo de este esquema es permitir una búsqueda eficiente en las incorporaciones de la trama y almacenar información adicional junto a los vectores. Embajadores Una clase de Creador de incorporación gestiona la generación de incorporación de texto con Transformadores de sentencia. La función acepta cualquier entrada de texto y devuelve una lista de valores flotantes que puede insertar en la columna 'vector' de ScyllaDB. Recomendaciones implementadas con búsqueda vectorial La función principal de la aplicación es proporcionar recomendaciones de películas. Estas recomendaciones se implementan utilizando la búsqueda vectorial. que manejan recommender Tomando el texto de entrada Convertir el texto en embeddings Búsqueda de vectores from db.scylladb import ScyllaClient from embedding_creator import EmbeddingCreator from models import Movie class MovieRecommender: def __init__(self): self.scylla_client = ScyllaClient() self.embedding_creator = EmbeddingCreator("all-MiniLM-L6-v2") def similar_movies(self, user_query: str, top_k=5) -> list[Movie]: db_client = ScyllaClient() user_query_embedding = self.embedding_creator.create_embedding(user_query) db_query = f""" SELECT * FROM recommend.movies ORDER BY plot_embedding ANN OF %s LIMIT %s; """ values = [user_query_embedding, top_k] results = db_client.query_data(db_query, values) return [Movie(**row) for row in results] hospedado con el Recomendaciones.py GitHub Vamos a descomponer la búsqueda vectorial: SELECT * FROM recommend.movies ORDER BY plot_embedding ANN OF [0.1, 0.2, 0.3, …] LIMIT 5; La entrada del usuario se convierte primero en una incorporación, asegurando que estamos comparando la incorporación con la incorporación. Las líneas de la tabla se ordenan por similitud utilizando el operador ANN (ANN OF). Los resultados están limitados a cinco películas similares. La declaración SELECT recupera todas las columnas de la tabla. En la búsqueda de similitud, calculamos la distancia entre dos vectores. Cuanto más cerca están los vectores en el espacio vector, más similar es su contenido subyacente. O, en otras palabras, una distancia más pequeña sugiere una mayor similitud. Por lo tanto, un orden por orden resulta en orden ascendente, con distancias más pequeñas que aparecen primero. StreamLit UI La UI, definida en Conexión de todo. app.py Toma la consulta del usuario, la convierte en una incorporación y ejecuta una búsqueda vectorial. La interfaz de usuario muestra la mejor combinación y una lista de otras recomendaciones de películas similares. ¡Pruébalo usted mismo! Si desea comenzar a construir con ScyllaDB Vector Search, tiene varias opciones: Descubre el código fuente en GitHub Utilice README para configurar la aplicación en su ordenador Siga el tutorial para construir la aplicación desde cero Si tiene alguna pregunta, utilice el Y estaremos encantados de ayudar. Foro Acerca de Atila Tóth Es un defensor de desarrolladores en ScyllaDB. Escribe tutoriales y publicaciones de blog, habla en eventos, crea demostraciones y muestras de aplicaciones para ayudar a los desarrolladores a construir aplicaciones de alto rendimiento. Atila Toca