paint-brush
सिरी का उपयोग करके पॉल ग्राहम निबंध खोजने के लिए एक एंबेडिंग संचालित उत्पाद का निर्माणद्वारा@anotherai
743 रीडिंग
743 रीडिंग

सिरी का उपयोग करके पॉल ग्राहम निबंध खोजने के लिए एक एंबेडिंग संचालित उत्पाद का निर्माण

द्वारा Embedbase11m2023/02/14
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

मशीन लर्निंग में "एम्बेडिंग" एक अवधारणा है जो आपको डेटा की तुलना करने की अनुमति देती है। "एम्बेडबेस" एम्बेडिंग के निर्माण, भंडारण और पुनर्प्राप्ति के लिए एक ओपन-सोर्स एपीआई है। हम पॉल ग्राहम के निबंधों के लिए एक खोज इंजन बनाएंगे जिसका उपयोग हम Apple सिरी शॉर्टकट के साथ करेंगे।
featured image - सिरी का उपयोग करके पॉल ग्राहम निबंध खोजने के लिए एक एंबेडिंग संचालित उत्पाद का निर्माण
Embedbase HackerNoon profile picture
0-item


एम्बेडबेस निर्माण, भंडारण और एम्बेडिंग को पुनः प्राप्त करने के लिए एक ओपन-सोर्स एपीआई है।


आज हम पॉल ग्राहम के निबंधों के लिए एक खोज इंजन का निर्माण करेंगे जिसका उपयोग हम Apple सिरी शॉर्टकट के साथ करेंगे, उदाहरण के लिए इन निबंधों के बारे में सिरी से प्रश्न पूछना।


"एम्बेडिंग" मशीन लर्निंग में एक अवधारणा है जो आपको डेटा की तुलना करने की अनुमति देती है।

आज हम एम्बेडिंग के तकनीकी विषय में गोता नहीं लगाएंगे।


"एम्बेडिंग" के बारे में सोचने का एक तरीका एक बैग में समान चीजों को एक साथ रखने जैसा है। इसलिए यदि आपके पास खिलौनों का एक बैग है, और आप एक निश्चित खिलौना खोजना चाहते हैं, तो आप बैग में देखते हैं और देखते हैं कि इसके पास कौन से अन्य खिलौने हैं, यह पता लगाने के लिए कि आपको कौन सा खिलौना चाहिए। एक कंप्यूटर शब्दों के साथ एक ही काम कर सकता है, समान शब्दों को एक साथ एक बैग में रख सकता है, और फिर अपने पास के दूसरे शब्दों के आधार पर वह शब्द खोज सकता है जो वह चाहता है।


https://towardsdatascience.com/creating-word-embeddings-coding-the-word2vec-algorithm-in-python-using-deep-learning-b337d0ba17a8


जब आप अपने उत्पादन सॉफ़्टवेयर में एम्बेडिंग का उपयोग करना चाहते हैं, तो आपको उन्हें आसानी से स्टोर और एक्सेस करने में सक्षम होना चाहिए।


एम्बेडिंग के भंडारण और गणना के लिए कई वेक्टर डेटाबेस और एनएलपी मॉडल हैं। एम्बेडिंग से निपटने के लिए कुछ अतिरिक्त तरकीबें भी हैं।


उदाहरण के लिए, यह आवश्यक नहीं होने पर पुनर्गणना करने के लिए महंगा और अक्षम हो सकता है, उदाहरण के लिए, यदि नोट में "कुत्ते" और फिर "कुत्ते" शामिल हैं, तो आप आवश्यक रूप से पुनर्गणना नहीं करना चाहते क्योंकि परिवर्तित जानकारी उपयोगी नहीं हो सकती है।


इसके अलावा, इन वेक्टर डेटाबेसों के लिए एक तीव्र सीखने की अवस्था और मशीन सीखने को समझने की आवश्यकता होती है।


एंबेडबेस आपको मशीन लर्निंग, वेक्टर डेटाबेस, और कोड की कुछ पंक्तियों में गणनाओं को अनुकूलित करने के बारे में कुछ भी जाने बिना डेटा को सिंक्रोनाइज़ करने और शब्दार्थ खोज करने की अनुमति देता है।

सिरी के साथ पॉल ग्राहम निबंध खोज रहे हैं


क्रम में, हम करेंगे:


  1. एंबेडबेस को स्थानीय रूप से या Google क्लाउड रन पर परिनियोजित करें
  2. क्रॉली का उपयोग करके पॉल ग्राहम निबंधों के लिए एक क्रॉलर बनाएं जो एंबेडबेस में डेटा को निगले
  3. एक Apple सिरी शॉर्टकट बनाएं जो आपको आवाज और प्राकृतिक भाषा के साथ एम्बेडबेस के माध्यम से पॉल ग्राहम निबंध खोजने की सुविधा देता है

