Use ScyllaDB to perform semantic search across movie plot descriptions. हमने प्रदर्शन करने के लिए एक नमूना फिल्म सिफारिश ऐप बनाई नमूना ऐप आपको ScyllaDB के साथ कम लाटेनस सेमेंटिक खोज और वेक्टर आधारित अनुप्रयोगों का निर्माण करने का अनुभव करने का एक सरल तरीका देता है। ScyllaDB की नई वेक्टर खोज क्षमताएं Vector Search Early Access Program से जुड़ें Vector Search Early Access Program से जुड़ें इस पोस्ट में, हम आपको दिखाएंगे कि फिल्मों को अर्थ के अनुसार फिल्मों को खोजने के लिए फिल्म प्लॉट वर्णनों में सेमींटिक खोज कैसे करें, कुंजी शब्दों के बजाय. इस उदाहरण में यह भी दिखाया गया है कि आप अपने मौजूदा ऐप्स में ScyllaDB वेक्टर खोज कैसे जोड़ सकते हैं. आवेदन में डुबकी से पहले, आइए स्पष्ट करें कि हम समानता खोज के लिए क्या मतलब है और समानता कार्यों के बारे में कुछ संदर्भ प्रदान करते हैं। Vector Similarity Functions के बारे में दो वेक्टरों के बीच समानता को कई तरीकों से गणना किया जा सकता है। , (आंतरिक उत्पाद), और ScyllaDB Vector Search इन सभी कार्यों का समर्थन करता है। समानताएं डॉट उत्पाद एल 2 पाठ इनपुट के लिए, कोसिन समानता सबसे अधिक बार उपयोग की जाने वाली समानता फ़ंक्शन है. यह इसलिए है क्योंकि, पाठ के साथ काम करते समय, हम मुख्य रूप से वेंक्टर की दिशा पर ध्यान केंद्रित करते हैं, इसके आकार के बजाय. कोसिन समानता केवल वेक्टरों के बीच के कोण (यानी, दिशाओं में अंतर) को ध्यान में रखती है और आकार (वेक्टर की लंबाई) को अनदेखा करती है। उदाहरण के लिए, एक छोटे से दस्तावेज़ (1 पृष्ठ) और एक लंबे दस्तावेज़ (10 पृष्ठ) एक ही विषय पर अभी भी वेक्टर अंतरिक्ष में समान दिशाओं को इंगित करेंगे, भले ही वे अलग-अलग लंबाई हैं। उदाहरण के लिए, कई विशिष्ट मॉडल (उदाहरण के लिए, ) सामान्य वेक्टरों का उत्पादन करते हैं. सामान्य वेक्टरों के सभी लंबाई एक ही हैं (मूर्ति 1)। सामान्य वेक्टरों के लिए, कोसिन समानता और टॉट उत्पाद एक ही परिणाम वापस करते हैं. ऐसा इसलिए है क्योंकि कोसिन समानता टॉट उत्पाद को वेक्टरों के आकारों द्वारा विभाजित करती है, जो सभी 1 होते हैं जब वेक्टरों को सामान्य किया जाता है. एल 2 कार्य टॉट उत्पाद या कोसिन समानता की तुलना में अलग-अलग दूरी मूल्यों का उत्पादन करता है, लेकिन इनपुटों की क्रमबद्धता एक ही रहती है (नियमित वेक्टरों को मान्य करते हुए)। ओपन मॉडल अब जब आपके पास सेमेंटिक समानता कार्यों का बेहतर समझ है, तो आइए समझाते हैं कि अनुशंसा ऐप कैसे काम करता है। App समीक्षा एप्लिकेशन उपयोगकर्ताओं को दर्ज करने की अनुमति देता है कि वे किस तरह की फिल्म देखना चाहते हैं. उदाहरण के लिए, यदि आप "अमेरिकी फुटबॉल" टाइप करते हैं, तो एप्लिकेशन आपके इनपुट को डेटाबेस में संग्रहीत है. पहला परिणाम सबसे अच्छा मैच है, इसके बाद अन्य समान सिफारिशें। . plots of movies ScyllaDB Vector Search आप इसे पा सकते हैं सिद्धांतों और निर्देशों के साथ-साथ, एक दस्तावेज़ में. डेटासेट के लिए, हम TMDB डेटासेट का पुनः उपयोग कर रहे हैं . GitHub पर स्रोत कोड चरण-दर-चरण ट्यूटोरियल Kaggle पर उपलब्ध परियोजना की आवश्यकताएं आवेदन चलाने के लिए, आपको एक ScyllaDB क्लाउड खाता और एक वेक्टर खोज सक्षम क्लस्टर की आवश्यकता है. अभी, आपको एक वेक्टर खोज सक्षम क्लस्टर बनाने के लिए एपीआई का उपयोग करने की आवश्यकता है. ! शुरू करने के लिए यहां निर्देशों का पालन करें आवेदन कुछ Python पैकेज पर निर्भर करता है: ScyllaDB Python ड्राइवर – ScyllaDB को कनेक्ट करने और पूछने के लिए। वाक्य ट्रांसफार्मर – OpenAI या अन्य भुगतान एपीआई की आवश्यकता के बिना स्थानीय रूप से एम्बेडमेंट उत्पन्न करने के लिए। स्ट्रेमलिट - यूआई के लिए। Pydantic - पूछताछ परिणामों के साथ काम करना आसान बनाने के लिए। डिफ़ॉल्ट रूप से, ऐप का उपयोग किसी को भी भारी कंप्यूटर आवश्यकताओं के बिना इसे स्थानीय रूप से चलाने में सक्षम हो सकता है। , उदाहरण चलाने के लिए कोई व्यावसायिक या भुगतान सेवाओं की आवश्यकता नहीं है। सभी मिनीLM-L6-v2 ScyllaDB क्लाउड कॉन्फ़िगरेशन और डेटाबेस कनेक्शन ए फ़ाइल ScyllaDB क्लाउड मान्यताओं को संग्रहीत करता है, जिसमें होस्ट पते और कनेक्शन विवरण शामिल हैं। config.py एक अलग ScyllaDB निम्नलिखित को संभालते हैं: सहायक मॉड्यूल कनेक्शन और सत्र का निर्माण डेटा दर्ज करना और पूछना साफ डेटाबेस बातचीत के लिए सहायक कार्य प्रदान करना डेटाबेस योजना यह योजना A में परिभाषित है फ़ाइल, परियोजना के प्रवास स्क्रिप्ट को चलाते समय संचालित किया गया है. इसमें शामिल हैं: schema.cql Keyspace निर्माण (एक पुनरावृत्ति कारक के साथ 3) फिल्मों के लिए तालिका परिभाषा, release_date, title, genre, and plot जैसे क्षेत्रों को संग्रहीत Vector Search Index के बारे में राय 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' }; मेहमानों के साथ सीसीटीवी गीता योजना को उजागर करें: 'ट्रॉट' - पाठ, समानता तुलना के लिए उपयोग की जाने वाली फिल्म विवरण को संग्रहीत करता है। 'plot_embedding' - वेक्टर, फ्लैट का एम्बेडिंग प्रतिनिधित्व, 384 आयामों के साथ वेक्टर डेटा प्रकार का उपयोग करके परिभाषित किया गया (सेटेंस ट्रांसफार्मर मॉडल से मेल खाता है)। 'प्रथम कुंजी' - id द्वारा पूछताछ करने वाले कुशल खोजों के लिए विभाजन कुंजी के रूप में id सीडीसी सक्षम – ScyllaDB वेक्टर खोज के लिए आवश्यक। 'वेक्टर सूचकांक' - एक अनुमानित निकटतम पड़ोसी (ANN) सूचकांक जो plot_embedding कॉलम पर बनाया गया है ताकि कुशल वेक्टर पूछताछ सक्षम हो सकें। इस योजना का लक्ष्य समारोह में एम्बेडमेंट्स पर कुशल खोज की अनुमति देना है और वेक्टरों के साथ अतिरिक्त जानकारी संग्रहीत करना है। एम्बेड्स एक Embedding Creator क्लास Sentence Transformers के साथ टेक्स्ट एम्बेडिंग जनरेटर को संभालता है. फ़ंक्शन किसी भी टेक्स्ट इनपुट को स्वीकार करता है और उन फ्लोट मानों की एक सूची वापस देता है जिन्हें आप ScyllaDB के 'वेक्टर' कॉलम में डाल सकते हैं। Vector Search के साथ अनुशंसाएं लागू करें ऐप का मुख्य कार्य फिल्म सिफारिशें प्रदान करना है. इन सिफारिशों को वेक्टर खोज का उपयोग करके लागू किया जाता है. इसलिए हम एक मॉड्यूल बनाते हैं जिसे कहा जाता है ये हाथ recommender इनपुट पाठ का उपयोग करें पाठ को embeddings में परिवर्तित करें Vector Search का उपयोग करें 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] मेहमानों के साथ अनुशंसा करें। गीता चलो वेक्टर खोज पूछताछ को तोड़ते हैं: SELECT * FROM recommend.movies ORDER BY plot_embedding ANN OF [0.1, 0.2, 0.3, …] LIMIT 5; उपयोगकर्ता इनपुट को पहले एक इनपुट में परिवर्तित किया जाता है, यह सुनिश्चित करने के लिए कि हम इनपुट और इनपुट की तुलना कर रहे हैं। तालिका में पंक्तियों को ANN ऑपरेटर (ANN OF) का उपयोग करके समानता द्वारा क्रमबद्ध किया जाता है। परिणाम पांच समान फिल्मों में सीमित हैं। SELECT अभिव्यक्ति तालिका से सभी स्तंभों को प्राप्त करती है। समानता खोज में, हम दो वेक्टरों के बीच की दूरी की गणना करते हैं। वेक्टर अंतरिक्ष में वेक्टरों के करीब जितना अधिक समान होता है, उतना ही उनके आधारभूत सामग्री। या, दूसरे शब्दों में, एक छोटा दूरी उच्च समानता का सुझाव देता है। स्ट्रीमिंग करें UI, परिभाषित में सब कुछ एक साथ जोड़ें। app.py यह उपयोगकर्ता की पूछताछ लेता है, इसे एक एम्बेडमेंट में परिवर्तित करता है, और एक वेक्टर खोज चलाता है। UI सर्वश्रेष्ठ मैच और अन्य समान फिल्म सिफारिशों की एक सूची दिखाता है। खुद की कोशिश करें! यदि आप ScyllaDB वेक्टर खोज के साथ निर्माण शुरू करना चाहते हैं, तो आपके पास कई विकल्प हैं: GitHub पर स्रोत कोड का पता लगाएं अपने कंप्यूटर पर ऐप सेट करने के लिए README का उपयोग करें एप्लिकेशन को शून्य से बनाने के लिए ट्यूटोरियल का पालन करें यदि आपके पास कोई प्रश्न हैं, तो इसका उपयोग करें और हम मदद करने के लिए खुश होंगे। फोरम Attila Tóth के बारे में वह ScyllaDB में एक डेवलपर्स वकील हैं. वह ट्यूटोरियल और ब्लॉग पोस्ट लिखते हैं, घटनाओं पर बोलते हैं, डेमो बनाते हैं और डेवलपर्स को उच्च प्रदर्शन एप्लिकेशन बनाने में मदद करते हैं। एथलीट टॉथ