Use ScyllaDB to perform semantic search across movie plot descriptions. Nous avons construit une application de recommandation de films pour montrer L'application d'échantillon vous donne un moyen simple d'expérimenter la construction de recherches sémantiques à faible latence et d'applications vectorielles avec ScyllaDB. Les nouvelles fonctionnalités de recherche vectorielle de ScyllaDB Rejoignez le programme d'accès précoce Vector Search Rejoignez le programme d'accès précoce Vector Search Dans cet article, nous allons vous montrer comment effectuer une recherche sémantique à travers les descriptions de l'intrigue pour trouver des films par sens, pas par mots clés. Avant de plonger dans l’application, clarifions ce que nous entendons par recherche sémantique et fournissons un certain contexte sur les fonctions de similitude. La fonction de ressemblance vectorielle La ressemblance entre deux vecteurs peut être calculée de plusieurs façons. , à (produit intérieur) et ScyllaDB Vector Search prend en charge toutes ces fonctions. La similitude coquine Produit dot L2 Pour les intégrations de texte, la similitude cosine est la fonction de similitude la plus souvent utilisée. C'est parce que, lorsque nous travaillons avec le texte, nous nous concentrons principalement sur la direction du vecteur, plutôt que sur sa magnitude. Par exemple, un document court (1 page) et un document plus long (10 pages) sur le même sujet pointeront toujours dans des directions similaires dans l'espace vectoriel même s'ils ont des longueurs différentes. Dans la pratique, de nombreux modèles d'emballage (par exemple, ) produisent des vecteurs normalisés. Les vecteurs normalisés ont tous la même longueur (magnitude de 1). Pour les vecteurs normalisés, la similitude cosine et le produit point retournent le même résultat. C'est parce que la similitude cosine divise le produit point par les magnitudes des vecteurs, qui sont tous 1 lorsque les vecteurs sont normalisés. La fonction L2 produit des valeurs de distance différentes par rapport au produit point ou à la similitude cosine, mais l'ordre des intégrations reste le même (en supposant que les vecteurs normalisés). Modèles ouverts Maintenant que vous avez une meilleure compréhension des fonctions de similitude sémantique, expliquons comment fonctionne l’application de recommandation. App Vue d'ensemble L'application permet aux utilisateurs d'entrer quel type de film ils veulent regarder. Par exemple, si vous tapez « Football américain », l'application compare votre entrée avec le stocké dans la base de données. Le premier résultat est la meilleure correspondance, suivi d'autres recommandations similaires. . plots of movies ScyllaDB Vector Search Vous pouvez trouver le En plus des instructions d'installation et de dans la documentation. Pour le groupe de données, nous réutilisons un groupe de données TMDB . Le code source sur GitHub Tutoriel étape par étape Disponible sur Kaggle Exigences du projet Pour exécuter l'application, vous avez besoin d'un compte ScyllaDB Cloud et d'un cluster activé pour la recherche vectorielle. ! Suivez les instructions pour commencer L’application dépend de quelques paquets Python : ScyllaDB Python driver – pour la connexion et la requête de ScyllaDB. Transformateurs de phrases – pour générer des embeddings localement sans nécessiter OpenAI ou d’autres API payantes. Streamlit – pour l’UI. Pydantic – pour faciliter le travail avec les résultats de la requête. Par défaut, l’application utilise le modèle afin que n'importe qui puisse l'exécuter localement sans exigences de calcul lourdes. , aucun service commercial ou payant n'est nécessaire pour exécuter l'exemple. tout-MiniLM-L6 v2 ScyllaDB Cloud Configuration et connexion de base de données à Les fichiers stockent les identifiants ScyllaDB Cloud, y compris l'adresse de l'hôte et les détails de connexion. config.py Un scyllaDB séparé Il traite le suivant : Module d’aide Créer la connexion et la session Insérer et interroger des données Fournir des fonctions d'aide pour des interactions de base de données propres Système de base de données Le schéma est défini dans un fichier, exécuté lors de l'exécution du script de migration du projet. Il comprend: schema.cql Création d’espace clé (avec un facteur de réplication de 3) Définition de table pour les films, en stockant des champs tels que release_date, titre, genre et parcelle Index de recherche vectoriel 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' }; Accompagné par ❤ Éléments. cql Github Le schéma souligne : 'plot' - texte, enregistre la description du film utilisée pour la comparaison des similitudes. 'plot_embedding' - vecteur, représentation intégrée de l'intrigue, définie en utilisant le type de données vectoriel avec 384 dimensions (coïncidant avec le modèle Transformers de sentence). 'Primaire key' - id comme clé de partition pour les recherches efficaces interrogées par id CDC activé – requis pour la recherche vectorielle de ScyllaDB. 'Index vectoriel' - un index Approximate Nearest Neighbor (ANN) créé sur la colonne plot_embedding pour permettre des requêtes vectorielles efficaces. L’objectif de ce schéma est de permettre une recherche efficace sur les intégrations de parcelles et de stocker des informations supplémentaires aux côtés des vecteurs. Les embeddings Une classe de Créateur d’intégration gère la génération d’intégration de texte avec Transformers de phrase. La fonction accepte toute entrée de texte et renvoie une liste de valeurs flottantes que vous pouvez insérer dans la colonne « vecteur » de ScyllaDB. Recommandations réalisées avec la recherche vectorielle La fonction principale de l'application est de fournir des recommandations de films. Ces recommandations sont mises en œuvre à l'aide de la recherche vectorielle. Ces mains recommender Utiliser le texte d’entrée Transformer le texte en embeddings Recherche vectorielle 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] Accompagné par ❤ Recommandé par PY Github Décomposons la requête de recherche vectorielle : SELECT * FROM recommend.movies ORDER BY plot_embedding ANN OF [0.1, 0.2, 0.3, …] LIMIT 5; L’entrée de l’utilisateur est d’abord convertie en intégration, ce qui nous permet de comparer l’incorporation à l’incorporation. Les lignes dans le tableau sont ordonnées par similitude en utilisant l'opérateur ANN (ANN OF). Les résultats sont limités à cinq films similaires. La déclaration SELECT récupère toutes les colonnes de la table. Dans la recherche de la similitude, nous calculons la distance entre deux vecteurs. Plus les vecteurs sont proches dans l'espace vectoriel, plus leur contenu sous-jacent est semblable. Ou, en d'autres termes, une distance plus petite suggère une similitude plus élevée. StreamLite UI L’UIC, définie dans Reliez tout ensemble. app.py Il prend la requête de l'utilisateur, la convertit en un embedding et exécute une recherche vectorielle. L'interface utilisateur affiche la meilleure correspondance et une liste d'autres recommandations de films similaires. Essayez vous même ! Si vous voulez commencer la construction avec ScyllaDB Vector Search, vous avez plusieurs options: Télécharger le code source sur GitHub Utilisez README pour configurer l'application sur votre ordinateur Suivez le tutoriel pour construire l'application de zéro Si vous avez des questions, utilisez Et nous serons heureux d’aider. Le forum À propos d'Attila Tóth Il écrit des tutoriels et des articles de blog, parle à des événements, crée des démos et des applications d'échantillons pour aider les développeurs à construire des applications hautes performances. Attila Toth