निर्माण समय!

टेक ढेर


रेपो क्लोनिंग


 git clone https://github.com/another-ai/embedbase cd embedbase


पाइनकोन की स्थापना

Pinecone वेबसाइट पर जाएं, लॉगिन करें और एक इंडेक्स बनाएं:

पिनकोन इंडेक्स बनाना



हम इसे "पॉल" नाम देंगे और आयाम "1536" का उपयोग करेंगे ( इस संख्या को ठीक करने के लिए महत्वपूर्ण है , हुड के तहत, यह OpenAI डेटा संरचना "एम्बेडिंग" का "आकार" है), अन्य सेटिंग्स कम महत्वपूर्ण हैं।


पिनकोन सूचकांक विन्यास


आपको अपनी Pinecone API कुंजी प्राप्त करने की आवश्यकता है जो Embedbase को Pinecone के साथ संचार करने देगी:


Pinecone API कुंजी प्राप्त करना



OpenAI को कॉन्फ़िगर करना


अब आपको https://platform.openai.com/account/api-keys पर अपना OpenAI कॉन्फ़िगरेशन प्राप्त करने की आवश्यकता है (यदि आवश्यक हो तो खाता बनाएं)।


प्रेस "एक नई कुंजी बनाएँ":

एक OpenAI कुंजी बनाना


साथ ही, अपनी संस्था आईडी यहां प्राप्त करें:

ओपनएआई संगठन आईडी प्राप्त करना


अपना एंबेडबेस कॉन्फ़िगरेशन बनाना


अब फ़ाइल "config.yaml" ( एम्बेडबेस निर्देशिका में ) में मान लिखें और भरें:

 # embedbase/config.yaml # https://app.pinecone.io/ pinecone_index: "my index name" # replace this with your environment pinecone_environment: "us-east1-gcp" pinecone_api_key: "" # https://platform.openai.com/account/api-keys openai_api_key: "sk-xxxxxxx" # https://platform.openai.com/account/org-settings openai_organization: "org-xxxxx"


एंबेडबेस चल रहा है


🎉 अब आप एम्बेडबेस चला सकते हैं!

डॉकर प्रारंभ करें, यदि आपके पास यह नहीं है, तो कृपया आधिकारिक वेबसाइट पर दिए गए निर्देशों का पालन करके इसे स्थापित करें।

मैक पर डॉकर शुरू करना

अब एंबेडबेस चलाएं:

 docker-compose up

(वैकल्पिक) क्लाउड परिनियोजन

यदि आप प्रेरित हैं, तो आप एंबेडबेस को Google क्लाउड रन में परिनियोजित कर सकते हैं। सुनिश्चित करें कि आपके पास एक Google क्लाउड प्रोजेक्ट है और आधिकारिक दस्तावेज के माध्यम से कमांड लाइन "gcloud" स्थापित किया है।


 # login to gcloud gcloud auth login # Get your Google Cloud project ID PROJECT_ID=$(gcloud config get-value project) # Enable container registry gcloud services enable containerregistry.googleapis.com # Enable Cloud Run gcloud services enable run.googleapis.com # Enable Secret Manager gcloud services enable secretmanager.googleapis.com # create a secret for the config gcloud secrets create EMBEDBASE_PAUL_GRAHAM --replication-policy=automatic # add a secret version based on your yaml config gcloud secrets versions add EMBEDBASE_PAUL_GRAHAM --data-file=config.yaml # Set your Docker image URL IMAGE_URL="gcr.io/${PROJECT_ID}/embedbase-paul-graham:0.0.1" # Build the Docker image for cloud deployment docker buildx build . --platform linux/amd64 -t ${IMAGE_URL} -f ./search/Dockerfile # Push the docker image to Google Cloud Docker registries # Make sure to be authenticated https://cloud.google.com/container-registry/docs/advanced-authentication docker push ${IMAGE_URL} # Deploy Embedbase to Google Cloud Run gcloud run deploy embedbase-paul-graham \ --image ${IMAGE_URL} \ --region us-central1 \ --allow-unauthenticated \ --set-secrets /secrets/config.yaml=EMBEDBASE_PAUL_GRAHAM:1


पॉल ग्राहम निबंध 'क्रॉलर का निर्माण

वेब क्रॉलर आपको एक वेबसाइट के सभी पेजों को डाउनलोड करने की अनुमति देते हैं, यह Google द्वारा उपयोग किया जाने वाला अंतर्निहित एल्गोरिथम है।


रिपॉजिटरी को क्लोन करें और निर्भरताएं स्थापित करें:

 git clone https://github.com/another-ai/embedbase-paul-graham cd embedbase-paul-graham npm i


आइए कोड को देखें, यदि आप टाइपस्क्रिप्ट प्रोजेक्ट के लिए आवश्यक सभी फाइलों से अभिभूत हैं, तो चिंता न करें और उन्हें अनदेखा न करें।


 // src/main.ts // Here we want to start from the page that list all Paul's essays const startUrls = ['http://www.paulgraham.com/articles.html']; const crawler = new PlaywrightCrawler({ requestHandler: router, }); await crawler.run(startUrls);


आप देख सकते हैं कि क्रॉलर को "रूट्स" से इनिशियलाइज़ किया गया है, ये रहस्यमय रूट क्या हैं?


 // src/routes.ts router.addDefaultHandler(async ({ enqueueLinks, log }) => { log.info(`enqueueing new URLs`); await enqueueLinks({ // Here we tell the crawler to only accept pages that are under // "http://www.paulgraham.com/" domain name, // for example if we find a link on Paul's website to an url // like "https://ycombinator.com/startups" if it will ignored globs: ['http://www.paulgraham.com/**'], label: 'detail', }); }); router.addHandler('detail', async ({ request, page, log }) => { // Here we will do some logic on all pages under // "http://www.paulgraham.com/" domain name // for example, collecting the page title const title = await page.title(); // getting the essays' content const blogPost = await page.locator('body > table > tbody > tr > td:nth-child(3)').textContent(); if (!blogPost) { log.info(`no blog post found for ${title}, skipping`); return; } log.info(`${title}`, { url: request.loadedUrl }); // Remember that usually AI models and databases have some limits in input size // and thus we will split essays in chunks of paragraphs // split blog post in chunks on the \n\n const chunks = blogPost.split(/\n\n/); if (!chunks) { log.info(`no blog post found for ${title}, skipping`); return; } // If you are not familiar with Promises, don't worry for now // it's just a mean to do things faster await Promise.all(chunks.flatMap((chunk) => { const d = { url: request.loadedUrl, title: title, blogPost: chunk, }; // Here we just want to send the page interesting // content into Embedbase (don't mind Dataset, it's optional local storage) return Promise.all([Dataset.pushData(d), add(title, chunk)]); })); });


ऐड () क्या है?


 const add = (title: string, blogPost: string) => { // note "paul" in the URL, it can be anything you want // that will help you segment your data in // isolated parts const url = `${baseUrl}/v1/paul`; const data = { documents: [{ data: blogPost, }], }; // send the data to Embedbase using "node-fetch" library fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(data), }).then((response) => { return response.json(); }).then((data) => { console.log('Success:', data); }).catch((error) => { console.error('Error:', error); }); };


अब आप क्रॉलर चला सकते हैं, एंबेडबेस में सब कुछ डाउनलोड करने और निगलने में एक मिनट से भी कम समय लगना चाहिए।

OpenAI क्रेडिट का उपयोग <$1 से कम के लिए किया जाएगा

ओपनएआई लागत


 npm start


यदि आपने एंबेडबेस को क्लाउड पर तैनात किया है, तो कृपया उपयोग करें


 # you can get your cloud run URL like this: CLOUD_RUN_URL=$(gcloud run services list --platform managed --region us-central1 --format="value(status.url)" --filter="metadata.name=embedbase-paul-graham") npm run playground ${CLOUD_RUN_URL}


आपको अपने टर्मिनल में कुछ गतिविधि (एंबेडबेस डॉकटर कंटेनर और नोड प्रक्रिया दोनों) बिना त्रुटियों के दिखाई देनी चाहिए ( अन्यथा मदद के लिए बेझिझक संपर्क करें )।


(वैकल्पिक) अपने टर्मिनल में एंबेडबेस के माध्यम से खोज करना

उदाहरण रिपॉजिटरी में आप " src/playground.ts " देख सकते हैं जो एक सरल स्क्रिप्ट है जो आपको अपने टर्मिनल में एंबेडबेस के साथ इंटरैक्ट करने देती है, कोड सीधा है:

 // src/playground.ts const search = async (query: string) => { const url = `${baseUrl}/v1/paul/search`; const data = { query, }; return fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(data), }).then((response) => { return response.json(); }).then((data) => { console.log('Success:', data); }).catch((error) => { console.error('Error:', error); }); }; const p = prompt(); // this is an interactive terminal that let you search in paul graham // blog posts using semantic search // It is an infinite loop that will ask you for a query // and show you the results const start = async () => { console.log('Welcome to the Embedbase playground!'); console.log('This playground is a simple example of how to use Embedbase'); console.log('Currently using Embedbase server at', baseUrl); console.log('This is an interactive terminal that let you search in paul graham blog posts using semantic search'); console.log('Try to run some queries such as "how to get rich"'); console.log('or "how to pitch investor"'); while (true) { const query = p('Enter a semantic query:'); if (!query) { console.log('Bye!'); return; } await search(query); } }; start();


यदि आप स्थानीय रूप से एंबेडबेस चला रहे हैं तो आप इसे इस तरह चला सकते हैं:

 npm run playground


या, इस तरह, अगर आपने एंबेडबेस को क्लाउड पर तैनात किया है:

 npm run playground ${CLOUD_RUN_URL}


परिणाम:

(वैकल्पिक) Apple सिरी शॉर्टकट बनाना

मजे का समय! पॉल ग्राहम निबंध 😜 के बारे में सिरी प्रश्न पूछने में सक्षम होने के लिए आइए एक Apple सिरी शॉर्टकट बनाएं


सबसे पहले, Apple शॉर्टकट शुरू करें:


Apple शॉर्टकट प्रारंभ कर रहा है


एक नया शॉर्टकट बनाएँ:

एक नया Apple सिरी शॉर्टकट बनाना


हम इस शॉर्टकट को "सर्च पॉल" नाम देंगे (ध्यान रखें कि यह उसी तरह होगा जैसे आप सिरी को शॉर्टकट शुरू करने के लिए कहते हैं, इसलिए कुछ आसान चुनें)


सादे अंग्रेजी में, यह शॉर्टकट उपयोगकर्ता से एक प्रश्न पूछता है और इसके साथ एंबेडबेस को कॉल करता है, और सिरी को उन निबंधों का उच्चारण करने के लिए कहता है जो उसे मिले।


शॉर्टकट का पहला भाग


  1. "डिक्टेट टेक्स्ट" आपको आवाज के साथ अपनी खोज क्वेरी पूछने देता है (अंग्रेजी भाषा चुनें)
  2. हम स्पष्टता के लिए "टेक्स्ट" में एम्बेडबेस के समापन बिंदु को संग्रहीत करते हैं, अपने सेटअप के अनुसार बदलते हैं ("https://localhost:8000/v1/search" यदि आप स्थानीय रूप से एम्बेडबेस चलाते हैं)
  3. स्पष्टता के लिए हम एंडपॉइंट को फिर से वेरिएबल में सेट करते हैं
  4. निर्धारित पाठ के लिए वही
  5. अब "की सामग्री प्राप्त करें" क्रॉलिंग के दौरान "vault_id" को "पॉल" के रूप में परिभाषित करने और "क्वेरी" संपत्ति के लिए वेरिएबल "क्वेरी" का उपयोग करने के लिए एंबेडबेस के लिए एक HTTP POST अनुरोध करेगा।


शॉर्टकट का अंतिम भाग


  1. "गेट फॉर इन" एंबेडबेस प्रतिक्रिया से संपत्ति "समानताएं" निकालेगा

  2. प्रत्येक समानता के लिए "प्रत्येक आइटम के साथ दोहराएं" होगा:

    1. "Document_path" संपत्ति प्राप्त करें
    2. एक चर "पथ" (एक सूची) में जोड़ें
  3. "गठबंधन" एक नई पंक्ति के साथ परिणामों में "शामिल" होगा

  4. (वैकल्पिक, नीचे कैसे दिखाया जाएगा) यह एक मजेदार ट्रिक है जिसे आप तीखेपन के लिए शॉर्टकट में जोड़ सकते हैं, OpenAI GPT3 का उपयोग करके परिणाम टेक्स्ट को थोड़ा सा रूपांतरित करने के लिए जब सिरी इसे उच्चारित करता है

  5. हम ध्वनि के अनुकूल होने के लिए परिणाम को "टेक्स्ट" में इकट्ठा करते हैं

  6. सिरी को इसे बोलने के लिए कहें


आप इस कार्यात्मक GPT3 शॉर्टकट का उपयोग करके परिणामों को अच्छे टेक्स्ट में बदल सकते हैं


("वाहक [आपका OPENAI कुंजी]" के साथ "प्राधिकरण" मान भरें)


कुछ भी बदलने के लिए एक कार्यात्मक GPT3 शॉर्टकट



एंबेडबेस के साथ, आप लागत कम रखते हुए एम्बेडिंग के निर्माण, भंडारण और पुनर्प्राप्ति के सिरदर्द के बिना कुछ ही समय में सिमेंटिक-संचालित उत्पाद बना सकते हैं।

निष्कर्ष

कृपया एंबेडबेस आज़माएं, कोई समस्या छोड़ें, और यदि आपको इस प्रयास का समर्थन करने और रिपॉजिटरी को अभिनीत करने में कोई आपत्ति नहीं है ❤️